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

 我来答
匿名用户
推荐于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
百度网友d21f34fe8
2012-12-19 · TA获得超过513个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:82.3万
展开全部
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
我这里没有汇编环境,没有调试,大意如此。
希望可以帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
quanxiansheng
2013-04-06 · TA获得超过5019个赞
知道大有可为答主
回答量:1.2万
采纳率:20%
帮助的人:2351万
展开全部
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是有效的,欢迎询问满意
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式