微机原理 第4章作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章指令系统
3.9 设段寄存器DS=1000H,SS=2000H,ES=3000H,通用寄存器BX=4000H,BP=5000H,SI=6000H,DI=7000H。在下列各指令中指出存储器操作数的寻址方式,求出有效地址EA、物理地址PA,并分别用物理地址和逻辑地址说明指令执行结果。(1)MOV CX, [2300H]
直接寻址
EA=2300H
PA=DS*16+EA=1000H*16+2300H=12300H 执行结果:(12300H)→CL,(12301H)→CH (2)MOV BYTE PTR [BX], 8FH
寄存器间接寻址
EA=BX=4000H
PA=DS*16+EA=1000H*16+4000H=14000H 执行结果:8FH→(14000H)
(3)MOV DH, [BP+3000H]
基址寻址
EA=BP+3000H=8000H
PA=SS*16+EA=2000H*16+8000H=28000H 执行结果:(28000H)→DH
(4)MOV ES: [SI+1210H], AX
变址寻址
EA=SI+1210H=7210H
PA=ES*16+EA=3000H*16+7210H=37210H 执行结果:AL→(37210H),AH→(37211H) (5)MOV [BX+DI+50H], AL
基址变址位移寻址
EA=BX+DI+50H=0B050H
PA=DS*16+EA=1000H*16+0B050H=1B050 H
执行结果:AL→(1B050H)
(6)INC WORD PTR [BX+SI]
基址变址寻址
EA=BX+SI=0A000H
PA=DS*16+EA=1000H*16+0A000H=1A000 H
执行结果:(1A000H)中存放的字的值加1
3.11 指出下列指令中源操作数的寻址方式。(1)MOV BL, 0F9H 立即寻址(2)ADD [BX], SI 寄存器寻址(3)SUB CL, [4000H] 直接寻址(4)CMP DX, [SI] 寄存器间接寻址
(5)AND SL, [BX+1] 基址寻址(6)OR BP, [DI+2100H] 变址寻址(7)XOR AX, [BP+SI] 基址变址寻址
(8)MOV CX, 300 立即寻址
3.12 下列指令都是非法的,指出各指令错在哪里?
(1)MOV SI, AH
两个操作数字长不一致
(2)MOV 70H, BL
立即数不能做目的操作数
(3)MOV CX, F123H
十六进制的数以字母打头必须在前面补0 (4)MOV [BX], 6AH
两个操作数的字长不确定
(5)MOV ES, 5000H
立即数不能直接送段寄存器
(6)MOV [DI], [3000H]
两个操作数不能同为内存操作数
(7)MOV DS, SS
两个操作数不能同为段寄存器
(8)MOV CS, AX
不能对CS赋值
(9)MOV AL, [CX]
寄存器间接寻址中不能使用CX
(10)MOV [BX+BP], DX
存储器寻址方式中表示有效地址不能同为两个基址寄存器
(11)MOV BH, [SI+DI+2]
存储器寻址方式中表示有效地址不能同为两个变址寄存器
(12)PUSH AL
入栈出栈操作必须以字为单位
(13)LEA AX, BX
LEA指令中源操作数必须为存储器寻址方式
(14)LDS BL, [5100H]
LDS指令中目的操作数必须为16位的通用寄存器
(15)IN AH, DX
IN指令中目的操作数必须为AL或AX (16)OUT 288H, AL
输入输出指令中端口地址为16位,必须先送给DX
(17)ADD [2400H], 1234H
两个操作数的字长不确定
(18)XOR [2500H], [BX+10H]
两个操作数不能同为内存操作数
(19)INC [SI]
操作数的字长不确定
(20)MUL 10
MUL指令的操作数不能为立即数
(21)IDIV [BP+DI+1300H]
操作数的字长不确定
(22)SAL AL, 2
移位次数大于1必须先送给CL
3.14 设SP=2000H,AX=3000H,BX=5000H,执行以下3条指令后,问SP=?AX=?BX=? PUSH AX ;SP减2,栈顶元素为3000H
PUSH BX ;SP减2,栈顶元素为5000H
POP AX ;SP加2,将栈顶元素5000H弹出至AX
结果:SP=1FFEH,AX=5000H,BX=5000H
3.16 下列程序执行完后,AX=?BX=?CX=? MOV AX, 1122H
MOV BX, 3344H
PUSH AX ;栈顶元素为1122H POP CX ;将栈顶元素1122H 弹出至CX
XCHG BX, CX ;BX=1122H,CX=3344H
LEA CX, [BX] ;CX=BX=1122H
结果:AX=1122H,BX=1122H,CX=1122H
3.17 CPU分别执行下列各程序段后,写出各个执行结果的状态标志位OF、SF、ZF、AF、PF、CF的值。
(1)MOV AL, 7AH
ADD AL, 53H
7AH+53H=CDH=1100 1101B 结果:OF=1,SF=1,ZF=0,AF=0,PF=0,CF=0
(2)MOV BL, 0AFH
ADD BL, 0EAH
AFH+EAH=(1)99H=1001 1001B
结果:OF=0,SF=1,ZF=0,AF=1,PF=1,CF=1
(3)MOV CL, 0FFH
ADD CL, 01H
FFH+01H=(1)00H=0000 0000B
结果:OF=0,SF=0,ZF=1,AF=1,PF=1,CF=1
(4)MOV DL, 49H
SUB DL, 0CAH
49H-CAH=(1)7FH=0111 1111B
结果:OF=0,SF=0,ZF=0,AF=1,PF=0,CF=1
3.24 分别写出CPU执行下面两段程序后,寄存器DX=?AX=?
(1)MOV AL, 7FH
CBW
CWD
AL=7FH=0111 1111B
结果:AX=007FH,DX=0000H
(2)MOV AL, 80H
CBW
CWD
AL=80H=1000 0000B
结果:AX=0FF80H,DX=0FFFFH
3.25 分别写出CPU执行下面两段程序后,寄存器AL=?标志CF=?
(1)MOV AL, 36H
ADD AL, 58H
DAA
36H+58H=8EH,低4位大于9,故修正:AL=8EH+6H=94H,CF=0
(2)MOV AL, 49H
ADD AL, 87H
DAA
49H+87H=D0H,AF=1,高4位大于9,故修正:
AL=D0H+66H=(1)36H,CF=1