微机原理及接口第三章作业答案

发布时间 : 星期三 文章微机原理及接口第三章作业答案更新完毕开始阅读

“微机系统原理与接口技术”第三章习题解答

1. 下列各条指令是否有错?如果有,请指出错误之处并改正。

(1) MOV DS,1000H (2) MOV [100],23H (3) ADD AX,[BX+BP+6] (4) PUSH DL (5) IN AX,[3FH] (6) OUT 3FFH,AL (7) LES SS,[SI] (8) POP [AX] (9) IMUL 4CH (10) SHL BX,5

(11) INT 300

(12) XCHG DX,0FFFH 答:(1)错误。不允许直接向段寄存器送立即数,可改为:

MOV MOV

AX,1000H DS,AX

(2)错误。该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTE PTR或WORD PTR说明,否则汇编程序会因不能确定操作数长度而指示出错。可改为:

MOV ADD PUSH IN

BYTE PTR [100],23H AX,[BX+DI+6] DX AX,3FH

(3)错误。不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为: (4)错误。堆栈操作应以字为单位进行,而DL是一个字节。可改为: (5)错误。在输入/输出指令中,8位端口地址应直接写在操作数处。可改为: (6)错误。端口地址3FFH已超出8位二进制表示范围,16位端口地址应用DX。可改为:

MOV OUT LES

DX,3FFH DX,AL AX,[SI]

(7)错误。LES指令的目操作数应该是通用寄存器,不能是段寄存器。可改为: (8)错误。AX不能用于间接寻址,间接寻址只能用BX、BP、SI、DI四个寄存器之一。可改为:

POP MOV IMUL MOV SHL

[BX] BL,4CH BL CL,5 BX,CL

(9)错误。立即数不能做乘法指令的操作数,可改为:

(10)错误。当逻辑移位的次数大于1时,应该用CL指示次数。可改为:

(11)错误。操作数300 ? 255,已超出有效的中断类型码范围。 (12)错误。XCHG指令不允许立即数做它的操作数。可改为:

MOV XCHG

CX,0FFFH DX,CX

2. 请指出以下各指令的源、目的操作数所使用的寻址方式。

(1) MOV SI,2100H (2) SBB DISP[BX],7 (3) AND [DI],AX (4) OR AX,[609EH] (5) MOV [BX+DI+30H],CX (6) PUSH ES:[BP]

(7) CALL [DI]DISP (8) JNZ Short_ label 答:(1)源操作数:立即数寻址;目的操作数:寄存器寻址

(2)源操作数:立即数寻址;目的操作数:(带位移量的)基址寻址 (3)源操作数:寄存器寻址;目的操作数:变址寻址 (4)源操作数:直接寻址; 目的操作数:寄存器寻址 (5)源操作数:寄存器寻址;目的操作数:(带位移量的)基址变址寻址 (6)源操作数:带段超越的基址寻址;目的操作数:隐含寻址 (7)只有一个操作数,为(带位移量的)变址寻址 (8)只有一个操作数,为相对寻址

3. 在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。

答:共有以下四种方法: (1) MOV AX,0 ;仅将累加器清0,不会影响任何标志位 (2) SUB AX,AX ;累加器清0的同时影响所有状态标志,具体地有:

;ZF、PF置1,CF、AF、SF、OF均清0

(3) AND AX,0 ;将累加器清0,ZF、PF置1,CF、OF 、SF清0 (4) XOR AX,AX ;将累加器清0,ZF、PF置1,CF、OF 、SF清0

4. 若要判断某带符号数的正、负而不影响其原值,可使用哪些方法?

答:设带符号数为oprd,判断方法可有如下几种: (1) 执行指令 ADD oprd,0 之后,判断SF:SF =0,oprd为正数,否则为负。 (2) 执行指令 SUB oprd,0 之后,判断SF:SF =0,oprd为正数,否则为负。 (3) 执行指令 CMP oprd,0 之后,可直接判断SF:SF =0,oprd为正数,否则为负;或者再接着执行指令 JGE NOMINUS(即同时判断SF、OF),若程序转移至NOMINUS处,则oprd为正数,否则为负;同理,亦可在在执行完CMP oprd,0 之后再接着执行指令 JL NOMINUS,若程序转移至NOMINUS处,则oprd为负数,否则为正。 (4) 执行指令 CMP oprd,80H(或8000H)之后,判断CF:CF =1,oprd为正数,否则为负。 (5) 执行指令 AND oprd,oprd(或全“1”)之后,判断SF:SF =0,oprd为正数,否则为负。

(6) 执行指令 TEST oprd,oprd(或全“1”)之后,判断SF:SF =0,oprd为正数,否则为负。 (7) 执行指令 TEST oprd,80H(或8000H)之后,判断SF:SF =0,oprd为正数,否则为负;或判断ZF:ZF =1,oprd为正数,否则为负。 (8) 执行指令 OR oprd,oprd(或全“0”)之后,判断SF:SF =0,oprd为正数,否则为负。 (9) 执行指令 XOR oprd,0 之后,判断SF:SF =0,oprd为正数,否则为负。

5. 已知DS=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?

MOV BX,OFFSET COUNT MOV SI,[BX]

MOV AX,COUNT[SI][BX]

答:执行结果为BX=1200H,SI=1000H,AX=3040H。

6. 设标志寄存器值原为0401H,AX=3272H,BX=42A2H。执行指令SBB AL,BH之后,AX和标志寄存器的值分别是多少?

答:由标志寄存器的原值0401H可知,CF的原值为1,故指令执行之后AX=322FH,标志寄存器的值为0410H,即AF变为1,CF变为0,其余不变。

7. 设若标志寄存器原值为0A11H,SP=0060H,AL=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?

PUSHF LAHF

XCHG AH,AL PUSH AX SAHF POPF

答:指令执行后标志寄存器的值为0411H,AX=0411H ,SP=005EH。

8. 设若内存单元DATA在数据段中偏移量为24C0H处,24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?

MOV AX,DATA LEA SI,DATA MOV CL,[SI] LDS BX,DATA

答:执行结果为AX=6655H,BX=6655H,CL=55H,SI=24C0H,DS=8877H。

9. 若AX=26D3H,CX=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=?

SAL CH,1

RCR AX,CL ROL AL,1

答:执行结果为AX=0A64CH,CX=0F208H,CF=OF=0。 10. 已知IP=1000H,CF=0,则执行指令JNC Short label后,下列各数中哪一个是可能的IP值?

(A)0FFFFH (B)0FFEH (C)10FEH (D)1100H

答:(B)

简析:条件转移指令执行前IP=1000H,执行JNC指令后IP=1002H;又因CF=0,所以应跳转至目标地址处,该处对应的新IP值=1002H+相对位移量。由于条件转移指令的跳转范围在距本条指令-128~+127个字节内,即新IP值可能的取值范围为0F82H~1081H,因此只有答案B符合条件。

11. 设DS=4500H,AX=0508H,BX=4000H,SI=0320H。当8086CPU在最小组态下执行指令MOV [BX+SI+0100H],AX 时,各控制信号M/IO、DT/R、RD、WR在有效期间的状态分别是什么?数据总线和地址总线上的数分别是多少?

答:各控制信号M/IO、DT/R、RD、WR在有效期间的电平分别是:高、高、高、低。数据总线上的数是0508H,地址总线上的地址是49420H。

12. 已知有某字串BUF1的首址为0000H,BUF2的首址为0010H,数据段与附加段重合。欲从BUF1处开始将10个字数据顺序传送至BUF2处,试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。

LEA SI,BUF1 ADD SI, 18 LEA DI,BUF2 ADD DI,18

STD MOV REP

CX, 10 MOVSW

13. 附加段中有某字符串首址为BLOCK,长17个字节。欲查找其中第一次出现字符“e”的位置,并将该位置所在的偏移量入栈保护。试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。

MOV DI, OFFSET BLOCK MOV AL, ‘e’ MOV CX,17 CLD

REPNE

JNE DEC

PUSH SCASB OTHER DI

DI OTHER:??(略)

14. 已知附加段中有一块长50个字的数据区,首址为DEST。欲编程将它们全部初始化

联系合同范文客服:xxxxx#qq.com(#替换为@)