saber lily和梅林:汇编求救

来源:百度文库 编辑:高考问答 时间:2024/04/27 18:20:39
题目:从键盘上接收一个4位的十六进制数,并在终端上现实与它等值的二进制数。
下面是我编的代码,不知道哪里错了,希望各位高手帮我改正~

stacks segment stack
db 128 dup(0)
stacks ends

data segment
n equ 4
buf db n+1
count db 0
char db n+1 dup(24h)
last db n+1 dup(0)
input db 'Input the number:',0dh,0ah,'$'
enter db 0dh,0ah,'$'
output db 'Result is:',0dh,0ah,'$'
data ends

code segment
assume cs:code,ss:stacks,ds:data
start: mov ax,data
mov ds,ax
lea dx,input
mov ah,9
int 21h
lea dx,buf
mov ah,0ah
int 21h
lea dx,enter
mov ah,9
int 21h
mov si,0
mov cx,4
l0: mov bl,char[si]
cmp bl,30h
ja l01
l01: cmp bl,39h
jb l00
sub bl,7h
l00: sub bl,30h
mov last[si],bl
inc si
dec cx
cmp cx,0
jnz l0
lea dx,output
mov ah,9
int 21h
mov bl,byte ptr [last]
mov cl,32
l: test bl,80h
jnz l1
mov dl,'0'
mov ah,2
int 21h
jmp l2
l1: mov dl,'1'
mov ah,2
int 21h
l2: shl bl,1
dec cl
jnz l
mov ah,4ch
int 21h
code ends
end start

【注】本程序中十六进制数为小写形式,如fff0h.

stacks segment stack
s db 20 dup(0)
stacks ends

data segment

n equ 4

char db n+1 ;输入内存字符撼迩?φ庋?ㄒ?
db 0
db n+1 dup(0)

input db 'Input the number:',0dh,0ah,'$'
enter db 0dh,0ah,'$'
output db 'Result is:',0dh,0ah,'$'
data ends

code segment
assume cs:code,ss:stacks,ds:data
start: mov ax,data
mov ds,ax
lea dx,input
mov ah,9
int 21h

lea dx, char
mov ah,0ah
int 21h

lea dx,enter
mov ah,9
int 21h

mov si,2
mov cx,4
l0: mov bl,char[si]
cmp bl,30h
jb start

cmp bl,39h
jbe l00

cmp bl,61h
jb start

cmp bl,66h
ja start

sub bl,57h
jmp l333

l00: sub bl,30h

l333:mov char[si],bl
inc si
dec cx

jnz l0

lea dx,output
mov ah,9
int 21h

mov si,2
l000:mov bl,char[si]

mov ch,4
mov cl,4
shl bl,cl

ll00:test bl,80h
jnz l1
mov dl,'0'
mov ah,2
int 21h
jmp l2
l1: mov dl,'1'
mov ah,2
int 21h
l2: shl bl,1
dec ch
jnz ll00
inc si
cmp si,6
jne l000

mov ah,4ch
int 21h

code ends
end start