CH02 8086/8088指令系统
习题与思考题
1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?源操作数在哪里?如在存储器中请写出其物理地址是多少?
(1)MOV AX,0ABH (2)MOV AX,[100H]
(3)MOV AX,V AL (4)MOV BX,[SI]
(5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI]
(7)MOV V AL[SI],BX (8)MOV [BP][SI],100
解答:
(1)MOV AX,0ABH
寻址方式:立即寻址;源操作数在数据线上;物理地址:无
(2)MOV AX,[100H]
寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+100H=2000H*16+100H=20100H
(3)MOV AX,V AL
寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+V AL=2000H*16+0050H=20050H
(4)MOV BX,[SI]
寻址方式:寄存器间接寻址;源操作数在存储器中;物理地址:DS*16+SI=2000H*16+00A0H=200A0H
(5)MOV AL,V AL[BX]
寻址方式:变址寻址;源操作数在存储器中;物理地址:DS*16+V AL+BX=2000H*16+0050H+0100
=20150H
(6)MOV CL,[BX][SI]
寻址方式:基址加变址寻址;源操作数在存储器中;物理地址:DS*16+BX+SI=2000H*16+0100H+00A0H
=201A0H
(7)MOV V AL[SI],BX
寻址方式:寄存器寻址;源操作数在寄存器中;物理地址:无
(8)MOV [BP][SI],100
寻址方式:立即寻址;源操作数在;物理地址:无
2.设有关寄存器及存储单元的内容如下:
DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,[20102H]=56H,[20103]=78H,[21200]=2AH,[21201H]=4CH,[21202H]=0B7H,[21203H]=65H。
试说明下列各条指令单独执行后相关寄存器或存储单元的内容。
(1)MOV AX,1800H (2)MOV AX,BX
(3)MOV BX,[1200H] (4)MOV DX,1100[BX]
(5)MOV [BX][SI],AL (6)MOV AX,1100[BX][SI]
3.假定BX=0E3H,变量V ALUE=79H,确定下列指令执行后的结果(操作数均为无符号数。
对3、6,写出相应标志位的状态)。
(1)ADD V ALUE,BX (2)AND BX,V ALUE
(3)CMP BX,V ALUE (4)XOR BX,0FFH
(5)DEC BX (6)TEST BX,01H
4.已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。
(标出存储单元的地址)
解答:
00ADH 00AEH 00AFH
0FFA0:00B0H
···
FFAACH FFAADH FFAAEH FFAAFH FFAB0H
···
00ACH X FFAABH 00ADH 00AEH 00AFH
0FFA0:00B0H
···
57H 80H FFAACH FFAADH FFAAEH FFAAFH FFAB0H
···
00ACH X FFAABH ①初始状态;SP =00B0H
②PUSH AX ;(AX =8057H )SP =00AEH
00ADH 00AEH 00AFH
0FFA0:00B0H
···
79H 0FH 57H 80H FFAACH FFAADH FFAAEH FFAAFH FFAB0H
···00ACH X FFAABH 00ADH 00AEH 00AFH
0FFA0:00B0H
···
57H 80H FFAACH FFAADH FFAAEH FFAAFH FFAB0H
···
00ACH X FFAABH ③PUSH BX ;(BX =0F79H )SP =00ACH ④POP BX ;SP =00AEH
堆栈段SS =0FFA0H 堆栈段SS =0FFA0H
堆栈段SS =0FFA0H 堆栈段SS =0FFA0H
5.已知程序段如下: MOV AX ,1234H MOV CL ,4 ROL AX ,CL DEC AX MOV CX ,4 MUL CX 试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF ,SF 及ZF
6.写出实现下列计算的指令序列。
(假定X、Y、Z、W、R都为字变量)(1)Z=W+(Z+X)(2)Z=W-(X+6)-(R+9)
(3)Z=(W*X)/(R+6)(4)Z=((W-X)/5*Y)*2
7.假定DX=1100100110111001B,CL=3,CF=1,试确定下列各条指令单独执行后DX的值。
(1)SHR DX,1 (2)SHL DL,1
(3)SAL DH,1 (4)SAR DX,CL
(5)ROR DX,CL (6)ROL DL,CL
(7)RCR DL,1 (8)RCL DX,CL
8.已知DX=1234H ,AX=5678H ,试分析下列程序执行后DX 、AX 的值各是什么?该程序完成了什么功能? MOV CL ,4 SHL DX ,CL MOV BL ,AH SHL BL ,CL SHR BL ,CL OR DL ,BL
解答:DX=2345H ,AX=6780H 。
该程序完成的功能如图所示,将DX ,AX 拼装成双字后,左移四位。
DX DX AX 1
2
3
4
5
6
7
8
DX AX 2
3
4
6
7
8
2
3
4
5
6
7
8
AX
9.试分析下列程序段: ADD AX ,BX JNC L2 SUB AX ,BX JNC L3 JMP SHORTL5
如果AX 、BX 的内容给定如下: AX BX (1)14C6H 80DCH (2)B568H 54B7H
问该程序在上述情况下执行后,程序转向何处? 解答:(1)AX =AX+BX =14C6H+80DCH =95A2H ;CF =0;无进位,转移至L2;
(2)AX =AX+BX =B568H+54B7H =0A1FH ;CF =1;有进位,继续执行;
AX =AX-BX =0A1FH+54B7H =B568H ;CF =1;有借位,继续执行;
无条件转移至SHORTL5
10.编写一段程序,比较两个5字节的字符串OLDS 和NEWS ,如果OLDS 字符串不同于
NEWS 字符串,则执行NEW_LESS ,否则顺序执行。
解答:编程如下,(说明:左测程序为常规编法,两个字符串在一个数据段中;右测的程序要求OLDS在数据段中,NEWS在附加段中,利用串操作的指令是可行的)
LEA SI,OLDS;LEA SI,OLDS
LEA DI,NEWS;LEA DI,NEWS
MOV CX,5;MOV CX,5
NEXT: MOV AL,[SI];CLD
MOV BL,[DI];REPE CMPSB
CMP AL,BL;JNZ NEW_LESS
JNZ NEW_LESS;……
INC SI;JMP EXIT
INC DI;NEW_LESS:
LOOP NEXT;……
……EXIT:……
JMP EXIT
NEW_LESS:
……
EXIT:……
11.若在数据段中从字节变量TABLE相应的单元开始存放了0~15的平方值,试写出包含有XLAT指令的指令序列查找N(0~15)的平方。
(设N的值存放在CL中)
解答:
MOV BX,OFFSET TABLE;LEA BX,TABLE
MOV CL,N
MOV AL,CL
XLAT
12.有两个双字数据串分别存放在ASC1和ASC2中(低字放低地址),求它们的差,结果放在ASC3中(低字放低地址)。
ASC1 DW 578,400
ASC2 DW 694,12
ASC3 DW ?,?
解答:编程如下,
LEA SI,ASC1
LEA DI,ASC2
LEA BX,ASC3
MOV CX,2
CLC
NEXT: MOV AX,[SI]
MOV DX,[DI]
SBB AX,DX
MOV [BX],AX
INC SI
INC SI
INC DI
INC DI
INC BX INC BX LOOP NEXT。