急:如何将32位16进制数转化为10进制?

xfile 2003-06-08 08:47:36
老师留的作业:
如何将32位16进制数转化为10进制并显示出来.
哪位DX能给一个启示,先谢谢了!
...全文
1282 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfile 2003-06-10
  • 打赏
  • 举报
回复
可能因为你们用的是8086, 而我用的还是8051,
请再帮我出出注意吧.用除法求余数这招肯定是行不通了.
xfile 2003-06-10
  • 打赏
  • 举报
回复
up
xfile 2003-06-10
  • 打赏
  • 举报
回复
请各位DX注意:我所用的mov 和 div指令只能
进行8位操作(一个字节). 以上所提都是就32位操作而言,
有谁能就此关键问题提出解决办法?
xfile 2003-06-09
  • 打赏
  • 举报
回复
spreadwide,
谢谢你的代码,但是我还是没有看明白它如何对这32位数操作的,
mov ax data 一次就能把这个数送进去吗?我所用的mov 和 div指令只能
进行8位操作,这就是我所困惑的地方,请指教.
freewing 2003-06-09
  • 打赏
  • 举报
回复
你是说4个字节吗?
用除法不正好吗?
DX:AX,高字在DX,低字在AX

(DX)(AX)/(10)
商(AX),余数(DX),把DX push进去
循环就是了
xiaott 2003-06-09
  • 打赏
  • 举报
回复
DIV 指令还可以用32位操作数做被除数,除数为16位,得到的结果商和余数也是16进制的!!!!!!我这里有一个代码:希望你能够看明白!
;********************************************************************
; 从1加至100,将结果存入BUFF单元并输出十进制结果显示
;********************************************************************

data segment
buff db 20 dup(?)
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
lea si,buff
mov ax,0
mov bx,1
mov cx,100
lop: add ax,bx ;从1加至100并结果存到AX中(可以存入十进制范围0-65535)
inc bx
loop lop
mov bx,10 ;置除数为十进制的10(十六位)
lop1: mov dx,0 ;将DX作为32位被除数的高位扩展
div bx ;[DXAX]/BX 后商在低位字AX中,余数在高位字DX中
push dx ;将结果(余数)保存至堆栈
inc cx ;计数器加一
cmp ax,0
jnz lop1 ;若商不为0则继续处理
next: pop dx ;取出数据
mov [di],dl ;将结果存入存储单元
inc di
call disp ;显示十进制结果
loop next
mov ah,4ch
int 21h
disp proc near ;显示ASCII字符子程序
add dl,30h
mov ah,02h
int 21h
ret
disp endp
code ends
end begin
spreadwide 2003-06-08
  • 打赏
  • 举报
回复
这是键盘输入32位十六进制数转换为十进制并输出的代码:
stack segment stack
dw 128 dup(?)
stack ends
;*********************************
data segment
str db 'continue?if y/Y continue,or exit$'
data ends
;*****************************************
code segment
assume cs:code,ss:stack,ds:data
start:mov ax,stack
mov ss,ax
mov ax,data
mov ds,ax
L: call hdc
call crlf
call bdc
call crlf
lea dx,str
mov ah,9h
int 21h
mov ah,1h
int 21h
cmp al,'y'
jz L
cmp al,'Y'
jz L
mov ah,4ch
int 21h
;***************************************
hdc proc ;键盘输入转换为二进制
push ax
push cx
mov bx,0d
nkey:mov ah,1h
int 21h
cmp al,30h
jl exit
cmp al,3ah
jl digit
cmp al,41h
jl exit
cmp al,47h
jl char
cmp al,61h
jl exit
cmp al,67h
jge exit
sub al,20h
char:sub al,7h
digit:sub al,30h
mov ah,0
mov cl,4
shl bx,cl
or bx,ax
jmp nkey
exit:pop cx
pop ax
ret
hdc endp
;***********************************
bdc proc ;二进制转换为十进制并输出
push cx
mov cx,10000d
call disp
mov cx,1000
call disp
mov cx,100
call disp
mov cx,10
call disp
mov cx,1
call disp
pop cx
ret
bdc endp
;***********************************
disp proc ;十进制转换为ASCII码显示输出
push ax
push dx
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2h
int 21h
pop dx
pop ax
ret
disp endp
;*******************************
crlf proc ;显示输出回车换行
push ax
push dx
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h
pop dx
pop ax
ret
crlf endp
;*********************************
code ends
end start


xfile 2003-06-08
  • 打赏
  • 举报
回复
谢谢freewing,
我用的是8051 Simulator,除法的指令是MOV AB,A 是一个8位字节,
用你的方法,我必须把这个32位数分成四部分来操作, 我想不明白其中
的换算关系, 请再指教!
freewing 2003-06-08
  • 打赏
  • 举报
回复
一个一般的方法
1:求10的余数
2:把余数push,用CX计push的个数
3:再除以10然后
4:数不为0就重复1-3
5:POP
6:输出
7:重复5-6直到把所有余数都输出(CS=0)

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧