2 heatdeath HeatDeath 于 2016.04.21 13:42 提问

汇编将输入的十进制数字转换成二进制,八进制,十六进制,代码写出来了,但是却无法正常运行 1C

data segment
mesg db 'please input :',0ah,0dh,'$'
buf db 5
db ?
db 5 dup(?)
buf1 db 5 dup('0')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,mesg ;在屏幕上显示mesg标号后的内容
mov ah,9
int 21h

mov bx,10

lea dx,buf  ;从键盘输入一个字符到缓冲区
mov ah,0ah
int 21h

mov si,offset buf+2 
mov di,offset buf1
mov cl,buf+1    ;将实际输入字符个数送入cl中

aga:
mov al,[si] ;将输入的第一个字符对应的ASCII码送入al中
sub al,30h ;获得输入的第一个数的原值
mov ah,0
xchg ax,[di]

mul bx

xchg [di],ax
add [di],ax
inc si
loop aga
mov bx,[di]
mov dl,0ah
mov ax,2
int 21h
mov dl,0dh
int 21h
mov cx,16
last:
mov dl,'0'
rol bx,1
jnc next ;与cf标志有关,若不进位,即cf=0,则跳转
mov dl,'1'
next:
mov ah,2 ;显示dl中的字符
int 21h
loop last
mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h ;换行
mov cx,4
aga2:
push cx
mov cl,4
rol bx,cl ;将bh的高4位循环左移入al的低4位中
pop cx
mov dx,bx
and dl,0fh ;将dl的高4位清零,保留dl的低4位,即bh中的高4位
cmp dl,10
jc then ;进位则跳转,即dl小于10
add dl,7
then:
add dl,30h
mov ah,2
int 21h
loop aga2
mov dl,0ah
int 21h
mov dl,0dh
int 21h ;换行

;========================转换为8进制==============================
mov dl,'1' ;假设bx=1100 0000 0000 0000
rol bx,1 ;逻辑循环左移则产生进位
jc then1 ;产生进位后则跳转到then1,显示8进制第一位为1
mov dl,'0' ;未产生进位,则第一位显示0
then1:
mov ah,2
int 21h
mov cx,5 ;(16-1)/3=5,3个二进制数表示一个八进制数
aga3:
push cx
mov cl,3
rol bx,cl ;循环左移3位
pop cx
mov dx,bx
and dl,07h ;07h=0000 0111b,将dl的高4位清零,低4位的第一位清零
add dl,30h
mov ah,2
int 21h
loop aga3

mov ah,4ch
int 21h

code ends
end start


不知道错误在哪里...
还请大神指教

1个回答

caozhy
caozhy   Ds   Rxr 2016.04.22 05:50
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
栈的应用--数制转换(十进制数转换为二进制、八进制、十六进制)
结果图: 代码如下:#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 typedef int Status; typedef int ElemType; typedef struct StackNode{ ElemType data; struct StackNode *next; }StackNod
汇编语言:从键盘输入十进制数,输出该十进制数的十进制,二进制(B),十六进制(H),八进制(Q)表示
;从键盘输入十进制数,输出该十进制数的十进制,二进制(B),十六进制(H),八进制(Q) DATA SEGMENT ;此处输入数据段代码 INFO1 DB 0DH,0AH,'INPUT A NUMBER:$' INFO2 DB 0DH,0AH,'THE DECIMAL OF THIS NUMBER IS:$' INFO3 DB 0DH,0AH,'THE HEXIMAL
80x86 汇编语言:键入0~255之间的数,显示对应的二进制和十六进制数
汇编语言:从键盘输入一个0~255之间的整数,并显示出对应该数的二进制和十六进制数。1、在屏幕提示:“please  input  a  number(0~255): ”后,输入一个0~255之间的整数。若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input  a  invalid  number, exit!”。2、在屏幕上显示出对应该数的二进制和十六进制数。例如:127 = 011
汇编语言(二):从键盘输入十进制数,输出该十进制数的十进制,二进制(B),十六进制(H),八进制(Q)表示
;从键盘输入十进制数,输出该十进制数的十进制,二进制(B),十六进制(H),八进制(Q) ;用循环左移指令做的输出函数 DATA SEGMENT ;此处输入数据段代码 INFO1 DB 0DH,0AH,'INPUT A NUMBER:$' INFO2 DB 0DH,0AH,'THE DECIMAL OF THIS NUMBER IS:$' INFO3 DB 0DH,0A
c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。
c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。
pycharm环境下进制转换-将十进制数转换为二进制、八进制、十六进制
将十进制数字转换为二进制、八进制、十六进制
C语言——十进制转为二进制、八进制、十六进制的函数转换
C语言——十进制转为二进制、八进制、十六进制的函数转换 /*** * Copyright(C) 2011, SKYCNC * All rights reserved * * 程序名称:dec_to_bin_oct_hex * 功    能:输入一个十进制数,将其转化为二进制、八进制、十六进制 * * 作    者:zhanghbboy * 完成日期:11.07.27
80x86汇编编程:实现十进制或十六进制向二进制的转换
用8086/8088汇编语言编程,实现十进制或十六进制向二进制的转换。要求通过键盘输入数字,有H为16进制、无H为10进制,然后按照二进制输出。例如:输入1、2、回车,那么第二行应该显示1100;如果输入1、2、H、回车,那么第二行应该显示00010010。不用考虑输入有错的情况;================================================满意回答:可以用10号
汇编语言输入十六进制,十进制输出二进制输出
汇编语言输入十六进制,十进制输出二进制输出
汇编语言 十六进制转换为二进制
汇编语言程序,十六进制转换为二进制