当前位置: 代码迷 >> 汇编语言 >> 两个功能分析题解决方案
  详细解决方案

两个功能分析题解决方案

热度:2734   发布时间:2013-02-26 00:00:00.0
两个功能分析题
(1)假设(DX)=1234H,(AX)=5678H,分析下列程序的功能,并说明程序段执行结束后AX和DX的值。
MOV   BL,DL
MOV   CL,4
SHR   DX,CL
AND   BL,0FH
SHL   AX,CL
ROR   BL,CL
OR   AH,BL

知道AX和DX的值很容易,但是小弟看不出这段的功能(程序段有没错?)

(2)分析一下程序段的功能
MOV   AL,A
MOV   CL,4
SHR   AL,CL
OR   AL,30H
MVO   C,AL
MOV   AL,A
AND   AL,OFH
OR   AL,30H
MOV   B,AL

这段也是一头雾水,全然不知功能(转换为ASCII码?)...希望大家帮个忙,谢谢

------解决方案--------------------------------------------------------
(1)將AX的值左移四個比特位,將DX的值右移四個比特位
(2)將字節型數據A中的值所表示的16進數的高四位放在C中,低四位放在B中,並使它們成為可顯字符。如果沒有意外的話,程序後面會繼續將B和C的值分別與39H比較,如果大於39H,則會再加7H,以使十六進數所表示的A~F之間的數字成為可顯字符!!
比如:
A=20H 則B=30H,C=32H
再如:
A=5AH 則B=3AH,C=35H
若B再加7h則等于41H(字符 'A '的ASCII碼)

------解决方案--------------------------------------------------------
(1)将DL中的34H转化成43H,AX中的bit11~bit4(67H),求43H、67H的或运算,将AX中的5678H左移形成6780,在用43H、67H或的结果填充AH,覆盖67H,这段程序的功能似乎没有什么实际意义,目的在于考察逻辑运算指令。
(2) "A "的ASCII码是41H,程序段的功能是把A的ASCII码的高半字节的‘4’转化为ASCII值,存放到C中。将A的ASCII码的低半字节‘1’转换成ASCII码值,放入B中。如此,以后如果想显示字母‘A’的ASCII以十六进制的形式显示出来,只要连续显示字节变量C和B就可以了。
  相关解决方案