主题:怎么从键盘接收一个四位的十六进制数,并在终端上显示与他等值的二进制数
ally530
[专家分:0] 发布于 2005-11-25 12:36:00
[font=隶书]怎么从键盘接收一个四位的十六进制数,并在终端上显示与他等值的二进制数[/font][em2]
回复列表 (共5个回复)
沙发
Frigate [专家分:360] 发布于 2005-11-25 20:40:00
data segment
array db 100 dup(?)
messa db 'input a number',0ah,0dh,'$'
messb db 'wrong number',0ah,0dh,'$'
messc db 'press Esc to exit,Enter to continue',0ah,0dh,'$'
messd db 0ah,0dh,'$'
data ends
stack segment stack
db 100 dup(?)
stack ends
code segment
assume cs:code, ds:data,ss:stack
start:
mov ax,data
mov ds,ax
program:
mov ah,9
mov dx,offset messc
int 21h
mov ah,1
int 21h
cmp al,1bh
je exit
mov ah,9
mov dx,offset messa
int 21h
mov cx,4
mov bx,offset array
hhe :
mov ah,1
int 21h
mov [bx],al
add bx,1
loop hhe
mov ah,9
mov dx,offset messd
int 21h
mov cx,4
mov bx,offset array
sign:
mov al,[bx]
cmp al,'0'
jb erro
cmp al,'f'
ja erro
cmp al,'9'
ja char
sub al,'0'
jmp shuchu
char:
or al,20h
cmp al,'a'
jb erro
cmp al,'f'
ja erro
sub al,'a'
add al,10
shuchu:
push cx
mov cx,4
shl ax,cl
lops:
rcl al,1
jc out1
out0:
push ax
mov dl,'0'
mov ah,2
int 21h
pop ax
loop lops
jmp hehe
out1:
push ax
mov dl,'1'
mov ah,2
int 21h
pop ax
loop lops
hehe:
pop cx
add bx,1
loop sign
mov ah,9
mov dx,offset messd
int 21h
jmp program
erro:
mov dx,offset messb
mov ah,9
int 21h
jmp program
exit:
mov ah,4ch
int 21h
code ends
end start
板凳
ally530 [专家分:0] 发布于 2005-11-26 18:06:00
谢谢啊
3 楼
Frigate [专家分:360] 发布于 2005-11-27 19:32:00
错误的地方都改了,不过只能执行像 a2f4 这样两个字节的,如果想任意长的,稍微改一下
就可以了,如果要那样的,再跟我说吧,我再改
现在上面的程序已经编译执行成功
花了我一个小时时间调试
4 楼
ally530 [专家分:0] 发布于 2005-11-28 18:46:00
真的谢谢你了,
5 楼
jinyuxlc [专家分:120] 发布于 2005-12-13 20:52:00
我这里也有一个,版主可以看看
.model small
.386
.code
main proc far
start:
push ds
mov ax,0
push ax
mov ax,0
mov cx,4
mov dx,0
input:
mov ah,1H
int 21H
cmp al,30H
jl input
cmp al,39H
jle s
cmp al,61H
jl input
cmp al,66H
jg input
sub al,27H
s:
sub al,30H
add dl,al
cmp cx,1H
je f
rol dx,4
f:
loop input
exit:
call print
ret
main endp
print proc near
mov cx,10H
p:
rol dx,1
push dx
and dx,1
add dx,30H
mov ah,2
int 21H
pop dx
loop p
ret
print endp
end start
我来回复