(汇编)两个个位数数字加法后输出二进制、十进制、十六进制数

问题:键盘输入两个一位十进制数(有提示输入),编程计算他们的和,并将结果分别以二进制、十进制和十六进制的形式显示到CRT上。(扩展:做一个菜单,选1,2,3,4分别输出及退出)

data segment
	menu    db "1 print decimal", 0dh,0ah ;定义菜单
		db "2 print hexadecimal", 0dh,0ah
		db "3 print binary", 0dh,0ah
		db "4 exit", 0dh,0ah,'$'
	msg1 db "please input first number:",0dh,0ah,'$'
	msg2 db "please input second number:",0dh,0ah,'$'
	num1 db 0 ;分别存放两个数及它们的和
	num2 db 0
	sum db 0
data ends
code segment
	assume cs:code, ds:data, es:data
start:
	mov ax, data
	mov ds, ax
	;输入第一个数
	mov dx, offset msg1
	mov ah, 9
	int 21h
	mov ah, 1
	int 21h
	sub al, 30h
	mov num1, al
	mov dl, 0ah
	mov ah, 2
	int 21h
	mov dl, 0dh
	mov ah, 2
	int 21h
	;输入第二个数
	mov dx, offset msg2
	mov ah, 9
	int 21h
	mov ah, 1
	int 21h
	sub al, 30h
	mov num2, al
	;计算两个数的和
	mov al, num1
	mov bl, num2	
	add al, bl
	mov sum, al

	mov dl, 0ah
	mov ah, 2
	int 21h
	mov dl, 0dh
	mov ah, 2
	int 21h
	;打印菜单
	mov dx,offset menu
	mov ah,9
	int 21h
	mov ah,8
	int 21h
	cmp al,'1'
	jz decimal
	cmp al,'2'
	jz hexadecimal
	cmp al,'3'
	jz binary
	jmp exit
;输出十进制
decimal:	
	mov al, sum
	daa ;强制十进制转换,BCD码
	mov bl, al ;暂时存放数字
	mov cl, 4
	shr al, cl ;算术右移四位,得到第一位数,如果为零不输出
	jz next1
	add al, 30h
	mov dl, al
	mov ah,2
	int 21h
next1:
	and bl, 0Fh ;bl与0F进行逻辑与运算得到第二位数
	add bl, 30h
	mov dl, bl
	mov ah, 2
	int 21h
	jmp exit

;输出十六进制,两个数的和没有进行十进制强制转换命令daa,其结果为十六进制数
hexadecimal:	
	mov al, sum
	mov bl, al
	mov cl, 4
	shr al, cl
	jz next2
	add al, 30h
	mov dl, al
	mov ah,2
	int 21h
next2:
	and bl, 0Fh
	cmp bl, 0Ah
	jb num
	add bl, 37h
	mov dl, bl
	mov ah, 2
	int 21h
	jmp exit
num:
	add bl, 30h
	mov dl, bl
	mov ah, 2
	int 21h
	jmp exit

;输出二进制
binary:
	mov cl, 8 ;设置循环的次数
	mov bl, sum
next3:

	mov dl, 0
	rol bl, 1 ;循环左移一位,移出为送入CF
	adc dl, 30h ;进位加法,需要加上CF的值
	mov ah, 2
	int 21h
	dec cl
	jnz next3
	jmp exit

exit:
	mov ah, 4ch
	int 21h
code ends
	end start

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值