3.2设(DS)=6000H,(ES)=2000H,(SS)=1500H,(Si)=00A0H,(BX)=0800H,(BP)=1200H,数据变量VAR为0050H. 请分别指出下列各条指令源操作数的寻址方式?它的物理地址是多少?
(1) MOV AX,BX (2) MOV DL,80H
(3) MOV AX, VAR (4) MOV AX,VAR[BX][SI]
(5) MOV AL,‘B' (6) MOV DI, ES: [BX]
(7) MOV DX,[BP] (8) MOV BX,20H[BX]
解: (1)寄存器寻址。因源操作数是寄存器,故寄存器BX就是操作数的地址.字符串截取20位
(2)立即寻址。操作数80H存放于代码段中指令码MOV之后。
(3)直接寻址。
(4)基址一变址一相对寻址.
操作数的物理地址=(DS) × 16+(SI)+(BX)+VAR
= 60000H+00A0H+0800H+0050H=608F0H
(5)立即寻址
(6)寄存器间接寻址.
操作数的物理地址 = (ES) × 16+(BX)
= 20000H+0800H = 20800H
(7)寄存器间接寻址。
操作数的物理地址= (SS) × 16+(BP)
= 15000H+1200H= 16200H
(8)寄存器相对寻址.
操作数的物理地址=(DS) × 16+(BX)+20H
= 60000H+0800H+20H= 60820H
3.3 假设(DS)= 212AH,(CS)= 0200H,(IP)= 1200H,(BX)= 0500H,位移量DATA=40H,(217A0H) =2300H,(217E0H)=0400H,(217E2H) =9000H 试确定下列转移指令的转移地址.
(1) JMP BX
(2) JMP WORD PTR[BX]
(3) JMP DWORD PTR[BX+DATA]
解:转移指令分为段内转移和段间转移,根据其寻址方式的不同,又有段内的直接转移和间接转移,以及段间的直接转移和间接转移地址。对直接转移,其转移地址为当前指令的偏移地址(即IP的内容)加上位移量或由指令中直接得出;对间接转移,转移地址等于指令中寄存器的内容或由寄存器内容所指向的存储单元的内容。
(1) 段内间接转移。转移的物理地址=(CS) × l6 +0500H
=02000H+0500H=02500H
(2)段内间接转移。转移的物理地址= (CS) × 16+ [BX]
= (CS) × l6+(217A0H)
=02000H+2300H=04300H
(3)段间间接转移。转移的物理地址=[BX+DATA]
[IP]=[DS×l6+BX+DATA[=[217E0] =(217E2H) × l6+(217E0H)
[CS]=[217E2H]=9000H =90000H+0400H=90400H
3.4试说明指令MOV BX,5[BX]与指令LEA BX,5[BX]的区别。
解:前者是数据传送类指令,表示将数据段中以(BX+5)为偏移地址的16位数据送寄存器BX.;后者是取偏移地址指令,执行的结果是(BX)= (BX)+5,即操作数的偏移地址为(BX)+5。
3.5设堆栈指针SP的初值为2300H,(AX)=50ABH,(BX)=1234H。执行指令PUSH AX后,(
SP)=?,再执行指令PUSH BX及POP AX之后,(SP)= ?(AX)= ?(BX)=?
解:堆栈指针SP总是指向栈顶,每执行一次PUSH指令SP-2,执行一次POP指令SP+2.所以,执行PUSH AX指令后,(SP)=22FEH;再执行PUSH BX及POP AX后,(SP)=22FEH,(AX)=(BX)=1234H
3.6 指出下列指令的错误:
(1) MOV AH,CX (2) MOV 33H,AL
(3) MOV AX, [SI][DI] (4) MOV [BX],[SI]
(5) ADD BYTE PTR[BP],256 (6) MOV DATA[SI],ES:AX
(7) JMP BYTE PTR[BX] (8) OUT 230H,AX
(9) MOV DS,BP (10) MUL 39H
解: (1)指令错。两操作数字长不相等
(2)指令错。MOV指令不允许目标操作数为立即数.
(3)指令错。在间接寻址中不允许两个间址寄存器同时为变址寄存器。
(4)指令错。MOV指令不允许两个操作数同时为存储器操作数。
(5)指令错。ADD指令要求两操作数等字长。
(6)指令错。源操作数形式错,寄存器操作数不加段重设符。
(7)指令错。转移地址的字长至少应是16位的。
(8)指令错。对输人输出指令,当端口地址超出8位二进制数的表达范围(即寻址的端口超出256个)时,必须采用间接寻址。
(9)指令正确。
(10)指令错。MUL指令不允许操作数为立即数。
3.9 试判断下列程序执行后,BX中的内容.
MOV CL, 3
MOV BX,0B7H
ROL BX,1
ROR BX,CL
解:该程序段是首先将BX内容不带进位循环左移1位,再循环右移3位。即相当于将原BX内容不带进位循环右移2位,故结果为:(BX)=0C02DH
3.11 分别指出以下两个程序段的功能:
(1) (2)
MOV CX,l0 CLD
LEA SI,FIRST LEA DI, [1200H]
LEA DI, SECOND MOV CX,0FOOH
STD XOR AX,AX
REP MOVSB REP STOSW
解: (1)该段程序的功能是:将数据段中FIRST为最高地址的10个字节数据按减地址方向传送到附加段SECOND为最高地址的向前10个单元中。
(2)将附加段中偏移地址为1200H单元开始的0FOOH个字单元清0。
3.16 写出完成下述功能的程序段:
(1)从地址DS:0012H中传送一个数据56H到AL寄存器;
(2)将AL中的内容左移两位
(3)AL的内容与字节单元DS:0013H中的内容相乘
(4)乘积存入字单元DS:0014H中
解: MOV SI,OFFSET[0012H]
MOV DI,OFFSET[0014H]
MOV AL,[SI]
MOV CL,2
SAL AL,CL
MOV BL,[0013H]
MUL BL
MOV [DI],AX
选看:
3.7 已知(AL) =7BH, (BL) =38H,试问执行指令ADD AL, BL后,AF、CF、OF、PF、SF和ZF的值各为多少?
解:AF=1,CF=0,OF=1,PF=0,SF=l,ZF=0
3.10按下列要求写出相应的指令或程序段。
(1)写出两条使AX内容为0的指令。
(2)使BL寄存器中的高4位和低4位互换。
(3)屏蔽CX寄存器的bll,b7和b3位。
(4)测试DX中的b0和b8位是否为1
(1) MOV AX,0
XOR AX,AX ;AX寄存器自身相异或,可使其内容清0
(2) MOV CL, 4
ROL BL,CL ;将BL内容循环左移4位,可实现其高4位和低4位 的互换
(3) AND CX,0F777H ;将CX寄存器中需屏蔽的位“与”0。也可用“或”指令实现
(4) AND DX,0101H ;将需侧试的位“与”1,其余“与”0屏蔽掉
CMP DX,0101 H ;与0101H比较
JZ ONE ;若相等则表示b0和b8位同时为
3.12 执行以下两条指令后,标志寄存器FLAGS的六个状态位各为什么状态?
MOV AX,84A0H
ADD AX,9460H
解:执行ADD指令后,6个状态标志位的状态分别为:
在两个16位数进行加法运算时,对CF、ZF、SF和OF会产生影响,但对PF和AF标志位,只有其低8位的运算影响它们的状态。各标志位的状态分别为:AF=0,PF=1,CF=1,ZF=0,SF=0,OF=1。
3.14已知AX=8060H,DX=03F8H,端口PORT1的地址是48H,内容为40H;PORT2的地址是84H,内容为85H。请指出下列指令执行后的结果。
(1)OUT DX, AL
(2) IN AL,PORT1
(3) OUT DX,AX
(4) IN AX,48H
(5) OUT PORT2,AX
解: (1)将60H输出到地址为03F8H的端口中。
(2) 从PORT1读入一个字节数据,执行结果:(AL)=40H。
(3) 将 AX=8060H输出到地址为03F8H的端口中。
(4)由48H端口读人16位二进制数。
(5)将8060H输出到地址为84H的端口中。
4.1请分别用DB 、DW 、DD伪指令写出在DATA开始的连续8个单元中依次存放数据11H 、22H 、33H 、44H 、55H 、66H 、77H 、88H的数据定义语句.
解:DB,DW,DD伪指令分别表示定义的数据为字节类型、字类型及双字型.其定义形式为:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论