微机原理与接口技术课后答案

第1章微型计算机系统概述

1. 简述微型计算机系统的组成。

2. 简述计算机软件的分类及操作系统的作用。

3. CPU是什么?写出Intel微处理器的家族成员。

4. 写出10条以上常用的DOS操作命令。

[参考答案]

1.答:微型计算机系统由硬件和软件两大部分组成,硬件又可细分为主机(由CPU、存储器、控制电路、接口等构成)、输入设备(如键盘)和输出设备(如显示器);软件可细分为系统软件(如操作系统)和应用软件。

3.答CPU(Central Processing Unit中央处理单元)是计算机的核心部件,它包括控制器和算术逻辑运算部件等。Intel 微处理器的家族成员有:8088/8086、80186、80286、80386、80486、Pentium(80586)、Pentium Ⅱ、Pentium Ⅲ 和Pentium IV。

第2章计算机中的数制和码制

1. 将下列十进制数转换成二进制数:

(1) 49;(2)73.8125;(3) 79.75

2. 将二进制数变换成十六进制数:

(1)101101B;(2)1101001011B;(3)1111111111111101B;

(4)100000010101B;(5)1111111B;(6)10000000001B

3. 将十六进制数变换成二进制数和十进制数:

(1)FAH;(2)5BH;(3)78A1H;(4)FFFFH; (5) 34.2AH;(6)B8.93H

4. 将下列十进制数转换成十六进制数:

(1)39;(2)299.34375;(3)54.5625

5. 将下列二进制数转换成十进制数:

(1)10110.101B;(2)10010010.001B;(3)11010.1101B

6. 计算(按原进制运算):

(1)10001101B+11010B;(2)10111B+11100101B;(3)1011110B-1110B;(4)124AH+78FH;(5)5673H+123H;(6)1000H-F5CH;

7. 已知a=1011B,b=11001B,c=100110B, 按二进制完成下列运算,并用十进制运算检查计算结果:

(1)a+b;(2)c-a-b;(3)a·b;(4)c/b

8. 已知a=00111000B, b=11000111B, 计算下列逻辑运算:

(1)a AND b;(2)a OR b;(3)a XOR b;(4)NOT a

9. 设机器字长为8位,写出下列各数的原码和补码:

(1)+1010101B;(2)-1010101B;(3)+1111111B;

(4)-1111111B;(5)+1000000B;(6)-1000000B

10. 写出下列十进制数的二进制补码表示(设机器字长为8位):

(1)15;(2)-1;(3)117;(4)0;

(4)-15;(5)127;(6)-128;(7)80

11. 设机器字长为8位,先将下列各数表示成二进制补码,然后按补码进行运算,并用十进制数运算进行检验:

(1)87-73;(2)87+(-73);(3)87-(-73);

(4)(-87)+73;(5)(-87)-73;(6)(-87)-(-73);

12. 已知a,b,c,d为二进制补码:a=00110010B, b=01001010B, c=11101001B, d=10111010B, 计算:

(1)a+b;(2)a+c;(3)c+b;(4)c+d;

(5)a-b;(6)c-a;(7)d-c;(8)a+d-c

13. 设下列四组为8位二进制补码表示的十六进制数,计算a+b和a-b,并判断其结果是否溢出:

(1)a=37H, b=57H; (2)a=0B7H, b=0D7H;

(3)a=0F7H, b=0D7H; (4)a=37H, b=0C7H

14. 求下列组合BCD数的二进制和十六进制表示形式:

(1)3251(2)12907(3)ABCD(4)abcd

15. 将下列算式中的十进制数表示成组合BCD码进行运算,并用加6/减6修正其结果:

(1)38+42;(2)56+77;(3)99+88;(4)34+69;

(5)38-42;(6)77-56;(7)15-76;(8)89-23

16. 将下列字符串表示成相应的ASCII码(用十六进制数表示):

(1)Example 1;(2)Jinan University;(3)-108.652;

(4)How are you?;(5)Computer(6)Internet Web

17. 将下列字符串表示成相应的ASCII码(用十六进制数表示):

(1)Hello(2)123456;(注:表示回车)(3)ASCII;

(4)The number is 2315

[参考答案]

1.解:(1)49=0011 0001B (2)73.8125=0100 1001.1101B

(3)79.75=0100 1111.11B

3. 解:(1)FAH=1111 1010B=250D (2)5BH=0101 1011B=91D

(3)78A1H=0111 1000 1010 0001B=30881D

(4)FFFFH=1111 1111 1111 1111B=65535D

5. 解:(1)10110.101B=22.625 (2)10010010.001B=14

6.0625

(3)11010.1101B=26.8125

7. 解:a=1011B=11, b=11001B=25, c=100110B=38

(1)a+b=100100B=36 (2)c-a-b=10B=2

(3)a·b=100010011B=275 (4)c/b=1……1101B(=13)

9. 解:(1)+1010101B 原码01010101B 补码01010101B

(2)-1010101B 原码11010101B 补码10101011B

(3)+1111111B 原码01111111B 补码01111111B

(4)-1111111B 原码11111111B 补码10000001B

(5)+1000000B 原码 01000000B 补码01000000B

(6)-1000000B 原码 11000000B 补码11000000B

11. 解:按补码表示+87=0101 0111B;+73=0100 1001B;-87=1010 1001B;-73=1011 0111B

(1)87-73=0101 0111B-0100 1001B=1110B=14

(2)87+(-73)=0101 0111B+1011 0111B=[1]0000 1110B=14(舍去进位)(3)87-(-73)=0101 0111B-1011 0111B=[-1]1010 0000B=-96(溢出)(4)(-87)+73=1010 1001B+0100 1001B=1111 0010B=-14

(5)(-87)-73=1010 1001B-0100 1001B=[-1]0110 0000B=96(溢出)(6)(-87)-(-73)=1010 1001B-1011 0111B=1111 0010B=-14

13. 解:(1)a=37H, b=57H; a+b=8EH; a-b=[-1]E0H=-32

(2)a=0B7H, b=0D7H; a+b=[1]8EH=-114; a-b=[-1]E0H=-32

(3)a=0F7H, b=0D7H; a+b=[1]CEH=-50; a-b=20H=32

(4)a=37H, b=0C7H; a+b=FEH=-2; a-b=[-1]70H=112

15. 解:(1)将38、42表示成组合BCD码:38H、42H,然后按二进制进行运算,并根据运算过程中的AF,CF进行加6/减6修正。38H+42H=7AH,低4位需要加6修正:7AH+6=80H,所以有38+42=80;

(2)56H+77H=CDH,高4位、低4位都应加6修正:CDH+66H=[1]33H,因此有56+77=133;

(3)99H+88H=[1]21H(AF=1), 高4位、低4位都应加6修正:

[1]21H+66H=[1]87H, 因此99+88=187

(4)34H+69H=9DH, 低4位需要加6修正:9DH+6=A3H, 修正结果使高4位超出9, 这时再对高4位进行加6修正: A3H+60H=[1]03H, 因此34+69=103

(5)38H-42H=[-1]F6H, 因CF=1(有借位), 高4位应减6修正:

[-1]F6H-60H=[-1]96H, 指令的借位应表示成100的补码, 因此

38-42=96-100=-4

(6)77H-56H=21H, 不需要修正, 因此77-56=21

(7)15H-76H=[-1]9FH, 高4位、低4位都应减6修正: [-1]9FH-66H=[-1]39H, 因此15-76=39-100=-61

(8)89H-23H=66H, 不需要修正, 因此89-23=66

17. 解:字符串的ASCII码(用十六进制数表示)为:

(1)48,65,6C,6C,6F

(2)31,32,33,0D,34,35,36

(3)41,53,43,49,49

(4)54,68,65,20,6E,75,6D,62,65,72,20,69,73,20,32,33,31,35

第3章微机系统中的微处理器

3.1例题

例3-1 有一块120个字的存储区域,其起始地址为625A:234D,写出这个存储区域首末单元的物理地址。

解:存储区域的字节数为:2×120=240=0F0H,

首地址为:625AH×10H+234DH=648EDH,

末地址为:648EDH+0F0H=649DDH,

或者:625AH×10H+(234DH+0F0H)=625A0H+243DH=649DDH。

例3-2 两个十六进制数7825H和5A1FH分别相加和相减后,求运算结果及各标志位的值。

解:7825H+5A1FH=0D244H,AF=1,CF=0,ZF=0,SF=1,OF=1(当将7825H和5A1FH 看作有符号数时,两个正数相加得到一个负数,结果显然是错误的,实际上,在运算过程中,次高位产生了进位而最高位没有产生进位,故运算产生溢出),PF=1(因为在44H中包含有偶数个1)。

7825H-5A1FH=1E06H,AF=1,CF=0,ZF=0,SF=0,OF=0,PF=1。

5A1FH-7825H=0E1FAH,AF=0,CF=1,ZF=0,SF=1,OF=0,PF=1。

3.2习题

1.微处理器内部结构由哪几部分组成?阐述各部分的主要功能。

2.微处理器级总线有哪几类?各类总线有什么作用?

3.为什么地址总线是单向的,而数据总线是双向的?

4.8086/8088微处理器内部有哪些寄存器?其主要作用是什么?

5.如果某微处理器有20条地址总线和16条数据总线:

(1)假定存储器地址空间与I/O地址空间是分开的,则存储器地址空间有多大?

(2)数据总线上传送的有符号整数的范围有多大?

6.将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF和

PF的值:

(1)1234H;(2)4321H;(3)CFA0H;(4)9D60H

7.从下列各数中减去4AE0H,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:

(1)1234H;(2)5D90H;(3)9090H;(4)EA04H

8.什么是逻辑地址?什么是物理地址?它们之间的关系如何?

9.写出下列存储器地址的段地址、偏移地址和物理地址:

(1)2134:10A0;(2)1FA0:0A1F;(3)267A:B876

10.给定一个数据的有效地址为2359H,并且(DS)=490BH,求该数据的物理地址。

11.如果在一个程序段开始执行之前,(CS)=0A7F0H,(IP)=2B40H,求该程序段的第

一个字的物理地址。

12.下列操作可使用哪些寄存器?

(1)加法和减法;(2)循环计数;(3)乘法和除法;(4)保存段地址;

(5)表示运算结果的特征;(6)指令地址;(7)从堆栈中取数的地址;

13.IBM PC有哪些寄存器可用来指示存储器的地址?

14.设(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列寻址方

式产生的有效地址和物理地址:

(1)直接寻址;(2)用BX的寄存器间接寻址;(3)用BX的寄存器相对寻址;

(4)用BX和SI的基址变址寻址;(5)用BX和SI的基址变址且相对寻址

15.若(CS)=5200H时,物理转移地址为5A238H,那么(CS)变成7800H时,物理转移

地址为多少?

16.设(CS)=0200H,(IP)=2BC0H,位移量=5119H,(BX)=1200H,(DS)=212AH,

(224A0H)=0600H,(275B9H)=098AH。求使用下列寻址方式时的转移地址:

(1)段内直接寻址方式;

(2)使用BX的寄存器寻址的段内间接寻址方式;

(3)使用BX的寄存器相对寻址的段内间接寻址方式;

17.将下列两组的词汇和说明关联起来:

(1)CPU; A.保存当前栈顶地址的寄存器;

(2)EU; B.指示下一条要执行指令的地址;

(3)BIU; C.总线接口部件, 实现执行部件所需要的所有总线操作;

(4)IP ; D .分析并控制指令执行的部件;

(5)SP ; E .存储程序、数据等信息的记忆装置,PC 机有RAM 和ROM 两种;

(6)存储器; F .以后进先出方式工作的存储器空间;

(7)堆栈; G .把汇编语言程序翻译成机器语言程序的系统程序; (8)指令; H .惟一代表存储器空间中的每个字节单元的地址; (9)状态标志; I .能被计算机直接识别的语言;

(10)控制标志; J .用指令的助记符、符号地址、标号等符号书写程序的语言;

(11)段寄存器; K .把若干个模块连接起来成为可执行文件的系统程序; (12)物理地址; L .保存各逻辑段的起始地址的寄存器; (13)汇编语言; M .控制操作的标志,PC 机有三位:DF 、IF 、TF ; (14)机器语言; N .记录指令操作结果的标志,PC 机有六位:OF 、SF 、ZF 、AF 、PF 、CF ;

(15)汇编程序; O .执行部件,由算术逻辑单元(ALU )和寄存器组等组成; (16)连接程序; P .由汇编程序在汇编过程中执行的指令; (17)目标码; Q .告诉CPU 要执行的操作,在程序运行时执行; (18)伪指令 R .机器语言代码。

[参考答案]

1. 答:微处理器内部结构主要由算术逻辑运算单元(ALU )、控制器、工作寄存器和I/O

控制逻辑组成。算术逻辑运算单元是CPU 的核心,它完成所有的运算操作;控制器是CPU 的“指挥中心”,只有在它的控制下,CPU 才能完成指令的读入、寄存、译码和执行;工作寄存器用于暂时存储寻址信息和计算中间结果;I/O 控制逻辑用于处理I/O 操作。 3. 答:由于在计算机中地址总是由CPU 产生的,因此地址总线是单向的。而数据可从CPU

写到存储器,也可从存储器读到CPU ,因此数据总线是双向的。 5. 解:存储空间为110485762

20

==M 字节, 数据总线上传送的有符号整数的范围为

-32768~+32767。

7. 解:(1)1234H -4AE0H =C754H ;CF =1,AF =0,SF =1,ZF =0,OF =0,PF =0 (2)5D90H -4AE0H =12B0H ;CF =0,AF =0,SF =0,ZF =0,OF =0,PF =0 (3)9090H -4AE0H =45B0H ;CF =0,AF =0,SF =0,ZF =0,OF =0,PF =0 (4)EA04H -4AE0H =9F24H ;CF =0,AF =0,SF =1,ZF =0,OF =0,PF =1 9. 解:(1)段地址:2134H ; 偏移地址:10A0H ; 物理地址:223E0H (2)段地址:1FA0H ; 偏移地址:0A1F H ; 物理地址:2041FH (3)段地址:267A H ; 偏移地址:B876H ; 物理地址:32016H 11. 解:物理地址为: 0A7F0H ×10H +2B40H =A3330H 。 13. 答:指示存储器地址的寄存器有:SI ,DI ,BX ,BP

15. 解:偏移地址为5A238H -5200H ×10H =8238H ,因此当(CS )变成7800H 时,物理转

移地址为7800H ×10H +8238H =80238H

17.答:两组词汇和说明的关联关系为

(1)~O;(2)~D;(3)~C;(4)~B;(5)~A;(6)~E;

(7)~F;(8)~Q;(9)~N;(10)~M;(11)~L;(12)~H;

(13)~J;(14)~I;(15)~G;(16)~K;(17)~R;(18)~P。

第4章汇编语言程序设计基本方法

4.1例题

例4-1 写出下列变量的内容:

VAR1 DB 125,125/3, -1, -10H

VAR2 DW 125, 125/3, -1, -10H

VAR3 DB ‘AB’, ‘CD’

VAR4 DW ‘AB’, ‘CD’

解:按十六进制数依次写出各个变量的内容为:

VAR1:7D,29,FF,F0

VAR2:007D,0029,FFFF,FFF0

VAR3:41,42,43,44

VAR4:4142,4344

按内存存储顺序给出:

7D,29,FF,F0,7D,00,29,00,FF,FF,F0,FF,41,42,43,44,42,41,44,43

例4.2 设有下列伪指令:

START DB 1,2,3,4,’ABCD’

DB 3 DUP(?,1)

BUF DB 10 DUP (?),15

L EQU BUF-START

求L的值。

解:由EQU伪指令知,L的值为BUF的偏移地址减去START的偏移地址,而变量START 共占用8个字节,第2行定义的变量(无变量名)共占用6个字节,因此,L的值为8+6=14=0EH。

例4.3 在缓冲区DATABUF中保存有一组无符号数据(8位),其数据个数存放在DATABUF 的第1、2个字节中,要求编写程序将数据按递增顺序排列。(与教材p.114例4.3.10类似, 但方法不同)

解:这里采用双重循环实现数据的排序,这可使程序变得简单。

N=100 ;设有100个数据

STACK SEGMENT STACK ‘STACK’

DW 100H DUP(?)

TOP LABEL WORD

DATA SEGMENT

DATABUF DW N

DB N DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

LEA SP,TOP

; 取出随机数据

MOV CX,DATABUF

LEA SI,DATABUF+2

MOV BL,23

MOV AL,11

LP:

MOV [SI],AL

INC SI

ADD AL,BL

LOOP LP

; 数据排序

MOV CX,DATABUF

DEC CX

LEA SI,DATABUF+2

ADD SI,CX

LP1:

PUSH CX

PUSH SI

LP2:

MOV AL,[SI]

CMP AL,[SI-1]

JAE NOXCHG

XCHG AL,[SI-1]

MOV [SI],AL

NOXCHG:

DEC SI

LOOP LP2

POP SI

POP CX

LOOP LP1

MOV AH,4CH ;返回DOS

MOV AL,0

INT 21H

CODE ENDS

END START

例4-4 有一组数据(16位而进制数)存放在缓冲区BUF1中, 数据个数保存在BUF1的头两个字节中。要求编写程序实现在缓冲区中查找某一数据,如果缓冲区中没有该数据,则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其余的删除。

解:在缓冲区BUF中搜索指定的数据,当没有找到时,插入该数据;当找到时,进入搜索多余的重复数据,每找到一个就删除它(将缓冲区的剩余数据向前移动一个字)。当然应注意更新缓冲区的长度单元。

STACK SEGMENT STACK 'STACK'

DW 100H DUP(?)

TOP LABEL WORD

STACK ENDS

;设缓冲区原有10个字,指定的数据为(NEW)=56AAH

DATA SEGMENT

BUF DW 10

DW 1000H,0025H,6730H,6758H,7344H,2023H,0025H,6745H,10A7H,0B612H

DW 10 DUP(?)

NEW DW 56AAH

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

LEA SP,TOP ;搜索指定的数据

MOV CX,BUF

LEA SI,BUF+2

MOV AX,NEW

L1:

CMP AX,[SI]

JZ L2

.......INC SI

INC SI

LOOP L1 ;没有找到,则插入数据

MOV [SI],AX

INC BUF

JMP OK ;找到后,在剩余部分搜索重复的数据

L2:

DEC CX

INC SI

INC SI

L3:

CMP AX,[SI]

JZ L4

INC SI

INC SI

LOOP L3

JMP OK ;找到一个重复数据,则删除它

L4:

PUSH SI

DEC CX

PUSH CX

MOV DI,SI

INC SI

INC SI

CLD

REP MOVSW

DEC BUF

POP CX

POP SI

JMP L3 ;删除后,返回继续搜索重复的数据

OK:

MOV AH,4CH ;返回DOS

MOV AL,0

INT 21H

CODE ENDS

END START

例4.5 在缓冲区DAT1和DAT2中,存放着两组递增有序的8位二进制无符号数,其中前两个字节保存数组的长度,要求编程实现将它们合并成一组递增有序的数据DAT,DAT 的前两个字节仍用于保存数组长度。

解:这里要用到3个指针的使用。对于写指针首选使用DI,两个读指针可采用SI和BX,分别指示DAT1和DAT2。这样可适时使用字符串指令,以简化程序设计。

在设计中,将用BX指示的缓冲区DAT2内容读入AL,这样,当要将DAT1的内容传送到DAT时,可采用MOVSB指令;当要将DAT2的内容传送到DAT时,可采用STOSB指令。

STACK SEGMENT STACK 'STACK'

DW 100H DUP(?)

TOP LABEL WORD

STACK ENDS ;设DAT1中有10个数据,DAT2中有13个数据

DATA SEGMENT

DAT1 DW 10

DB 10H,25H,67H,68H,73H,83H,95H,0A8H,0C2H,0E6H

DAT2 DW 13

DB 05,12H,26H,45H,58H,65H,67H,70H,76H,88H,92H,0CDH,0DEH DAT DW ?

DB 200 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

LEA SP,TOP

MOV CX,DAT1

MOV DX,DAT2

MOV DAT,CX

ADD DAT,DX

LEA SI,DAT1+2

LEA BX,DAT2+2

LEA DI,DAT+2

CLD

L1:

MOV AL,[BX]

INC BX

L2:

CMP AL,[SI]

JB L3

MOVSB ;DAT1区中的数据传送到DAT区

DEC CX

JZ L4

JMP L2

L3:

STOSB ;DAT2区中的数据传送到DAT区

DEC DX

JZ L5

JMP L1

L4:

MOV SI,BX

DEC SI

MOV CX,DX

L5:

REP MOVSB

MOV AH,4CH ;返回DOS

MOV AL,0

INT 21H

CODE ENDS

END START

例4.6 已知缓冲区BUFA内有20个互不相等的整数(其序号从0到19),缓冲区BUFB 内有30个互不相等的整数(其序号从0到29)。编写程序完成:将既在BUFA中出现又在BUFB中出现的整数(设为x)存放在缓冲区BUFC中,并将x在BUFA和BUFB中的序号分别存放于缓冲区BUFCA和BUFCB中。

解:这里需要5个指针,但BUFC、BUFCA和BUFCB为同步操作,只需要一个指针,寻址方式为寄存器相对寻址,即(设AL为找到的值,DL、BL为序号)

MOV BUFC[DI],AL

MOV BUFCA[DI],DL

MOV BUFCB[DI],BL ;对序号也应小心处理,我们采用寄存器相对寻址,例如MOV AL,BUFA[SI],其中SI即为序号。

STACK SEGMENT STACK 'STACK'

DW 100H DUP(?)

TOP LABEL WORD

STACK ENDS

N1=20

N2=30

DATA SEGMENT

BUFA DB 10H,25H,67H,26H,68H,73H,83H,58H,0,06H,12H,0CDH,95H

DB 0A8H,0C2H,48H,0E6H,0F1H,1AH,0F5H

BUFB DB 05,12H,26H,45H,53H,60H,6AH,7FH,76H,88H,92H,0C1H,0DEH,0E1H,0F5H

DB 09,17H,23H,48H,58H,65H,67H,70H,7CH,82H,96H,0CDH,0D1H,0F1H,0FEH

BUFC DB 20 DUP(?)

BUFCA DB 20 DUP(?)

BUFCB DB 20 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK

MOV SS,AX

LEA SP,TOP

;以BUFA为外循环,每个字节与BUFB的所有字节比较(构成内循环),

;以确定是否存在相同的值。

MOV CX,N1

XOR SI,SI

XOR DI,DI

L1:

MOV AL,BUFA[SI]

PUSH CX

MOV CX,N2

XOR BX,BX

L2:

CMP AL,BUFB[BX]

JZ L3

INC BX

LOOP L2

JMP L4

;找到相同的值后,进行值传送和序号保存。

L3:

MOV BUFC[DI],AL

MOV DX,SI

MOV BUFCA[DI],DL

MOV BUFCB[DI],BL

INC DI

L4:

POP CX

INC SI

LOOP L1

MOV AH,4CH ;返回DOS

MOV AL,0

INT 21H

CODE ENDS

END START

4.2习题

1.写出完成下列要求的变量定义语句:

(1)在变量var1中保存6个字变量:4512H,4512,-1,100/3,10H,65530;(2)在变量var2中保存字符串:’BYTE’, ’word’, ’WORD’;

(3)在缓冲区buf1中留出100个字节的存储空间;

(4)在缓冲区buf2中,保存5个字节的55H,再保存10个字节的240,并将这一过程重复7次;

(5)在变量var3中保存缓冲区buf1的长度;

(6)在变量pointer中保存变量var1和缓冲区buf1的偏移地址。

2.设变量var1的逻辑地址为0100:0000,画出下列语句定义的变量的存储分配图: var1 DB 12,-12,20/6,4 DUP(0,55H)

var2 DB ‘Assemble’

var3 DW ‘AB’, ‘cd’, ‘E’

var4 DW var2

var5 DD var2

3.指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设VAR1, VAR2为字变量, L1为标号):

(1)MOV SI,100 (2)MOV BX,VAR1[SI]

(3)MOV AX, [BX] (4)MOV AL, [DX]

(5)MOV BP, AL (6)MOV VAR1, VAR2

(7)MOV CS, AX (8)MOV DS, 0100H

(9)MOV [BX][SI], 1 (10)MOV AX, VAR1+VAR2

(11)ADD AX, LENGTH VAR1 (12)OR BL, TYPE VAR2

(13)SUB [DI], 78H (14)MOVS VAR1, VAR2

(15)PUSH 100H (16)POP CS

(17)XCHG AX, ES (18)MOV DS, CS

(19)JMP L1+5 (20)DIV AX, 10

(21)SHL BL, 2 (22)MOV AL, 15+23

(23)MUL CX (24)XCHG CL, [SI]

(25)ADC CS:[0100], AH (26)SBB VAR1-5,154

4.说明下列指令对的区别:

(1)MOV AX,VAR1 与 MOV AX,OFFSET VAR1

(2)MOV AX,VAR2 与 LEA AX,VAR2

(3)MOV AL,LENGTH VAR1 与 MOV AL,SIZE VAR1

(4)MOV AL,ES: [DI] CMP AL, [SI]

与 CMPSB

(5)SHR AL,1 与 SAR AL,1

(6)SHR AL,1 与 ROR AL,1

(7)ROL BX,1 与 RCL BX,1

5.写出下列转移指令的寻址方式(设L1为标号,VAR1为字型变量,DVAR1为双字型变量):

(1)JMP L1 (2)JMP NEAR L1

(3)JNZ L1 (4)JMP BX

(5)JG L1 (6)JMP VAR1[SI]

(7)JMP FAR PTR L1 (8)JMP DVAR1

6.设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=3412H,(20102)=7856H,(21200)=4C2AH,(21202)=65B7H,求下列指令执行后AX寄存器的内容:(1)MOV AX,1200H;(2)MOV AX,BX;(3)MOV AX, [1200H];

(4)MOV AX, [BX]; (5)MOV AX,1100[BX];(6)MOV AX, [BX][SI];

(7)MOV AX,1100[BX][SI]

7.执行下列指令后,DX寄存器中的内容是多少?

TABLE DW 25,36,-1,-16,10000,13

PYL DW 7

……

MOV BX,OFFSET TABLE

ADD BX,PYL

MOV DX,[BX]

8.如果堆栈的起始地址为2200:0000,栈底为0100H,(SP)=00A8H,求

(1)栈顶地址;

(2)SS的内容;

(3)再存入数据5678H,3AF2H后,SP的内容。

9.设已用伪指令EQU定义了4个标识符:

N1 EQU 2100

N2 EQU 10

N3 EQU 20000

N4 EQU 25000

下列指令是否正确?并说明原因。

(1)ADD AL,N1-N2;(2)MOV AX,N3+N4;

(3)SUB BX,N4-N3;(4)SUB AH,N4-N3-N1;

(5)ADD AL,N2;(6)MOV AH,N2*N2

10.按下列要求写出指令:

(1)将AX寄存器的低4位清零,其余位不变;

(2)将BX寄存器的低4位置1,其余位不变;

(3)将AL寄存器的低4位保持不变,高4位取反;

(4)测试BX中的位1和位2,当这两位同时为0时将AL置0FFH,否则AL清零;(5)测试BX中的位1和位2,当这两位有一位为0时将AL置0FFH,否则AL清零;(6)将AL中保存的字母ASCII码变换成相应的大写字母的ASCII码;

(7)将AL中保存的字母ASCII码变换成相应的小写字母的ASCII码;

(8)将AX中的各位取反;

(9)将DX中的低7位取反,高9位不变;

(10)将CX中的低8位与高8位互换。

11.写出完成下述功能的程序段:

(1)传送40H到AL寄存器;

(2)将AL的内容乘以2;

(3)传送16H到AH寄存器;

(4)AL的内容加上AH的内容。

计算最后结果(AL)=?

12.写出完成下述功能的程序段:

(1)从缓冲区BUF的0004偏移地址处传送一个字到AX寄存器;

(2)将AX寄存器的内容右移2位;

(3)将AX内容与BUF的0006偏移地址处的一个字相乘;

(4)相乘结果存入BUF的0020H偏移地址处(低位在前)。

13.设(BX)=11001011B,变量VAR的内容为00110010B,求下列指令单独执行后BX 的内容:

(1)XOR BX,VAR;(2)AND BX,VAR;

(3)OR BX,VAR;(4)XOR BX,11110000B;

(5)AND BX,00001111B;(6)TEST BX,1。

14.设(DX)=10111011B,(CL)=3,(CF)=1,求下列指令单独执行后DX的内容:

(1)SHR DX,1;(2)SAR DX,CL;(3)SHL DX,CL;

(4)SHL DX,1;(5)ROR DX,CL;(6)ROL DL,CL;

(7)SAL DH,1;(8)RCL DX,CL;(9)RCR DL,1

15.选择题(各小题只有一个正确答案)

(1)执行下列三条指令后:

MOV SP,1000H

PUSH AX

CALL BX

a. (SP)=1000H;

b. (SP)=0FFEH;

c. (SP)=1004H;

d. (SP)=0FFCH;

(2)要检查寄存器AL中的内容是否与AH相同,应使用的指令为:

a. AND AL, AH

b. OR AL, AH

c. XOR AL, AH

d. SBB AL, AH

(3)指令JMP NEAR PTR L1与CALL L1(L1为标号)的区别在于:

a. 寻址方式不同;

b. 是否保存IP的内容;

c. 目的地址不同;

d. 对标志位的影响不同。

16.寄存器DX:AX组成32位数,DX为高位,编写程序段实现:

(1)DX:AX右移3位,并将移出的低3位保存在CL中;

(2)DX:AX左移3位,并将移出的高3位保存在CL中;

√17.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。

18.利用移位、传送和相加指令实现AX的内容扩大10倍。

19.在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。

√20.编写程序段实现将BL中的每一位重复4次,构成32位的双字DX:AX,例如当BL=01011101B时,得到的(DX)=0F0FH,(AX)=0FF0FH。

21.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。

22.在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:

(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;

(2)当两数均为奇数时,两个变量的内容不变;

(3)当两数均为偶数时,两数缩小一倍后存入原处。

23.已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写

程序段找出这个错码,并将它送AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。

24.分析下列程序段的功能:

MOV CL,04

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

25.下列程序段执行后,求BX寄存器的内容:

MOV CL,3

MOV BX,0B7H

ROL BX,1

ROR BX,CL

26.下列程序段执行后,求BX寄存器的内容:

MOV CL,5

MOV BX,7D5CH

SHR BX,CL

27.设数组ARRAY的第1个字节存放数组的长度(<256),从第2个字节开始存放无符

号8位数,求数组元素之和(结果放在AX中)。如果计算的和超出16位数的范围,则给出溢出标志DX=-1。

28.设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)

和最大值(存入DX)。

29.设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其

中的0元素抹去,并更新其长度。

30.编写程序实现N个字乘以或除以1个字,设BUFN存放N个字,BUF1存放乘数或除

数,PRODUCT存放乘积,QUOTIENT存放商,REMAINDER存放余数。

31.编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1

个数相等的元素个数。

32.设有n(设为17)个人围坐在圆桌周围,按顺时针给他们编号(1,2,…,n),从

第1个人开始按顺时针方向加1报数,当报数到m(设为11)时,该人出列,余下的人继续进行,直到所有人出列为止。编写程序模拟这一过程,求出出列人的编号顺序。

33.编写子程序实现以十六进制数在屏幕上显示AL的内容。

34.从键盘上读入一个正整数N(0≤N≤65535),转换成十六进制数存入AX,并在屏

幕上显示出来。

35.在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存

放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。

36. 编写程序完成求多位数(N 个字)的绝对值。 37. 已知斐波那契数列的定义为:)

3(,1,12

121≥+===--i F F F F F i i i ,编写

求该数列前n 项的子程序。

38. 编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。 39. 编写程序实现将包含20个数据的数组ARRAY 分成两个数组:正数数组ARRAYP 和负数数组ARRAYN ,并分别将这两个数组中数据的个数显示出来。

40. 编写程序实现求缓冲区BUFFER100个字中的最小偶数(存入AX )。

41. 编写程序实现求级数 ++++2

2

2

21n 的前n 项和刚大于2000的项数n 。 42. 已知数组A 中包含有15个互不相等的整数,数组B 中包含有20个互不相等的整数,编写程序实现将既在数组A 中出现又在数组B 中出现的整数存放于数组C 中。

43. 定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES 或DS 的功能。 44. 定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H 的09号功能)。 45. 定义一条宏指令,实现在屏幕上显示出指定的字符串。 46. 定义一条宏指令,实现在屏幕上输出回车、换行。 47. 利用其它指令完成与下列指令一样的功能: (1)REP MOVSB ; (2)REP LODSB ; (3)REP STOSB ; (4)REP SCASB 。 48. 设在数据段中定义了:

STR1 DB ‘ASSEMBLE LANGUAGE ’ STR2 DB 20 DUP(?) 利用字符串指令编写程序段实现:

(1)从左到右将STR1中的字符串传送到STR2; (2)从右到左将STR1中的字符串传送到STR2; (3)将STR1中的第6个和第7个字节装入DX ;

(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI 。 49. 设在数据段中定义了:

STRING DB ‘Today is Sunday & July 16, 2000’ 编写程序实现将STRING 中的’&’用’/’代替。 50. 分析下列程序段完成的功能: MOV CX ,100 LEA SI ,FIRST LEA DI ,SECOND REP MOVSB

51. 分析下列程序段:

LEA DI ,STRING MOV CX ,200 CLD

MOV AL,20H

REPZ SCASB

JNZ FOUND

JMP NOT_FOUND

问:转移到FOUND的条件。

52.设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于

NEWS字符串,则执行NEW_LESS,否则顺序执行程序。

53.编程实现将STRING字符串中的小写字母变换成大写字母。

54.设在数据段中定义了:

STUDENT_NAME DB 30 DUP(?)

STUDENT_ADDR DB 9 DUP(?)

STUDENT_PRINT DB 50 DUP(?)

编写程序实现:

(1)用空格符清除缓冲区STUDENT_PRINT;

(2)在STUDENT_ADDR中查找第一个’_’字符;

(3)在STUDENT_ADDR中查找最后一个’_’字符;

(4)如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’;

(5)将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR

传送到STUDENT_PRINT的后9个字节中。

55.在DS:X_BUF为起始地址的表中存有按由小到大顺序排列的一组16位无符号数,其中

该表的第一、二两字节存放数据个数。现在DS:X_KEY中存有一个关键字(16位无符号数),要求从上述表中查找第一个此关键字,若找到此关键字,则DI中存放该关键字在该表中的偏移量;若无此关键字,则将该关键字插入X_BUF表中,使该表依然有序,并将该关键字在表中的偏移量存放在DI中。

56.分析下列子程序FUNC1,并回答相应的问题。

FUNC1 PROC NEAR

XOR CX,CX

MOV DX,01

MOV CL,X

JCXZ A20

INC DX

INC DX

DEC CX

JCXZ A20

A10: MOV AX,02

SHL AX,CL

ADD DX,AX

LOOP A10

A20: MOV Y,DX

RET

FUNC1 ENDP

相关推荐
相关主题
热门推荐