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

如题所述

 ;输入不超过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

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-19
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个回答  2013-04-06
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是有效的,欢迎询问满意

用汇编语言写:从键盘输入一个十进制数(100以内),将其转变为二进制数并...
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...

...输入一个十进制数(100以内),将其转变为二进制数并在屏幕输出...
dec dl out1:int 21h loop jp1 mov ah,1 ;按任意键退出 int 21h mov ax, 4c00h int 21h MAIN ENDP CSEG ENDS END MAIN 0~99都有效 欢迎追问 求满意

汇编语言:从键盘上接收一个四位数的十进制数,并在终端上显示出与它...
;定义栈段,用于临时存放输入的四位字符 STACK SEGMENT DB 8 DUP(?)STACK ENDS ;定义数据段,STR用于输出一段提示字符串 ;PTR用于存放二进制输出结果 ;TEM用于临时存放还原出的4位十进制输入数 DATA SEGMENT STR DB "PLEASE INPUT:$"PRT DB 19 DUP(' ')TEM DW ?DATA ENDS ;代码...

...进制数(10以内),将其转变为二进制数并在屏幕输出。
输入:0~9 输出:0000~1001?输出可以是四位吗?

c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六...
void func(int n,int m)\/\/n为十进制数,m为2,8,或16 { Stack S;InitStack(S);while(n!=0){ push(S,n%m);n=n\/m;} display(S);} void main()\/\/这用来测试func { int n=12,m=2;func(n,m);m=8;func(n,m);m=16;func(n,m);} \/\/已在vc2005中测试过,可用,至于16...

汇编语言编写由键盘输入10个4位的数据并将这些数小到大进行排序其结果输...
DL,Cursor_Col XOR BX,BX MOV AH,2 INT 10H POP AX POP BX POP CX RET SetCursor EndP ; --- ; 功能:键盘输入一个指定位数的十进制数字,将其转换成二进制数并保存在指定的内存单元。

从键盘输入一个十进制数,将其转换成等值的二进制数 C语言程序怎么...
02h int 21h ;输出1 jmp l3 l2: mov dl,'1'mov ah,02h int 21h ;输出0 l3: shl bl,1 ;al逻辑左移,将次高位移动到最高位 dec cl jnz l1 mov ah,4ch int 21h code ends end start 这是汇编语言的算法

c语言问题:输入一个十进制数,将其转化为二进制数后存放在数组中并输出...
接着,transform_data_zhengshu函数负责将正数转换为二进制,通过循环和位运算实现。对于负数,先将其转换为正数,计算其二进制表示,然后取反并转换回十进制,最后加一再转换为二进制。在main函数中,输入一个负数(-2),将其转换为二进制并存储在pwm_table数组中,最后输出数组内容。需要注意的是,文章...

输入一个十进制整数,将其转换为二进制整数,然后输出。(要求利用顺序栈...
void InitStack(seqstack *s) \/\/栈的初始化,开始没有元素,栈顶指针为-1 { s->top=-1;} int StackEmpty(seqstack *s)\/\/判断栈是否为空 { if (s->top>=0)return 1;else return 0;} seqstack *push(seqstack *s,datatype x) \/\/元素入栈,top上移。如果top=99 已满(栈容量最大100...

C 语言 从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数...
Copy code#include <iostream.h> \/\/十进制数转换成二进制数字 void fun_1(int n){ if(n<2)cout<<n;if(n>=2){ fun_1(n\/2);cout<<n%2;} } \/\/十进制数字转换成八进制数字 Copy codevoid fun_2(int n){ if(n<8)cout<<n;if(n>=8){ fun_2(n\/8);cout<<n%8;} } \/\/...

相似回答