
微机原理及接口第三章作业答案.doc
10页微机原理及接口第三章作业答案 - “微机系统原理与接口技术”第三章习题解答 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欲编程将它们全部初始化为0FFFFH值,试在下面程序段的空白处填上适当的指令或操作数,以实现上述功能 LEA DI,DEST MOV CX, 100 CLD MOV AL,0FFH REP STOSB 15. 有程序段如下: MOV AL,35H MOV DL,AL AND DL,0FH AND AL,0F0H MOV CL,4 SHR AL,CL MOV BL,10 MUL BL ADD AL,DL 执行之后,AL等于多少?该程序段完成了什么功能? 答:程序段执行后AL=23H。
该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能 16. 以HEX为首址的字节单元处存放着一串ASCII字符:“0123456789ABCDEF”,并有程序段如下: MOV BX,OFFSET HEX LEA DI,HCOD INC DI STD MOV AL,5CH MOV AH,AL AND AL,0FH XLAT HEX STOSB MOV AL,AH MOV CL,4 SHR AL,CL XLAT HEX STOSB 上述程序段执行后,字节单元HCOD及其相邻单元HCOD+1的内容是多少?该程序段的功能是什么? 答:程序段执行后,HCOD单元的内容是‘5’,HCOD+1单元的内容是‘C’该程序段将AL中存放的1字节十六进制数转换为2个对应的ASCII字符存放在HCOD及其相邻单元HCOD+1中 17. 有程序段如下: 第 页 共 页。












