主题:请教如果在AX中的内容是1356
zycfrank
[专家分:0] 发布于 2005-11-16 19:09:00
请教
如果在AX中的内容是1356
用程序怎么使屏幕上显示出4950
说明:4950是1356的十进制
我是个初学者
这个问题困扰了我了我一个星期了,我一直在苦想
哪位知道的朋友能不能告诉我一声,我会更加对汇编有兴趣的
回复列表 (共6个回复)
沙发
xiaohaokof [专家分:1760] 发布于 2005-11-17 20:21:00
如果在AX中的内容是 1356H
用程序怎么使屏幕上显示出 4950D
现在这是一种算法:
我们首首先将(AX)里面的内容左移四位,将这四个二进制数转换为它的ASCII值
将它乘以一个16的3次方,后面的一样子这样子移位,就可以得到4950。
板凳
wangcj2416 [专家分:20] 发布于 2005-11-25 22:03:00
data segment
x dw 1356h
buf db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,x
mov bx,10
mov cx,0
lea si,buf
lop1:
mov dx,0
div bx
push dx
inc cx
or ax,ax
jne lop1
lop2:
pop ax
add al,30h
mov [si],al
inc si
loop lop2
mov [si],byte ptr '$'
lea dx,buf
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start
3 楼
wangcj2416 [专家分:20] 发布于 2005-11-25 22:05:00
这个是我写的程序,我试过了可以的。你可以试试看,这个程序的宗旨就是将十六进制数化成十进制显示出来。
4 楼
abcdxjs [专家分:240] 发布于 2005-11-27 11:09:00
各个子程序在这里.转换一位或四位的都有:
;子程序名:HexToAscOne
;子程序功能:将AL中的一位十六进制(低四位)转换为ASC码
;入口: 要转换的数据在AL的低四位:
;出口:十六进制数的ASC码在AL中
;爱影响的寄存器: AL 和 Flags
HexToAscOne Proc Near
AND AL,0fh ;清空AL的高四位
CMP AL,0ah ;如果大于或等于0aH(10),则直接加上48
JC done ;如果小于0AH,则加上7后再加上48
ADD AL,7
done:ADD AL,30h
Ret
HexToAscOne ENDP ; 低四位转换完毕
Ret
HexToAscOne ENDP ; 低四位转换完毕
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;子程序名:HexToAscTwo
;子程序功能:将AL中的两位十六进制转换为ASC码
;入口: 要转换的数据在AL中
;出口:高位的ASC码在AH中,低位的ASC码在AL中
;爱影响的寄存器: AX CX 和 Flags
HexToAscTwo Proc
PUSH CX ;保护CX
MOV CH,AL ;AL暂存CH中
MOV CL,4
SHR AL,CL ;通过逻辑右移,使AL的高4位转到低4位,同时高4位清0
CALL HexToAscOne ;调用HexToAscOne来完成高位转换
MOV AH,AL ;高位ASC码存入AH中
MOV AL,CH ;将CH重新转入AL中
CALL HexToAscOne ;完成低位转换
POP CX
RET
HexToAscTwo ENDP
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
;子程序名:HexToAscFour
;子程序功能:将AX中的四位十六进制转换为ASC码
;入口: 要转换的数据在AX中
;出口:由高到低ASC码依次存在:BH BL AH AL
;爱影响的寄存器: AX BX 和 Flags
HexToAscFour Proc
PUSH AX ;暂存AX于堆栈中
MOV AL,AH
CALL HexToAscTwo ;完成高两位的转换
MOV BX,AX ;将高两位的ASC码存入BX中
POP AX
CALL HexToAscTwo ;完成低两位转换
RET
HexToAscFour ENDP
5 楼
expection [专家分:70] 发布于 2005-12-03 09:06:00
虽然暂时不懂 还是顶!!
6 楼
abcdxjs [专家分:240] 发布于 2005-12-03 20:25:00
不好意思搞错了.
我上面的那个显示出来的是十六进制的,十进制的我还在研究有没有好的算法
上面的注释有一点错.我改好了.
我来回复