用汇编语言写:从键盘输入一个十进制数(100以内),将其转变为二进制数并在屏幕输出

十万火急,老鸟给点力
2024-12-04 05:37:36
推荐回答(3个)
回答1:

print MACRO para
lea dx,para
mov ah,9
int 21h
ENDM
data segment
buffer db 2,0,2 dup(?)
TEN db '请输一个100之内的两位数:$'
HEX db '16进制:$'
BIN db ' 2进制:$'
CRLF db 0dh,0ah,24h
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
mL1: print TEN
lea dx,buffer
mov ah,0ah
int 21h
print CRLF
mov cl,[buffer]
or cl,cl
jz mL1
xor ch,ch
lea bx,buffer+2
xor dx,dx
mL2: mov al,[bx]
inc bx
call ta2h
jc mErr1
xor ah,ah
dec cx
jz mL3
mov cl,10
mul cl
add dx,ax
jmp mL2
mL3: add dx,ax
push dx
print HEX
pop bx
push bx
MOV CH,4 ;从这里开始将4位二进制数转成16进制ASCII码
mH1: MOV CL,4
ROL BX,CL ;将BX中的数循环左移4位,也就是把BX最高4位,放到BX的最低4位上去。
MOV AL,BL ;将低8位放入AL
AND AL,0FH ;取低4位
ADD AL,30H ;加上30H 从这里开始将4位二进制数转成16进制ASCII码,
CMP AL,3AH ;加结果是不是少于3A
JL mH2 ;是的话,表示是0-9之中数
ADD AL,7H ;否则还要加上7,变成对应的A或B、C、D、E、F
mH2: MOV DL,AL ;AL是转换好的一位16进制数的ASCII码
MOV AH,2
INT 21H ;显示到屏幕
DEC CH
JNZ mH1 ;BX中其有4位
print CRLF
print BIN
pop bx
MOV CH,16 ;以下是2进制输出,看完上面的,这个容易理解
MOV CL,1
mB2: ROL BX,CL
MOV DL,'1'
JC mB1
MOV DL,'0'
mB1: MOV AH,2
INT 21H
DEC CH
JNZ mB2
print CRLF
jmp mEnd
mErr1: jmp mL1

ta2h proc
sub al,30h
jc sErr1
cmp al,10
jnc sErr1
clc
ret
sErr1: stc
ret
mEnd:
mov ax,4c00h
int 21h
code ends
end start
我这里没有汇编环境,没有调试,大意如此。
希望可以帮到你

回答2:

DSEG分部
输入DB'输入一个数字:','$'

输出DB 32,“结果是:','$'

NUMBER DB 3

DB?

DB 3 DUP(0)

DSEG结束

的CSEG分部

假设CS:CSEG,DS:DSEG

MAIN PROC FAR

MOV斧头,DSEG

MOV DS,斧头

LEA DX,输入

MOV啊,9

中断21h

LEA DX,数

乐章啊,0AH BR /> 21H

LEA DX,输出

MOV啊,9

21H

数+2

子BL,30H MOV BL,

CMP NUMBER + 1,1

JZ JP0

MOV AL,10

MUL BL

加人,数+3

子人,30H

MOV BL, AL JP0:MOV AH,2

MOV CX,8

JP1:SHL BL,1

MOV DL,'1'

JC OUT1

十二月DL OUT1:INT 21H

循环JP1

乐章啊,1,按任意键退出

21H

MOV AX,4C00h
>诠释2012年2012年7月2012年8月2012年9月2012年10月2012年11月2012年12月1月

MAIN ENDP

CSEG结束

端主

099是有效的,欢迎询问满意

回答3:

;--------------------------------
DATAS SEGMENT
X DB 0
DATAS ENDS
;--------------------------------
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
I0: MOV AH, 1
INT 21H
CMP AL, 0DH
JZ L1
CMP AL, '0'
JB I0
CMP AL, '9'
JA I0
SUB AL, 30H
MOV X, AL
I1: MOV AH, 1
INT 21H
CMP AL, 0DH
JZ L1
CMP AL, '0'
JB I1
CMP AL, '9'
JA I1
SUB AL, 30H
MOV BH, AL
MOV AL, X
MOV BL, 10
MUL BL
ADD AL, BH
MOV X, AL
;--------------------
L1:
MOV DL, 10
MOV AH, 2
INT 21H
MOV DL, 13
INT 21H
;--------------------
MOV AL, X
MOV CX, 0
MOV BL, 2
L3:
MOV AH, 0
DIV BL
ADD AH, 30H
MOV DL, AH
PUSH DX
INC CX
CMP AL, 0
JNZ L3
L4:
POP DX
MOV AH, 2
INT 21H
LOOP L4
EXIT:
MOV AH, 4CH
INT 21H
CODES ENDS
END START
;===================================

这就可以了。