任意两个10位以内十六进制数求和并显示

任意两个10位以内十六进制数求和并显示

汇编语言程序设计题
http://zhidao.baidu.com/question/129269410.html
悬赏分:200 - 离问题结束还有 20 天 9 小时
题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,
对其求和并显示结果,程序运行时提示输入加数和被加数,
求完和显示结果后,显示继续和退出。 非常谢谢!
问题补充:和数仍以十六进制形式显示输出。
提问者: 匿名

说明:这是百度汇编吧_任意两个10位以内十六进制数求和

http://tieba.baidu.com/f?kz=681706003

的修改版,添加了无输入处理和清除前导空格指令.

code segment;任意两个10位以内十六进制数求和
assume cs:code,ds:code
    org 100h;标准COM格式
start:
     mov ax,3;文本模式
     int 10h
     push cs
     pop ds
     push ds
     pop es
Again:
     lea dx,mes1;提示
     mov ah,9
     int 21h
mov di,30fh
     call input;接收 数A
     lea dx,mes2;提示
     mov ah,9
     int 21h
mov di,31fh
     call input;接收 数B
     call count;求和
     lea dx,mes3
     mov ah,9
     int 21h
;*** 输出十六进制的结果 ***
     call crt
     lea dx,mes4
     mov ah,9
     int 21h
     mov ah,0;暂停
     int 16h
     cmp ah,15h ;"Y(y)"继续
     jz Again;计算下一题
     mov ah,4ch;结束
     int 21h
input:
   mov cx,10
T1:mov ah,0;接收数字
   int 16h
   cmp al,0dh
   jz ok
   cmp al,'0';数据校验
   jb T1
   cmp al,'9'
   jbe yes
   and al,1011111b ;字母转为大写
t2:cmp al,'A'
   jb t1
   cmp al,'F'
   ja t1
yes:
   mov ah,0eh ;显示有效数据
   int 10h
   sub al,30h
   cmp al,9
   jbe w2
   sub al,7
w2:push ax ;压入堆栈
   loop T1
ok:mov bp,cx
   inc bp
   mov cx,11
   sub cx,bp
   std
   jcxz u3
u1:pop ax
   stosb
   loop u1
u3:mov al,0
   mov cx,bp
u2:stosb
   loop u2
   ret

count:mov si,30fh
      mov di,31fh
      mov ah,0
      mov cx,11
T3:   mov al,[si]
      add al,[di]
      add al,ah
      call part
      dec si
      dec di
      loop T3
      ret

part:
push cx
mov cl,4
mov ah,al
and al,0fh
shr ah,cl
or al,30h
cmp al,'9'
jbe pa1
add al,7
pa1:mov [si],al;逐位累加
pop cx
ret

crt:cld
xor bp,bp
mov si,305h
mov cx,10
cr3:
mov al,[si]
cmp al,'0'
jnz cr0
inc bp
inc si
loop cr3
cr0:
mov cx,11
sub cx,bp
mov si,305h
add si,bp
cr1:lodsb
mov ah,0eh
int 10h
loop cr1
mov al,'H'
int 10h
ret

mes1 db 0dh,0ah,09,'Input number A: $'
mes2 db 0dh,0ah,09,'Input number B: $'
mes3 db 0dh,0ah,09,'Sum A+B= $'
mes4 db 0dh,0ah,09,'Continue Y(y)? $'

code ends
end start

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值