微机原理与接口第二章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.34
1)IP不可访问,应为:IP不可编程访问,或IP不可作为源操作数出现在普通指令中。
3)SI+2属于对寄存器的非法使用。而不仅仅是数据类型不匹配的问题。
7)乘数不能为立即数,(或再加上:且MUL指令中操作数应为无符号数)。
10)操作数的数据类型不匹配。
3.36
出错:SAL AL,1(AX=00BBH)结果为AL=76H,而不是F6H。此处,算术左移无法保证符号位不发生改变,溢出了。
另:AL作为独立使用的寄存器,它的左移不影响AH寄存器。
3.47
(3)逻辑移位,高4位已补0,无需通过AND AL 0FH实现清0。不宜采用算术移位。第4小题问题相同。
3.50
问题:语句第2行,因不满足条件而未执行。但DONE语句标号后的指令在程序的最后仍会执行。结果为7676H。
3.67 问题较多。
试写出一个程序段,用CL中的数据除BL中的数据,然后将结果乘2,最后的结果是存入DX寄存器中的16位数。
问题:MOV AX,BL(或MOV AX,CL)
1)CL是除数,有的同学把BL当成了除数。
2)数据类型不匹配。
3)CBW的误用。
4)乘数不能是立即数。
5)将所得的商直接算术(逻辑)左移1位,因商保存在AL中。
①MOV AL,BL
MOV AH,0 ;或AND AX,00FFH 或:CBW(有符号除法)DIV CL(或IDIV CL ;和CBW连用)
MOV CL,2 ;SAL AX,1(×)(因AH中放的是余数)MUL CL (或:MOV AH,0 SHL AL,1或IMUL CL)MOV DX,AX
3.70
6)我们不知道WAIT1(用户定义的变量)的数据类型,为保险起见,应描述为:
AND BYTE PTR[WAIT1],AL(若WAIT1为字类型,则操作数类型不匹配)
AND [BX],AL(这样没有问题,由AL隐含指明为字节操作)3.78
1)JMP [DI]:该指令为段内间接转移。DI中的内容为指向存储单元的偏移地址,从该地址开始的2个字节中存放着要跳转到的指令的偏移地址,执行指令时,将该偏移地址(DS:DI和DS:DI+1)中的内容送IP,段地址不变。
2) JMP FAR PTR[DI]:该指令为段间间接远转移。DI中的内容为指向存储单元的偏移地址,从该地址开始的4个字节中存放着要跳转到的指令的目标地址,其中,前2个字节为偏移地址,后2个字节为段地址。执行指令时,将该偏移地址送IP,段地址送CS。
3.79
1)完成100个数的传送问题不大,只是部分同学忘了用CLD(或STD)指令指定串操作的方向。
2)第2问问题较多:①题目的意思是修改目标串;因此,不应对[SI]进行操作;SCASB指令是对[DI]单元操作的。
②目标串中等于AL中字符的单元,可能不止一个,因此,简单地用 REPNE SCASB不合适,碰到第一个符合要求的字符,就不再检索了。
③串传送结束后,SI和DI均已改变,若直接按现行[DI]检索,是不对的。
④有同学直接用LEA DI,2000H获取目标串的首地址,是不可以的。2000H为立即数。实际上,在目前版本的汇编程序中,LEA DI,[2000H]都被认为是不合法的。
参考程序段如下:
CLD
MOV CX ,100
MOV SI ,6180H MOV DI ,2000H
REP MOVSB
DEC DI
STD ;也可直接用MOV DI ,2000H MOV CX ,100
SCAN :SCASB
JNZ NEXT
INC DI
MOV BYTE PTR [DI],‘ ’(或20H
)
DEC DI
NEXT :DEC CX
LOOP SCAN
MOV AH ,4CH ;终止程序,返回DOS INT 21H