微机原理 第4章作业答案

  • 格式:doc
  • 大小:437.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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