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

[求助]怎样实现两个五字节的十六进制的数的和?

damofei 发布于 2006-11-04 10:15, 1096 次点击

大家帮我看看这个程序对吗?我怎么连接不正确啊?
data segment
data1 db 0f8h,60h,0ach,74h,3bh
data2 db 0c1h,36h,9eh,0d5h,20h
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cx,5
mov si,0
clc
looper: mov al,data2[si]
adc data1[si],al
inc si
dec cx
jnz looper
hlt
code ends
end start

9 回复
#2
wchx2152006-11-04 11:15

你程序是对的,只要把hlt改为mov ax,4c00h;int 21h就行了

#3
damofei2006-11-04 15:15
如果要显示计算结果,是要加下面的指令吗?
mov dx,offset data1
mov ah,09h
int 21h
我怎么运行不了啊!
#4
wchx2152006-11-04 20:59
你要在后面补上,'$'才行
#5
damofei2006-11-11 16:33

还是没有结果,谁运行一下,看什么问题?

#6
菜鸟上路2006-11-11 17:09

LZ给出的程序加上大家的帮助,直接编译链接此程序确实没有输出结果.
首先,不管程序的正确与否,关于输不出结果的问题,这可能是系统的一个BUG(这点只是我猜想的).
如果先对生成的.EXE文件DEBUG一下,再运行文件就可以看到结果了.
但我用DEBUG的时候,分析下,觉得这程序有错,但我对具体的这些数字标号不太清楚,所以不敢确定错在哪了,大家可以共同分析下.

#7
wchx2152006-11-11 17:26

我不知道你是不是想显示存储单元中的内容,你看看吧!
data1 db 0f8h,60h,0ach,74h,3bh,0
data2 db 0c1h,36h,9eh,0d5h,20h
data ends
stack1 segment
db 20h dup(0)
stack1 ends

code segment
assume cs:code,ds:data
start: mov ax,stack1
mov ss,ax
mov sp,32
mov ax,data
mov ds,ax
mov cx,5
mov si,0
clc
looper: mov al,data2[si]
adc data1[si],al
inc si
dec cx
jnz looper
mov si,0
call show_num
mov ax,4c00h
int 21h

show_num proc ;显示十六进制数
push si
push dx
push cx
push bx
show_num1: mov bl,data1[si]
cmp bl,0
jz ok ;到0值退出
mov cx,2
rotate: push cx
mov cl,4
rol bl,cl
mov dl,bl
and dl,0fh
cmp dl,9
ja s
add dl,30h
jmp short show
s: add dl,37h
show: mov ah,02h
int 21h
pop cx
loop rotate
inc si
mov dl,20h ;空格
mov ah,02h
int 21h
jmp short show_num1


ok: pop bx
pop cx
pop dx
pop si
ret
show_num endp
code ends
end start

#8
菜鸟上路2006-11-11 19:21
LS的怎么编译不通过啊
#9
wchx2152006-11-11 20:31
不可能吧!我编译过了呀!
#10
wchx2152006-11-11 20:36
少了第一行data segment
漏复制了,不好意思!
1