用汇编语言写:从键盘输入一个十进制数(四位数),将其转变为二进制数并在屏幕输出
3个回答
推荐于2017-11-22
展开全部
;输入不超过65535的10进制数,将其以16位2进制数的形式显示
code segment
assume cs:code
org 100h
start:
jmp bbb
x dw 0
msg1 db 10,13,'please input a number:','$'
msg2 db 10,13,16 dup(0),'$'
bbb: push cs
pop ds
push cs
pop es
lea dx,msg1
mov ah,9
int 21h
lea bx,x
mov ax,0
push ax
again1:
mov ah,1
int 21h
cmp al,13
je line0
sub al,30h
mov ah,0
mov si,ax
pop ax
mov cl,10
mov ch,0
mul cx
add ax,si
push ax
jmp again1
line0:
pop ax
mov word ptr[x],ax
;=================
lea di,msg2
inc di
inc di
mov cx,16
mov ax,word ptr[x]
again2:
rol ax,1
jc @1
mov byte ptr[di],30h
jmp @2
@1: mov byte ptr[di],31h
@2: inc di
loop again2
;==============
lea dx,msg2
mov ah,9
int 21h
mov ah,8
int 21h
mov ah,4ch
int 21h
code ends
end start
展开全部
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
我这里没有汇编环境,没有调试,大意如此。
希望可以帮到你
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
我这里没有汇编环境,没有调试,大意如此。
希望可以帮到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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是有效的,欢迎询问满意
输入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是有效的,欢迎询问满意
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询