起因
我因为上课摸鱼,所以当时没学习的时间现在都要补回来。
三天,大概花了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之前不允许转载,以及完成作业使用
最后
感谢各位大佬和老师的帮助