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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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 AX,1000H

MOV DS,AX

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

MOV BYTE PTR [100],23H

(3)错误。不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为:

ADD AX,[BX+DI+6]

(4)错误。堆栈操作应以字为单位进行,而DL是一个字节。可改为:

PUSH DX

(5)错误。在输入/输出指令中,8位端口地址应直接写在操作数处。可改为:

IN AX,3FH

(6)错误。端口地址3FFH已超出8位二进制表示范围,16位端口地址应用DX。可改为:

MOV DX,3FFH

OUT DX,AL

(7)错误。LES指令的目操作数应该是通用寄存器,不能是段寄存器。可改为:

LES AX,[SI]

(8)错误。AX不能用于间接寻址,间接寻址只能用BX、BP、SI、DI四个寄存器之一。可改为:

POP [BX]

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

MOV BL,4CH

IMUL BL

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

MOV CL,5

SHL BX,CL

(11)错误。操作数300 255,已超出有效的中断类型码范围。

(12)错误。XCHG指令不允许立即数做它的操作数。可改为:

MOV CX,0FFFH

XCHG 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)M OV AX,0 ;仅将累加器清0,不会影响任何标志位

(2)S UB AX,AX;累加器清0的同时影响所有状态标志,具体地有:

;ZF、PF置1,CF、AF、SF、OF均清0 (3)A ND AX,0 ;将累加器清0,ZF、PF置1,CF、OF 、SF清0

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

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

答:设带符号数为oprd,判断方法可有如下几种:

(1)执行指令ADD oprd,0 之后,判断S F:S F =0,oprd为正数,否则为负。

(2)执行指令SUB oprd,0 之后,判断S F:S F =0,oprd为正数,否则为负。

(3)执行指令CMP oprd,0 之后,可直接判断S F:S F =0,oprd为正数,否则为负;或者再接着执行指令JGE NOMINUS(即同时判断S F、O F),若程序转移至NOMINUS处,则oprd为正数,否则为负;同理,亦可在在执行完CMP oprd,0 之后再接着执行指令JL NOMINUS,若程序转移至NOMINUS处,则oprd为负数,否则为正。

(4)执行指令CMP oprd,80H(或8000H)之后,判断C F:C F =1,oprd为正数,否则为负。

(5)执行指令AND oprd,oprd(或全“1”)之后,判断S F:S F =0,oprd为正数,否则为负。

(6)执行指令TEST oprd,oprd(或全“1”)之后,判断S F:S F =0,oprd为正数,否则为负。

(7)执行指令TEST oprd,80H(或8000H)之后,判断S F:S F =0,oprd为正数,否则为负;或判断Z F:Z F =1,oprd为正数,否则为负。

(8)执行指令OR oprd,oprd(或全“0”)之后,判断S F:S F =0,oprd为正数,否则为负。

(9)执行指令XOR oprd,0 之后,判断S F:S F =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可知,C F的原值为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,C F=1,执行下列指令后,寄存器AX、CX的值分别是多少?C F=?O F=?

SAL CH,1

相关文档
最新文档