注册 登录
编程论坛 汇编论坛

谁能帮小弟解释下结果是怎么算出来的

后来疯了 发布于 2006-12-08 18:29, 568 次点击

这是一个加法程序,我只知道怎么比算结果,程序看的懂,却不知道结果到底是怎么出来的。。
初学着,望各位多多帮助。
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL, 58
ADD AL, 48
MOV CH,2
MOV BL,AL
RO: MOV CL,4
ROL BL,CL
MOV DL,BL
AND DL,0FH
CMP dl,9
JLE AR
ADD dl,7
AR: ADD DL,30H
MOV AH,2
INT 21H
DEC CH
JNE RO
MOV AH, 4CH
INT 21H
CODE ENDS
END START

结果是6A

5 回复
#2
后来疯了2006-12-08 18:30
先多谢大家了,指点。。。。
#3
曾小2006-12-08 20:09

那你可以一步一步执行啊!
用debug 的t命令.

#4
qazxsa2006-12-09 07:59

是一个十六进制数的打印程序。

#5
lefttime2006-12-10 16:53
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL, 58 ;(AL)=58
ADD AL, 48 ;(AL)=106=6AH
MOV CH,2 ;(CH)=2
MOV BL,AL ;(BL)=106=6AH
RO: MOV CL,4 ;(CL)=4
ROL BL,CL ;(BL)=166=A6H
MOV DL,BL ;(DL)=166=A6H
AND DL,0FH ;(DL)=6
CMP dl,9
JLE AR ;如果dl中的内容小于等于9则转移到AR执行
ADD dl,7 ;如果大于9也就是十六进制数值的话就多加7,因为A-F的ASCII码比实际数值逻辑与上30后大7
AR: ADD DL,30H ;(DL)=36H,这里进行ASCII与数值转换
MOV AH,2 ;调用2号DOS中断
INT 21H
DEC CH ;再次循环用于输出字符'A'
JNE RO
MOV AH, 4CH
INT 21H
CODE ENDS
END START
#6
3037709572006-12-10 19:08

不错楼上的注释很好啊 ,我想楼主应该能看懂的,要是实在看不懂的话,我建议你把最基本的输出指令
MOV AH,2 ;调用2号DOS中断
INT 21H
好好的看看,他是把DL中的内容按照ASCII表中对应的字符输出在屏幕上的!

1