200分,一道较简单的题,帮忙做一下,急用!!!谢谢

jack813 2003-06-06 08:44:25
编写程序实现从屏幕输入两个十进制数及一个操作符(‘+’或‘-’),并完成两个数的加(或减)法运算。(注:要求可以实现多字节加、减法,输入的十进制数至少可以是20位的)。

请付源代码。谢谢!!!
...全文
25 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dhzdhz 2003-06-10
  • 打赏
  • 举报
回复
学习
BraveHeart2222 2003-06-10
  • 打赏
  • 举报
回复
把数据段中的result db bufflen dup(?),24h改为result db bufflen dup(0),24h

再把过程getnum中的:
mov ah,0aH
int 21h
改为:
mov ah,0ch ;清键盘缓冲区
mov al,0ah
int 21h
你调试看看吧!
jack813 2003-06-08
  • 打赏
  • 举报
回复
好像有问题,在输入了一段数字之后,第二段没有被输入。比如执行如下,输入5后,直接出结果63000000.......
pleasent input first number:5
pleasent input second number:
630000000000000000000000000
BraveHeart2222 2003-06-08
  • 打赏
  • 举报
回复
;以下程序没有对检测输入的是否是数字的功能
maxlen=30
bufflen=maxlen+1

data segment
firstNum db bufflen,0,bufflen dup(?)
SecondNum db bufflen,0,bufflen dup(?)
result db bufflen dup(?),24h
prompt db "please input the first number:",24h
prompt2 db "please input the second number:",24h
data ends

code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
mov ah,9
lea dx,prompt
int 21h
lea dx,FirstNum
call GetNum
mov ah,9
lea dx,prompt2
int 21h
lea dx,SecondNum
call GetNum
lea si,FirstNum
inc si
inc si
lea di,SecondNum
inc di
inc di
lea bx,result
mov cx,maxlen
call addition
lea dx,result
call dispnum
mov ah,4ch
int 21h
;接收一个十进制数字串,且扩展成30位
;入口参数:dx=存放数字串的缓冲区起始地址
getnum proc
mov ah,0aH
int 21h
mov dl,0dh ;回车
mov ah,2
int 21h
mov dl,0ah ;换行
mov ah,2
int 21h
mov si,dx
inc si
mov cl,[si] ;取输入的数字串长度
xor ch,ch
mov ax,maxlen
std
mov di,si
add di,ax
add si,cx
sub ax,cx
rep movsb ;数字串向高地址移,让出低地址
mov cx,ax
jcxz getnum1
xor al,al
rep stosb
getnum1:cld
ret
getnum endp

;入口参数:SI=被加数的开始地址
;入口参数:DI=加数的开始地址
;入口参数:CX= 串长度
;入口参数:BX=存放结果的缓冲区开始地址
addition proc
std
add bx,cx ;BX指向结果缓冲区最后一个字节
add si,cx
add di,cx
dec si ;si指向被加数缓冲区最后一个字节
dec di ;di指向加数缓冲区最后一个字节
xchg di,bx
inc bx
clc
add1: dec bx
lodsb
adc al,[bx]
aaa
stosb
loop add1
mov al,0
adc al,0
stosb
cld
ret
addition endp

;显示结果
;入口参数:DX=结果的缓冲区开始地址
dispnum proc
mov di,dx
mov al,0
mov cx,maxlen
repz scasb
dec di
mov dx,di
mov si,di
inc cx
disp1: lodsb
add al,30h
stosb
loop disp1
mov ah,9
int 21h
ret
dispnum endp
code ends
end start

21,453

社区成员

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

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