1、习题,第三章 第四章 第五章 第六章,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,解答这类问题,首先要明确哪一个操作数是存储器操作数,进而确定其寻址方式,并根据寻址方式计算有效地址。要计算实际地址,则必须明确操作数处于哪一个逻辑段中,再根据相应段寄存器的内容得到段基址,加上有效地址即为实际地址。(1) MOV AL,BX,解:该指令的源操作数为存储器操作数,其寻址方式为寄存器间接寻址,故BX的内容1234H即为有效地址。操作数所处段为隐含段数据段,故段基址为09
2、250H,所以实际地址=段基址+有效地址=09250H+1234H=0A484H。,(2) MOV AH,BP(3) MOV BH,CS:SI,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,解:该指令的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H。操作数所处段为隐含段堆栈段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+5678H=09CF8H。,解:该指令的源操作数为存储器操作数,其寻址方式为寄存器间接寻
3、址,故SI的内容1357H即为有效地址。操作数所处段为代码段,故段基址为4B100H,所以实际地址=段基址+有效地址=4B100H+1357H=4C457H。,(4) MOV DL,SI+10H解:该指令的源操作数为存储器操作数,其寻址方式为变址寻址,故有效地址为SI的内容1357H+10H=1367H。操作数所处段为隐含段数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+1367H=0A5B7H。(5) MOV CH,BP+20H解:该指令的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H+20H=5698H。操作数所处段为隐含段堆栈
4、段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+5698H=09D18H。,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,(6) MOV CL,SS:SI+50H解:该指令的源操作数为存储器操作数,其寻址方式为变址寻址,故有效地址为SI的内容1357H+50H=13A7H。操作数所处段为堆栈段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+13A7H=05A27H。(7) MOV BL,DS:BP+30H解:该指令
5、的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H+30H=56A8H。操作数所处段为数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+56A8H=0E8F8H。,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,(8) MOV BP+SI+30H,AL解:该指令的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为5678H+1357H+30H=69FFH。操作数所处段为隐含段堆栈段,故段基址为0
6、4680H,所以实际地址=段基址+有效地址=04680H+69FFH=0B07FH。(9) MOV BX+SI-40H,AH解:该指令的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为1234H+1357H-40H=254BH。操作数所处段为隐含段数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+254BH=0B79BH。,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,(10) MOV CS:BX+SI,DH 解:该指令
7、的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为1234H+1357H=258BH。操作数所处段为代码段,故段基址为4B100H,所以实际地址=段基址+有效地址=4B100H+258BH=4D68BH。,3.15 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。,1DATA DB 10,20,30,40,50ENTER DW 3:MOV BX,OFFSET DATAADD BX,ENTERMOV AX,BX AX=,3228H,0AH 14H 1EH 28H
8、32H 03H 00H,DATA,ENTER,已知数据定义如下,则给定的程序段执行后,寄存器AX的内容是多少?,2DATA DW 10,20,30,40,50ENTER DW 3:MOV BX,OFFSET DATAMOV SI,ENTERMOV AX,BX+SI AX=,1E00H,0AH 00H 14H 00H 1EH 00H 28H 00H 32H 00H 03H 00H,DATA,ENTER,已知数据定义如下,则给定的程序段执行后,寄存器AX的内容是多少?,(1) MOV AX,BX (2) MOV DL,CH(3) MOV AX,SI(4) MOV AL,SI+1(5) MOV BX
9、,SI-100H(6) MOV DX,-200HBXSI(7) MOV BXSI,CX(8) MOV BX,AX,; AX=100H ; DL=03H ; AX=6978H ; AL=69H ; BX=3726H ; DX=3726H ; (3505H)=0302H ; (100H)=1234H,26H 37H : 78H 69H : A6H 35H,3305H 3306H : 3405H 3406H : 3505H 3506H,5.5 已知: AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1,当前数据段中 (3305H)=26H,(3306H)=37H,(340
10、5H)=78H, (3406H)=69H,(3505H)=35A6H,DX=3205H,指出下述各条指令执行后目标地址中的数值。,5.6 条件同上题,指出下述指令执行后的结果和标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1),26H 37H : 78H 69H : A6H 35H,3305H 3306H : 3405H 3406H : 3505H 3506H,指 令 结果 OF SF ZF AF PF CF (1) ADD AX,BX 1334H 0 0 0 0 0 0 (2) SUB BH,CL 0FFH 0 1 0 1 1 1 (3) CMP
11、 AL,SI-100H 34H 0 0 0 1 0 0 (4) AND AL,SIBX 24H 0 0 0 1 0 (5) NOT BX 0FEFFH 标志位不受影响 (6) OR BL,CH 03H 0 0 0 1 0 (7) ADD SIBX,AX 47DAH 0 0 0 0 0 0 (8) XOR AH,AH 00H 0 0 1 1 0注:这里表示状态不确定,5.7 条件同5.5题,指出下述移位指令执行后目标地址中的内容及标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1),26H 37H : 78H 69H : A6H 35H,3305H 3
12、306H : 3405H 3406H : 3505H 3506H,指 令 结果 OF SF ZF PF CF SHR BH,1 00H 0 0 1 1 1 SAR SI,CL 0D01H 0 0 0 0 0 (3) ROR CH,1 81H 1 1 (4) ROL BX,CL 0400H 0 0 (5) SAL AX,CL 48D0H 0 0 0 0 0 (6) SAR BYTE PTRSI,CL 1EH 0 0 0 1 0 (7) RCR BYTE PTRBXSI,1 0D3H 0 0 (8) SHL WORD PTRSI,1 0D2F0H 1 1 0 1 0 注:这里表示状态不确定,空白表
13、示不受影响。,5.8 编写完成下列功能的小程序段。,(1)将寄存器AL的第3,4位变反,其余位保持不变。解: XOR AL,18H,(2)将寄存器AL的第3,4位清零,其余位保持不变。解: AND AL,0E7H,(3)将寄存器AL的第3,4位置1,其余位保持不变。解: OR AL,18H,(4)DX和AX联合存放一个32位整数(DX存放高16位),将该数据逻辑左移一位。解: SHL AX,1RCL DX,1,(5)内存单元MEMB存放着一个8位的数据,将它的高4位和低4位互换。解: MOV CL,4ROR MEMB,CL,5.8 编写完成下列功能的小程序段。,解: SHL AL,1RCR A
14、H,1SHL AL,1RCR AH,1SHL AL,1RCR AH,1SHL AL,1RCR AH,1,5.9 编制程序将AL中的第7位和第0位,第6位和第1位,第5位和第2位,第4位和第3位互换。,SHL AL,1RCR AH,1SHL AL,1RCR AH,1SHL AL,1RCR AH,1SHL AL,1RCR AH,1MOV AL,AH,B6B5B4B3B2B1B00,B7,CF,AL,B7X X X X X X X,AH,B5B4B3B2B1B000,B6,CF,AL,B6B7X X X X X X,AH,B4B3B2B1B0000,B5,CF,AL,B5B6B7 X X X X X
15、,AH,解: MOV CL,iMOV BL,03HSHL BL,CLAND AL,BLNOT BLAND MEM,BLOR MEM,AL,5.10 编制程序将AL中的第i,i+1位写入MEM单元的第i,i+1位,其它位的内容不变。,指 令 OF SF ZF PF CF 目标地址内容 (1) ADD AL,BL 1 1 0 1 0 0A5H(2) SUB AH,BL 1 0 0 1 0 53H(3) NEG BH 1 1 0 0 1 80H(4) SAR AH,1 0 1 0 0 1 0C2H(5) AND AL,BL 0 0 0 0 0 32H,5.20 对于下述指令, 当AX=8573H,B
16、X=8032H时, 写出各指令执行后标志位的状态及目标地址内容。,指 令 OF SF ZF PF CF 目标地址内容 (1) ADD AX,BX 1 1 0 0 0 9880H(2) SUB AL,AH 1 0 0 0 0 0DH (3) CMP AL,BH 1 0 0 0 0 80H(4) NEG BL 0 0 1 1 0 00H(5) AND AL,BH 0 0 1 1 0 00H(6) OR AL,AH 0 1 0 1 0 0F3H(7) SHL AL,1 1 0 1 1 1 00H,6.1 已知AX=7380H,BX=2500H,写出下述每条指令执行后OF,SF,ZF,PF,CF的状态
17、和目标地址的内容。,指 令 OF SF ZF PF CF 目标地址内容 (8) SHL BL,1 0 0 1 1 0 00H(9) SAR AL,1 0 1 0 1 0 0C0H(10)ROL AH,1 1 0 0E6H(11)ROL AL,1 1 1 01H (12)ROR BH,1 1 1 92H(13)ADD AH,AH 1 1 0 0 0 0E6H(14)ADD AH,BH 1 1 0 0 0 98H,6.1 已知AX=7380H,BX=2500H,写出下述每条指令执行后OF,SF,ZF,PF,CF的状态和目标地址的内容。,指 令 OF SF ZF PF CF 目标地址内容 (15)S
18、UB AL,BH 1 0 0 0 0 5BH (16)MUL BH 1 1 1280H(17)IMUL BX 1 1 10B18000H (18)XOR BH,AH 0 0 0 1 0 56H(19)NEG AL 1 1 0 0 1 80H (20)SHR AH,1 0 0 0 1 1 39H(21) ROR AH,1 1 1 B9H注:这里空白表示不受影响。,6.1 已知AX=7380H,BX=2500H,写出下述每条指令执行后OF,SF,ZF,PF,CF的状态和目标地址的内容。,1. SEGA SEGMENT 2. DAX: DW 200 3. DAY DB 1000H 4. MAX DB
19、 0,0 5. SEGA ENDS 6. CSEG SEGMENT 7. ASSUME CS:CSEG 8. ASSUME DS:SEGA 9. CMP AX,DAX 10. JG XGY 11. JZ ZERO 12. MOV AX,DAY 13. XGY: MOV MAX,AX 14. ZERO HLT 15. ENDS 16. END START,6.9 下列程序有错, 请将它们找出来。已知程序欲完成的功能是从两个无符号数中选出较大者送入MAX单元,若二者相同,将MAX清0。,;应将DAX:改为DAX,;应将DB改为DW,;改为 MAX DW 0,在第8行和第9行之间应插入如下语句:ST
20、ART: MOV AX,SEGAMOV DS,AXMOV AX,DAX,;DAX改为DAY,;JG改为JA,;ZERO改为ZERO:,;改为 CSEG ENDS,CDEBUG EXAM.EXE -R AX023A BX0000 CX0045 DX0000 SPFFFE BP=0000 SI0000 DI0000 DS0913 ES0913 SS0913 CS0913 IP=0000 -E DS:0 0913:0000 5 96 46 57 00 45 -U3 0913:0003 BE 00 00 MOV SI,00 0913:0006 8A 04 MOV AL,SI 0913:0008 02
21、44 01 ADD AL,SI+1 0913:000B 79 06 JNS 13 0913:000D F6 D8 NEG AL 0913:000F 88 44 02 MOV SI+2,AL 0913:0012 CC INT 3 0913:0013 -G3 13 AX BX SI D DS:0 7:,6.12 下面一段信息是用DEBUG命令的结果, 填充空白处的内容:,0213 0000 0000 0913 0000 96 57 13 BE 00 00 8A 04,解答这类问题,首先必须明确每一个DEBUG命令的意义以及可以从该命令的显示结果中获得哪些必要的信息。就本题而言,可以从R命令的显示结
22、果中得到我们所需要的某些寄存器的内容。而从E命令的显示结果中可知0913段中0号到2号单元的内容分别为96,57,45。U命令是反汇编命令,其显示结果可分为4部分,其中第一列的内容为当前代码段段基址的高16位,第二列的内容为对应的语句在当前代码段中的偏移地址,第三列的内容为与汇编语句相对应的机器指令,第四列的内容为可执行的汇编语句。G命令是执行命令,等号后面的地址为起始地址,未加等号的地址为断点地址。所以此程序段从地址0913:0003所标识的语句开始执行,当指令指针IP的值为0013时,停止执行程序。因此,各个空的内容分别为:,6.12 下面一段信息是用DEBUG命令的结果, 填充空白处的内
23、容:,0213 0000 0000 0913 0000 96 57 13 BE 00 00 8A 04,AX BX SI D DS:0 7:,CDEBUG EXAM.EXE -U 5 0933:0005 BB 01 00 MOV BX,0001 0933:0008 B0 24 MOV AL,24 0933:000A 74 12 JZ 001E 0933:000C 8D 1E 06 01 LEA BX,0106 0933:0010 8A 07 MOV AL,BX 0933:0012 00 47 01 ADD BX+01,AL 0933:0015 70 07 JO 001E 0933:0017 2
24、8 47 02 SUB BX+02,AL 0933:001A F6 E1 MUL CL 0933:001C 73 03 JNB 0021 0933:001E 88 47 02 MOV BX+2,AL 0933:0021 89 47 02 MOV BX+2,AX 0933:0024 CC INT 3 0933:0025 -R AX1234 BX0123 CX01FF DX0100 SP=FFFE BP=0000 SI0000 DI1200 DS0923 ES0923 SS0923 CS=0933 IP000C-G 1A 21 AX BX -D 120 124 :,6.13 下面一段信息是用DEBUG命令的结果, 填充空白处的内容:,1201 0106 0923 0120 02 89 47 02 CC,