8086问题

xds2000 2000-07-05 02:06:00
一个32bit的数如何用十进制显示输出?假定这个数是存放在DX,AX中.
我用DIV做,每次除以10,取余数放到字符串:strNumber DB 11 DUP(?),'$'中
可是16位寄存器除法会溢出,当商大于64K(2的16次方)时,AX中放不下.
所以我只能正确显示640K之内的数,如何显示更大一点的数?(最好只用
8086汇编,不使用32位寄存器)
暑假小学期的作业,要求实现类似dos的dir功能(只要求读出磁盘根目录
中的文件和子目录即可),小弟就是文件长度这个地方的转换做不来,请各位
帮帮忙,急用!
TIA!!!
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pinetree 2000-07-20
  • 打赏
  • 举报
回复
同济计算机的小bia上网球帮助啊.
没面子
ta 2000-07-05
  • 打赏
  • 举报
回复
实在抱歉, 刚才的代码失措的.
mov di,strNumber
xor bh,bh
xor cx,cx
call l1
shr al,4
call l1

mov al,ah
call l1
shr al,4
call l1

mov al,dl
call L1
shr al,4
call l1

mov al,dh
call l1
shr all,4
call l1

cmp bh,0
jz L2
mov al,31h
mov[di],al
inc cx

l2:
mov bx,cx
mov di,strNumber

std
L22
mov al,[di]
push al
inc di
loop l22
L3: mov cx,bx
mov di,strNumber
L33:
pop al
mov [di],al
inc di
loop
end
L1: mov bl,al
and bl,0fh
add bl,bh
daa
mov bh,al
and al,ofh
add al,30h
mov [di],al
inc cx
inc di
shr bh,4
ret

ta 2000-07-05
  • 打赏
  • 举报
回复
抱歉! 我忽略一点.
first answer as below
add al,0
daa
adc ah,0
daa
adc dl,0
daa
adc dh,0
daa
mov di,strNumber
jnc L1
mov byte ptr[di],31h
inc di
L1:
mov bl,dh
shr dh,4
and dh,fh
and bl,fh
add bl,30h
add dh,30h
mov [di],bl
inc di
mov [di],dh
inc di

分别对DL , AH , AL 重复以上过程.
在你的strNumber中就会有你想要的.

I have no answer for second.
good luck
ta 2000-07-05
  • 打赏
  • 举报
回复
first answer as below
add al,0
daa
push al
adc ah,0
daa
push ah
adc dl,0
daa
push dl
adc dh,0
daa
push dh
pop word ptr strNumber

I have no answer for second.
good luck!

21,459

社区成员

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

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