170 likes | 391 Views
第 3 部分 常用指令和寻址方式. Assembly Language Programming. 习题. 1 已知 :BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H 。指出下述指令中存储器操作数的有效地址和实际地址。. (1) MOV AL,[BX]. (6) MOV CL,SS:[SI+50H]. (2) MOV AH,[BP]. (7) MOV BL,DS:[BP+30H]. (3) MOV BH,CS:[SI]. (8) MOV [BP+SI+30H],AL.
E N D
第3部分 常用指令和寻址方式 Assembly Language Programming
习题 1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 (1) MOV AL,[BX] (6) MOV CL,SS:[SI+50H] (2) MOV AH,[BP] (7) MOV BL,DS:[BP+30H] (3) MOV BH,CS:[SI] (8) MOV [BP+SI+30H],AL (4) MOV DL,[SI+10H] (9) MOV [BX+SI-40H],AH (5) MOV CH,[BP+20H] (10) MOV CS:[BX+SI],DH
1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 解答这类问题,首先要明确哪一个操作数是存储器操作数,进而确定其寻址方式,并根据寻址方式计算有效地址。要计算实际地址,则必须明确操作数处于哪一个逻辑段中,再根据相应段寄存器的内容得到段基址,加上有效地址即为实际地址。 (1) MOV AL,[BX] 解:该指令的源操作数为存储器操作数,其寻址方式为寄存器间接寻址,故BX的内容1234H即为有效地址。操作数所处段为隐含段数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+1234H=0A484H。
1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 (2) MOV AH,[BP] 解:该指令的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H。操作数所处段为隐含段堆栈段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+5678H=09CF8H。 (3) MOV BH,CS:[SI] 解:该指令的源操作数为存储器操作数,其寻址方式为寄存器间接寻址,故SI的内容1357H即为有效地址。操作数所处段为代码段,故段基址为4B100H,所以实际地址=段基址+有效地址=4B100H+1357H=4C457H。
1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 (4) MOV DL,[SI+10H] 解:该指令的源操作数为存储器操作数,其寻址方式为变址寻址,故有效地址为SI的内容1357H+10H=1367H。操作数所处段为隐含段数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+1367H=0A5B7H。 (5) MOV CH,[BP+20H] 解:该指令的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H+20H=5698H。操作数所处段为隐含段堆栈段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+5698H=09D18H。
1 已知: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] 解:该指令的源操作数为存储器操作数,其寻址方式为基址寻址,故有效地址为BP的内容5678H+30H=56A8H。操作数所处段为数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+56A8H=0E8F8H。
1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 (8) MOV [BP+SI+30H],AL 解:该指令的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为5678H+1357H+30H=69FFH。操作数所处段为隐含段堆栈段,故段基址为04680H,所以实际地址=段基址+有效地址=04680H+69FFH=0B07FH。 (9) MOV [BX+SI-40H],AH 解:该指令的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为1234H+1357H-40H=254BH。操作数所处段为隐含段数据段,故段基址为09250H,所以实际地址=段基址+有效地址=09250H+254BH=0B79BH。
1 已知:BX=1234H,BP=5678H, SI=1357H,DS=0925H, SS=0468H,CS=4B10H。指出下述指令中存储器操作数的有效地址和实际地址。 (10) MOV CS:[BX+SI],DH 解:该指令的目标操作数为存储器操作数,其寻址方式为基址变址寻址,故有效地址为1234H+1357H=258BH。操作数所处段为代码段,故段基址为4B100H,所以实际地址=段基址+有效地址=4B100H+258BH=4D68BH。
2 已知数据定义如下,则给定的程序段执行后,寄存器AX的内容是多少? 1.DATA DB 10,20,30,40,50 ENTER DW 3 : : MOV BX,OFFSET DATA ADD BX,ENTER MOV AX,[BX] AX= 0AH 14H 1EH 28H 32H 03H 00H DATA ENTER 3228H
3 已知数据定义如下,则给定的程序段执行后,寄存器AX的内容是多少? DATA 0AH 00H 14H 00H 1EH 00H 28H 00H 32H 00H 03H 00H 2.DATA DW 10,20,30,40,50 ENTER DW 3 : : MOV BX,OFFSET DATA MOV SI,ENTER MOV AX,[BX+SI] AX= ENTER 1E00H
4 已知: AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1,当前数据段中 (3305H)=26H,(3306H)=37H,(3405H)=78H, (3406H)=69H,(3505H)=35A6H,DX=3205H,指出下述各条指令执行后目标地址中的数值。 ;AX=100H ; DL=03H ; AX=6978H ; AL=69H ; BX=3726H ; DX=3726H ; (3505H)=0302H ; (100H)=1234H (1) MOV AX,BX (2) MOV DL,CH (3) MOV AX,[SI] (4) MOV AL,[SI+1] (5) MOV BX,[SI-100H] (6) MOV DX,-200H[BX][SI] (7) MOV [BX][SI],CX (8) MOV [BX],AX 26H 37H : 78H 69H : A6H 35H 3305H 3306H : 3405H 3406H : 3505H 3506H
5 条件同上题,指出下述指令执行后的结果和标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1) 指 令 结果 OF SF ZF AF PF CF (1) ADD AX,BX (2) SUB BH,CL (3) CMP AL,[SI-100H] (4) AND AL,[SI][BX] (5) NOT BX (6) OR BL,CH (7) ADD [SI][BX],AX (8) XOR AH,AH 注:这里×表示状态不确定 26H 37H : 78H 69H : A6H 35H 3305H 3306H : 3405H 3406H : 3505H 3506H
5 条件同上题,指出下述指令执行后的结果和标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1) 指 令 结果 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 AL,[SI-100H] 34H 0 0 0 1 0 0 (4) AND AL,[SI][BX] 24H 0 0 0 × 1 0 (5) NOT BX 0FEFFH 标志位不受影响 (6) OR BL,CH 03H 0 0 0 × 1 0 (7) ADD [SI][BX],AX 47DAH 0 0 0 0 0 0 (8) XOR AH,AH 00H 0 0 1 × 1 0 注:这里×表示状态不确定 26H 37H : 78H 69H : A6H 35H 3305H 3306H : 3405H 3406H : 3505H 3506H
6 条件同上题,指出下述移位指令执行后目标地址中的内容及标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1) • 指 令 结果 OF SF ZF PF CF • SHR BH,1 • SAR SI,CL • (3) ROR CH,1 • (4) ROL BX,CL • (5) SAL AX,CL • (6) SAR BYTE PTR[SI],CL • (7) RCR BYTE PTR[BX][SI],1 • (8) SHL WORD PTR[SI],1 • 注:这里×表示状态不确定,空白表示不受影响。 26H 37H : 78H 69H : A6H 35H 3305H 3306H : 3405H 3406H : 3505H 3506H
6 条件同上题,指出下述移位指令执行后目标地址中的内容及标志位状态。 (AX=1234H,BX=100H,CX=0302H,SI=3405H,CF=1) • 指 令 结果 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 PTR[SI],CL 1EH 0 0 0 0 0 • (7) RCR BYTE PTR[BX][SI],1 0D3H 0 0 • (8) SHL WORD PTR[SI],1 0D2F0H 1 1 0 1 0 • 注:这里×表示状态不确定,空白表示不受影响。 26H 37H : 78H 69H : A6H 35H 3305H 3306H : 3405H 3406H : 3505H 3506H
7 编写完成下列功能的小程序段。 (1)将寄存器AL的第3,4位变反,其余位保持不变。 解: XOR AL,18H (2)将寄存器AL的第3,4位清零,其余位保持不变。 解: AND AL,0E7H (3)将寄存器AL的第3,4位置1,其余位保持不变。 解: OR AL,18H
7 编写完成下列功能的小程序段。 (4)DX和AX联合存放一个32位整数(DX存放高16位),将该数据逻辑左移一位。 解: SHL AX,1 RCL DX,1 (5)内存单元MEMB存放着一个8位的数据,将它的高4位和低4位互换。 解: MOV CL,4 ROR MEMB,CL