用汇编实现2进制到16进制 2进制到10进制转换并按要求输出

用汇编实现2进制到16进制 2进制到10进制转换并按要求输出

起因

我因为上课摸鱼,所以当时没学习的时间现在都要补回来。
三天,大概花了15个小时写完了七道题,到处求助大佬,也问过老师。

题目要求

将存储单元Result的16位二进制数(自己定义数字),以不同进制的方式显示在屏幕上。设计显示菜单,通过菜单选择1HEX进制、2DEC 十进制、3BIN二进制。 计算机虚拟环境运行结果截屏和程序代码粘到答案区。

题目样例

Data SEGMENT

ResultDW 0A915H; =43285=1010100100010101B

BUFFDW  ?;中间变量

MenuDB '     Menu-Display Format Select(1-4):',0DH,0AH

                DB '  1HEX-Hexadecimal',0DH,0AH;  A915  十六进制

                DB '  2DEC-Decimal',0DH,0AH;  43285 十进制

                DB '  3BIN-Binary',0DH,0AH;   1010100100010101二进制

                DB '  4ESC-Exit!',0DH,0AH,'$'

IN_ErrDB  0DH,0AH,'*****INPUT ERROR!*****',0DH,0AH,'$'

LF            DB  0DH,0AH,'$'

Data ENDS

在这里插入图片描述

实现代码

Data SEGMENT

Result DW 1010100100010101B; =43285=1010100100010101B=0A915H

BUFF DW  ?;中间变量

Menu DB '     Menu-Display Format Select(1-4):',0DH,0AH

                DB '  1HEX-Hexadecimal',0DH,0AH;  A915  十六进制

                DB '  2DEC-Decimal',0DH,0AH;  43285 十进制

                DB '  3BIN-Binary',0DH,0AH;   1010100100010101二进制

                DB '  4ESC-Exit!',0DH,0AH,'$'

IN_Err DB  0DH,0AH,'*****INPUT ERROR!*****',0DH,0AH,'$'

LF            DB  0DH,0AH,'$'

Data ENDS
code segment
main proc far
assume cs:code,ds:data,ES:data
start1:;程序开始
	mov AX,data
	mov DS,AX
	mov es,ax
	mov ah,9
	lea Dx,Menu
	int 21h 
start:;程序对输入做判断,对应跳转
	MOV AH,01
	INT 21h
	PUSH AX
	call crlf
	POP AX
	lea DI,[BUFF]
	MOV [DI],AL
	MOV AL,34H
	CMP [DI],AL
	JE four
	MOV AL,33H
	CMP [DI],AL
	JE three
	MOV AL,32H
	CMP [DI],Al
	JE two
	MOV AL,31H
	CMP [DI],Al
	JE one
	lea dx,IN_Err
	mov ah,9
	int 21h
	JMP start
one:;2-16
	CALL binihex
	call crlf
	JMP start
two:;2-10
	CALL binidec
	call crlf
	JMP start
three:;2-2
	CALL bin
	call crlf
	JMP start
four:;out
	MOV AX,4C00H
	INT 21H
main endp
binihex proc near;2-16
	sub ax,ax
	mov ch,4
	MOV bx,Result
rotate:
	
   	mov cl,4
  	rol bx,cl
	mov al,bl
	and al,0fh
	add al,30h
	cmp al,3ah
	PUSH ax
	jl printit
	POP ax
 	add al,7h
 	PUSH AX
printit:
	POP AX
	SUB DX,dx
  	mov dl,al
	mov ah,02H
 	int 21h
 	dec ch
  	jnz rotate
 	RET
binihex endp
binidec proc near;2-10
	MOV bx,Result
	mov cx,10000d
	call dec_div
	mov cx,1000d
	call dec_div
	mov cx,100d
	call dec_div
	mov cx,10d
	call dec_div
	mov cx,1d
	call dec_div
	ret
dec_div proc near
	mov ax,bx
	mov dx,0
	div cx
	mov bx,dx
	mov dl,al 
	add dl,30h 
	mov ah,02h
	int 21h
	ret
dec_div endp
binidec endp
crlf proc near;换行
	mov dl,0ah
	mov ah,02h
	int 21h
	mov dl,0dh
	mov ah,02h
	int 21h
	ret
crlf endp
bin proc near;2-2
kkl:	
	MOV CX,16
	MOV bx,Result
T:
	SHL bx,1
	JC print1
	JNC print0
print1: 
	MOV DL , 31h
	MOV AH , 2
	int 21h
	JMP L
print0: 
	MOV DL , 30h
	MOV AH , 2
	INT 21h
L:     	
	LOOP T
	ret
bin endp
code ends
end start1

验证结果

在这里插入图片描述
此程序在2020.5.1之前不允许转载,以及完成作业使用

最后

感谢各位大佬和老师的帮助

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值