主题:[求教]帮忙看看一道汇编编程题哪里错了(急!拜托了!)
[size=3]编写程序完成功能:从键盘上接收两个4位十六进制数相加或相减的算式,在下一行以八进制形式输出计算结果,如:输入“3A20-2010”,输出“015020”。
程序要求根据输入算式中的加减号决定加减运算。[/size][em65]
data segment
data1 dw ? ;回车换行
data2 dw ?
opp db ?
data ends
prognam segment
assume cs:prognam,ds:data
main proc far
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
first: mov bx, 0
mov dx, 04h
mov cl, 4
lp1: mov ah, 01h
int 21h
cmp al, 'a'
jl num1
sub al, 31h
num1: sub al, 30h
shl bx, cl
mov ah, 0
add bx, ax
dec dx
jne lp1
mov data1, bx
enter_opp:
mov ah, 1h
int 21h
mov opp, al
second: mov bx, 0
mov dx, 04h
mov cl, 4
lp2: mov ah, 01
int 21h
cmp al, 'a'
jl num2
sub al, 31h
num2: sub al, 30h
shl bx, cl
mov ah, 0
add bx, ax
dec dx
jne lp2
mov data2, bx
line:
mov ah, 2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
result:
mov al, opp
cmp al, '+'
je datas_add
cmp al, '-'
je datas_sub
datas_add:
mov ax, data1
mov dx, data2
add dx, ax
jmp print
datas_sub:
mov ax, data1
mov dx, data2
sub ax, dx
mov dx, ax
print:
mov data1, dx
mov cl, 1
mov bx, 01h
mov ch, 6
ko: mov dx, data1
rol dx, cl
mov data1, dx
and dx, bx
add dl, 30h
mov ah, 2
int 21h
mov cl, 3
mov bx, 07h
dec ch
jne ko
ret ;返回DOS
main endp
prognam ends
end start
我的程序经调试已没有错误,但运行结果却不对,请大家帮忙改改哦!谢谢!
程序要求根据输入算式中的加减号决定加减运算。[/size][em65]
data segment
data1 dw ? ;回车换行
data2 dw ?
opp db ?
data ends
prognam segment
assume cs:prognam,ds:data
main proc far
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
first: mov bx, 0
mov dx, 04h
mov cl, 4
lp1: mov ah, 01h
int 21h
cmp al, 'a'
jl num1
sub al, 31h
num1: sub al, 30h
shl bx, cl
mov ah, 0
add bx, ax
dec dx
jne lp1
mov data1, bx
enter_opp:
mov ah, 1h
int 21h
mov opp, al
second: mov bx, 0
mov dx, 04h
mov cl, 4
lp2: mov ah, 01
int 21h
cmp al, 'a'
jl num2
sub al, 31h
num2: sub al, 30h
shl bx, cl
mov ah, 0
add bx, ax
dec dx
jne lp2
mov data2, bx
line:
mov ah, 2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
result:
mov al, opp
cmp al, '+'
je datas_add
cmp al, '-'
je datas_sub
datas_add:
mov ax, data1
mov dx, data2
add dx, ax
jmp print
datas_sub:
mov ax, data1
mov dx, data2
sub ax, dx
mov dx, ax
print:
mov data1, dx
mov cl, 1
mov bx, 01h
mov ch, 6
ko: mov dx, data1
rol dx, cl
mov data1, dx
and dx, bx
add dl, 30h
mov ah, 2
int 21h
mov cl, 3
mov bx, 07h
dec ch
jne ko
ret ;返回DOS
main endp
prognam ends
end start
我的程序经调试已没有错误,但运行结果却不对,请大家帮忙改改哦!谢谢!