回 帖 发 新 帖 刷新版面

主题:程序分析,高手进来!

这是一个把BX寄存器的二进制数用十六进制数的形式在屏幕上显示出来的程序:

PROGNAM SEGMENT
MAIN PROC FAR
    ASSUME CS:PROGNAM  问题1:这句实现什么功能???
START:
    PUSH DS
    SUB AX,AX
    PUSH AX
    MOV CH,4    问题2:为什么给CH赋值4???
ROTATE:
    MOV CL,4    问题3:为什么给CL赋值4???
    ROL BX,CL
    MOV AL,BL
    AND AL,0FH   问题4:为什么与 AL 进行 与 运算的是 0FH ???
    ADD AL,30H   问题5:为什么与 AL 加上 30H ???
    CMP AL,3AH   
    JL  PRINTIT
    ADD AL,7H    问题6:当什么情况下 AL需要加 7H ?
PRINTIT:
    MOV DL,AL    问题7:从此行开始,这三行实现什么功能???
    MOV AH,2
    INT 21H
    DEC CH
    JNZ ROTATE
    RET
MAIN ENDP
PROGNAM ENDS
     END

回复列表 (共2个回复)

沙发

问题1ASSUME SHI  伪指令
格式:ASSUME 段寄存器:段名[,段寄存器:段名....]
即用来声明PROGNAM为数据段
问题2:这是控制的循环次数是外循环
问题3:同上样只不过是程序的内循环即为4次
问题4:因为是在计算机类是以ASCLL码的形式所以要屏蔽高4位(如过一个数是2那么在计算机里就是32H这时就需要把30屏蔽了)
问题6:着是原数据的一个16进制书当然家上
问题7:02号功能键是显示出结果.

板凳

PROGNAM SEGMENT
MAIN PROC FAR
    ASSUME CS:PROGNAM  问题1:这句实现什么功能---cs与PROGNAM 建立联系
START:
    PUSH DS
    SUB AX,AX
    PUSH AX
    MOV CH,4    问题2:为什么给CH赋值4?---控制循环4次,要显示4个数字
ROTATE:
    MOV CL,4    问题3:为什么给CL赋值4----控制后面的循环左移4位
    ROL BX,CL
    MOV AL,BL
    AND AL,0FH   问题4:为什么与 AL 进行 与 运算的是 0FH ----只用低4位,比如 
                                                            1001就是9
    ADD AL,30H   问题5:为什么与 AL 加上 30H ???----转换位它的ASCII码,
                                                  比如9的ASCII码为39H
    CMP AL,3AH   
    JL  PRINTIT
    ADD AL,7H    问题6:当什么情况下 AL需要加 7H ?----得到A-F的ASCII码
PRINTIT:
    MOV DL,AL    问题7:从此行开始,这三行实现什么功能???---显示DL作为ASCII
                                                        码所对应的一个字符
    MOV AH,2
    INT 21H
    DEC CH
    JNZ ROTATE
    RET
MAIN ENDP
PROGNAM ENDS
     END

我来回复

您尚未登录,请登录后再回复。点此登录或注册