主题:又找到一个程序,一步一步的读
风一般的女孩
[专家分:50] 发布于 2006-11-25 20:03:00
从键盘接收一个4位的16进制数,并在终端上显示与它等值的2进制数
data segment
buf db 4,?
ascstg db 10 dup(?)
integer dw 0
promt db 'Input hexadecimal(4):$'
dsperr db 0dh,0ah,'error!no hexadecimal!$'
data ends
code segment use16
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset promt
mov ah,09h
int 21h
mov dx,offset buf
mov ah,oah
int 21h
mov cl,4
lea si,ascstg
mov al,[si]
cld
xor dx,dx
mov bl,0
mov ch,buf[1]
cmp ch,0
jz exit
cmp al,'+'
jnz next
inc si
dec ch
jmp conv
next: cmp al,'-'
jnz conv
inc si
dec ch
mov bl,0ffh
conv: cmp ch,0c
jz store
lodsb
cmp al,'0'
jb error
cmp al,'9'
ja next1
sub al,30h
jmp short rotate
next1: call a_to_f
jc error
rotate: shl dx,cl
or dl,al
dec ch
jmp short conv
store: cmp ,bl,0
jz lp
neg dx
lp: mov integer,dx
exit: mov dx,offset dsperr
mov ah,09h
int 21h
jmp exit
a_to_f proc
cmp al,'a'
jb nohex
cmp al,'f'
ja next2
sub al,37h
jmp hex
next2: cmp al,'a'
jb nohex
cmp al,'f'
ja nohex
sub al,547h
hex: clc
ret
nohex: stc
ret
a_to_f endp
code ends
end start
回复列表 (共12个回复)
沙发
风一般的女孩 [专家分:50] 发布于 2006-11-25 20:03:00
程序有好多地方看不懂 只能一步一步的读 不懂的就请教大家
mov dx,offset promt
mov ah,09h
int 21h
这是09调用吧(以前在论坛问过这个 所以知道) 上面3句话的作用是不是将 promt的偏移地址在屏幕上面显示出来?
mov dx,offset buf
mov ah,oah
int 21h
这3句又是什么意思呢(估计是什么oa调用,是吗? 有什么作用)
板凳
lovevertigo [专家分:40] 发布于 2006-11-25 20:29:00
呵呵,你得签名好有个性啊,我正在学习中,等半个月后我再看这道题,也许会了
3 楼
风一般的女孩 [专家分:50] 发布于 2006-11-25 20:35:00
a za a za fighting
4 楼
lovevertigo [专家分:40] 发布于 2006-11-25 20:40:00
这个啥意思呀,看不懂唉。。。
5 楼
书剑一心 [专家分:330] 发布于 2006-11-25 21:33:00
第一个是你说的那样.
第二个就是叫你输入,放入buf中.个人认为这个比较有用,应该好好了解一下.
6 楼
风一般的女孩 [专家分:50] 发布于 2006-11-25 22:06:00
buf db 4,? 这个定义什么怎么定义的 是不是 先定义了一个4 然后下一个存储单元是空的,是为buf预留一个存储单元 是这样的吗
这里为什么要先定义一个4? 有什么用?
7 楼
bruce1914 [专家分:250] 发布于 2006-11-25 23:43:00
这程序问题相当多
举几个大家讨论下:
lea si,ascstg
mov al,[si]
这里ascstg都还没被赋值
exit: mov dx,offset dsperr
mov ah,09h
int 21h
jmp exit
这个似乎是个死循环
8 楼
风一般的女孩 [专家分:50] 发布于 2006-11-26 00:26:00
ascstg db 10 dup(?)
这个就是 定义预留10个存储单元给ascstg吧 是不是已经固定是哪10个存储单元预留给ascstg 难道不算已经赋值了?
9 楼
w2345 [专家分:1090] 发布于 2006-12-23 17:08:00
[quote]程序有好多地方看不懂 只能一步一步的读 不懂的就请教大家
mov dx,offset promt
mov ah,09h
int 21h
这是09调用吧(以前在论坛问过这个 所以知道) 上面3句话的作用是不是将 promt的偏移地址在屏幕上面显示出来?[/quote]
当然不是!是把“从promt的偏移地址开始的字符串在屏幕上面显示出来”
[quote]
mov dx,offset buf
mov ah,oah
int 21h
这3句又是什么意思呢(估计是什么oa调用,是吗? 有什么作用)[/quote]
从键盘读入字符,在屏幕显示,并送入buf;buf的首字节为buf的长度-2,
次字节为实际接收的字符数
10 楼
bcahzvip [专家分:6040] 发布于 2006-12-24 10:30:00
有几个错误
sub al,547h ;= =;
jb error ;error 在哪里?
mov ah,oah ;应该是这个吧 0ah
我来回复