计算机专业--微机原理与接口技术(钱晓捷版)课后习题答案
〔习题3.27〕
编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。 〔解答〕
again:
; 代码段 mov ecx,3 shl eax,1 rcl edx,1 loop again
〔习题3.28〕
编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。 〔解答〕
bcd
; 数据段 byte 92h ; 代码段 mov al,bcd shr al,4 add al,30h call dispc mov al,bcd and al,0fh add al,30h call dispc
〔习题3.29〕
以MOVS指令为例,说明串操作指令的寻址特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。 〔解答〕
MOVS指令的功能是:
ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4 由此可看出串操作指令的寻址特点:
源操作数用寄存器ESI间接寻址,默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。
push eax
mov eax,[esi] mov es:[edi],eax add esi,4 add edi,4
〔习题3.30〕
说明如下程序执行后的显示结果:
msg
; 数据段
byte 'WELLDONE',0 ; 代码段
mov ecx,(lengthof msg)-1