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

or使数值变ASCII码?

lblyzby 发布于 2005-05-15 18:54, 1046 次点击

code segment assume cs:code start: mov ah,1 int 21h sub al,30h ;ASCII码变数值 mov bl,al mov dl,'+' mov ah,2 int 21h mov ah,1 int 21h sub al,30h ;ASCII码变数值 xor ah,ah ;ah清零 add al,bl aaa ;BCD吗的加法校正指令 mov bx,ax mov dl,'=' mov ah,2 int 21h mov dl,bh or dl,30h ;数值变ASCII码 mov ah,2 int 21h mov dl,bl or dl,30h ;数值变ASCII码 mov ah,2 int 21h mov ah,4ch int 21h code ends end start

;or是逻辑或运算指令,在这里使用or使数值变ASCII码,这是为什么?

6 回复
#2
xiolig2005-05-16 16:36
因为字符 0 - 9 对应的ASCII是 30h - 39h
#3
钢燃2005-05-20 11:20
以下是引用xiolig在2005-5-16 16:36:13的发言: 因为字符 0 - 9 对应的ASCII是 30h - 39h
执行的意义是 让dl的高四位的值分别为0011即dl为0011xxxx 同这句一样add dl,30h ;首先确定dl中存放的值在0-9间
#4
lsylsy12342005-05-20 14:07
当DL的30H位全为0时,    “  OR  DL,30H   ”     与      “ADD  DL,30H”完全等同。  
#5
钢燃2005-05-21 20:44
4楼 我不清楚你第一句的意思
我是说DL中存放值介于0-9,即DL存放为介于00000000——00001001,  ok?
你再演示一边试一试
#6
lblyzby2005-05-22 20:14
以下是引用钢燃在2005-5-21 20:44:26的发言: 4楼 我不清楚你第一句的意思 我是说DL中存放值介于0-9,即DL存放为介于00000000——00001001, ok? 你再演示一边试一试
谢谢了啊,我懂了,此时dl中仅仅存放单个数值,而dl的低四位没有改变,改变的仅仅是dl的高四位。这样or dl,30h就与add dl,30h功能是一样的了。
#7
钢燃2005-05-24 11:21
1