汇编语言程序输入一位十进制转换为二进制

我的想法是将输入的一位十进制数然后将这个输入的ascii码减去30h,再依次和8,4,2,1比较,分别出是否大于等于8,4,2,1,然后决定是输出0还是1.初学,不怎么入门,请大家回答详细点,谢谢
请大家帮忙看看程序,谢谢了
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ah,08h
int 21h
sub al,30h
one1: cmp al,08h
jb zero1
mov dl,31h
mov ah,02h
int 21h
jmp one2
zero1:mov dl,30h
mov ah,02h
int 21h
one2: sub al,08h
cmp al,04h
jb zero2
mov dl,31h
mov ah,02h
int 21h
jmp one3
zero2:mov dl,30h
mov ah,02h
int 21h
one3: sub al,04h
cmp al,02h
jb zero3
mov dl,31h
mov ah,02h
int 21h
jmp one4
zero3:mov dl,30h
mov ah,02h
int 21h
one4: sub al,02h
cmp al,01h
jb zero4
mov dl,31h
mov ah,02h
int 21h
jmp stop
zero4:mov dl,30h
mov ah,02h
int 21h
stop: mov ah,4ch
int 21h
code ends
end start

你这太复杂了!

用移位指令逐位判断并显示会简单很多。……自己试试看。

...

看看这个图片,我在DEBUG下直接写的,简单不?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-24
判断某个位,用 TEST 指令更方便。

DATA SEGMENT
LLLL DB '0000$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX

MOV AH, 08H
INT 21H ;如果输入0~9
SUB AL, 30H ;AL=00000000~00001001

MOV BL, AL ;暂存

;高四位是0000,用不着判断,直接显示

LEA DX, LLLL
MOV AH, 9
INT 21H

;---------------------下面逐位判断8421
MOV AH, 2

MOV DL, '0'
TEST BL, 08H
JE ZERO8
INC DL
ZERO8:
INT 21H

MOV DL, '0'
TEST BL, 04H
JE ZERO4
INC DL
ZERO4:
INT 21H

MOV DL, '0'
TEST BL, 02H
JE ZERO2
INC DL
ZERO2:
INT 21H

MOV DL, '0'
TEST BL, 01H
JE ZERO1
INC DL
ZERO1:
INT 21H
;---------------------------

STOP:
MOV AH, 4CH
INT 21H
CODE ENDS
END START

===========
也可以参考我以前的回答:

http://zhidao.baidu.com/question/385419198.html
相似回答