请帮忙看下这个程序 谢谢

lost1989 2009-01-23 05:55:57
请问下: 结果应该是 0001 0001 1101 0111
为什么我得的是 0001 0010 1101 0111
哪里错了?

data segment
;----------------
num dw 4567h
buf db 4 dup (?)
count db 4
data ends

code segment
assume cs:code,ds:data,es:data

begin:
mov ax,data
mov ds,ax
mov es,ax
;-----------------------------
mov dx,0
mov ax,num
mov si,offset buf
mov cl,4
again: rol ax,cl
mov bl,al
and bl,0fh
mov [si],bl
call compute
inc si
dec count
jnz again

disp: mov bx,dx
mov cx,16
aga: mov dl,'0'
rcl bx,1
adc dl,0
mov ah,2
int 21h
loop aga

mov ah,4ch
int 21h


compute proc near
mov bx,dx
shl dx,1
shl dx,1
shl dx,1
shl bx,1
add dx,bx
add dx,[si]

ret
compute endp




;-----------------------------


code ends
end begin

...全文
117 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
houruifeng 2009-03-03
  • 打赏
  • 举报
回复

改为:
data segment
;----------------
num dw 4567h
buf db 4 dup (?)
count db 4
data ends 改为

data segment
;----------------
count db 4
num dw 4567h
buf db 4 dup (?)
data ends
就对了。试试,呵呵!
dididu1515 2009-03-03
  • 打赏
  • 举报
回复
楼主贴的程序是把十进制数4567D化为十六进制11D7H,
再以二进制0001 0001 1101 0111B显示出来。
程序错误是在十化十六第4步时,把计数器01也加了进来(11D0H+0107H=12D7H)。
改正方法一:
buf db 4 dup (?)改为
buf db 5 dup (?)
改正方法二:
data segment
;----------------
num dw 4567h
buf db 4 dup (?)
count db 4
data ends 改为

data segment
;----------------
count db 4
num dw 4567h
buf db 4 dup (?)
data ends

21,500

社区成员

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

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