1.设 DS=1000H,ES=3000H,SS=4000H,SI=00A0H,BX=0700H,BP=0070H,执行指令为 MOV AX, [BX+5]。 (1)指令使用的是何种寻址方式? (2)源数据的逻辑地址和物理地址分别是多少? (3)若源数据为 1234H,则执行指令后上述各寄存器的内容是什么? 答案:基址寻址,基址寄存器是 BX,源操作数在数据段中,源操作数的逻辑地址是: EA=BX+5=0700H+5=0705H 源操作数的物理地址是:10705H 若源数据为 1234H,则执行指令后,AX 中的内容就为 1234H,其余寄存器的内容不变。
2.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式,并写出指令中存储器操 作数的物理地址的计算公式。 (1)MOV AX, 2408H (2)MOV BX, [SI] (3)MOV [BP+100H],AX (4)MOV [BX+DI], '$' (5)MOV DX, ES:[BX+SI]
答案: (1)立即寻址,(AX)=2408H (2)寄存器寻址,物理地址:10H×(DS)+EA=10H×(DS)+(SI) (3)寄存器寻址,物理地址:10H×(SS)+(BP)+0100H (4)基址加变址寻址,物理地址:10H×(DS)+(BX)+(DI) (5)基址加变址,带有段超越前缀,物理地址:10H×(ES)+(BX)+(SI) 3.写出能完成下述操作的指令。
(1)将立即数 1234H 送至 DS 寄存器。 (2)将存储单元 3000H 和内容送至 4000H 单元。 (3)将累加器 AX 与寄存器 CX 中的内容对调。 答案: (1)MOV AX, 1234H MOV DS, AX
(2) MOV AX, [3000H] MOV [4000H], AX (3) XCHG AX, CX
4.编程:将数据段中以 BX 为偏移地址的连续 4 单元的内容颠倒过来。 答案: MOV AL, [BX] XCHG AL, [BX+3] MOV [BX], AL MOV AL,[BX+1] XCHG AL, [BX+2] MOV [BX+1], AL
5.已知(DS)=091DH, (SS)=(1E4AH), (AX)=1224H, (BX)=0024H, (CX)=5678H, (BP)=0024H, (SI)=0012H , (DI)=0032H , (09214H)=085BH , (09226H)=00F6H , (09228H)=1E40H , (1E4F6H)=091DH。试问下列指令或指令段执行后结果如何? (1)MOV CL, [BX+20H] (2)MOV [BP][DI], CX (3)LEA BX, [BX+20H][SI] MOV AX, [BX+2] (4)LDS SI, [BX][DI] MOV BX,[SI] (5)XCHG CX, [BX+32H] XCHG [BX+20H][SI], AX 答案: (1) CL=5BH (2)(1E4F6H)=5678H (3)(AX)=1E40H (4)(BX)=091DH
(5)(AX)=5678H, (09226H)=1224H
6.十六进制 0~9, A~F 对应的 ASCII 码为 30H~39H, 41H~46H, 依次放在内存以 TABLE 开始的区域,将 AL 中某一位十六进制数×H 转换为对应的 ASCII 码,请编写程序段。
答案: LEA BX, TABLE MOV AL, ××H XLAT
7.将 AX 寄存器清零有 4 种方法,试写出这 4 条指令。 答案:MOV AX, 00H SUB AX, AX AND AX, 00H XOR AX, AX
8.使用一条逻辑运算指令实现下列要求: (1)使 AL 高 4 位不变,低 4 位为 0。 (2)使 AL 最高位置 1,后 7 位不变。 (3)使 AL 中的 bit3、bit4 变反,其余位不变。 (4)测试判断 CL 中的 bit2、bit5、bit7 是否都为 1。 答案: (1) AND AL, 0F0H (2)OR AL, 80H (3)XOR AL 18H (4)TEST AL, 0A4H
9.试分析下面的程序段完成什么功能。 MOV CL, 4 SHL AX, CL
SHL BL, CL MOV AL, BL SHR DH, CL OR AL, DH
答案:将 AX 中间 8 位,BX 的低 4 位,DX 的高 4 位组成一个新字存放在 AX 中。 10.若要将源串 100 个字节数据传送到目标串单元中去,设源串首址的偏移地址为 2500H, 目标串首址的偏移地址为 1400H,请编写程序实现以下功能。 (1)完成源串到目标串的搬移。 (2)比较两串是否完全相同,若两串相同,则 BX 寄存器内容为 0;若两串不同,则 BX 指向 源串中第一个不相同字节的地址,且该字节的内容保留在 AL 的寄存器中。 答案: (1) CLD MOV CX, 100 MOV SI, 2500H MOV DI, 1400H REP MOVSB (2) CLD MOV CX, 100 MOV SI, 2500 MOV DI, 1400 REPE CMPSB JZ EQQ DEC SI MOV BX, SI MOV AL, [SI] JMP STOP EQQ: MOV BX, 0 STOP: HLT
11.下列指令段的功能是: 从内存 2000H:0A00H 开始的 2KB 内存单元清零。 请在下列空格中 填入合适的指令,程序指令完成后 DI 的内容是多少。 CLD MOV AX, 2000H _________ _________ XOR AL, AL _________ _________ HLT
答案:MOV ES,AX MOV DI, 0A00H XOR AL,AL MOV CX, 800H REP STOSB HLT
第四章习题答案
一、选择题
1.下列描述正确的是_______。
A.汇编语言源程序可直接运行 B.汇编语言属于低级语言 C.汇编程序是用汇编语言编写的程序,运行速度高,阅读方便,属于面向用户的程序语言。 D.汇编语言可以移植 答案:B
2. 分析下面的程序,变量 VAR2 的偏移地址是______。 DATA SEGMENT ORG 2 VAR1 DB 2,3,4 ORG $+3 VAR2 DW 1234H DATA ENDS A.02H B.04H C.05H D.08H 答案:D
3.为了使 MOV AX, VAR 指令执行后, 寄存器中的内容为 4142H, AX 下面哪一种数据定义会产 生不正确的结果?
A.VAR DW 4142H B.VAR DW 16706 C.VAR DB 42H, 41H D.VAR DW ‘AB’ 答案:C
4.下列伪指令中______是正确的。
A.ERR1:DW 99 B.ERR2 DB 25*60 C.COUNT EQU 20 D.ONE DB ONE 答案:C
5.执行下列指令后,寄存器 CL 的值是_______。 STR1DW ?AB? STR2DB 16 DUP(?) CNT EQU $-STR1 MOV CX, CNT MOV AX, STR1 HLT A.10H B.12H C.0EH D.0FH 答案:B 二、填空题
1.汇编语言的调试过程如下:建立以______为扩展名的源文件;生成以______为扩展名的目 标文件;生成以______为扩展名的可执行文件;使用 DEBUG 调试程序,调试可执行目标程 序。
答案:.asm .obj .exe 2.执行下列指令后, (AX)=______, (BL)=_______。 A DW ?EF? B DB ?ABCDEF? MOV AX, A MOV BL, B[3] HLT 答案:4546H 44H 3.执行下面程序段后,AL 中的内容是______。 BUF DW 1234H, 5678H, 0001H MOV BX, OFFSET BUF MOV AL, 2 XLAT 答案:78H
4.若符号定义语句如下,则 L=_______。 BUF1 DB 1, 2, ?12? BUF2 DB 0 L EQU BUF2-BUF1 答案:4
5.执行下列程序段后,BX 寄存器间址单元的内容是______。 ORG 1FFFH DB 4FH, 50H, 51H MOV BX, 1FFFH INC [BX] INC BX DEC [BX] 答案:4FH
6.对于下面的数据定义,各条 MOV 指令单独执行后,请填充有关寄存器的内容: TABLE1 DB ? TABLE2 DW 20 DUP(?) TABLE3 DB ?ABCD? ...... MOV AX, TYPE TABLE1; (AX)=___ MOV BX, TYPETABLE2; (BX)=____ MOV CX, LENGTH TABLE2; (CX)=_____