高手大哥大姐们,求命呀!求求小弟吧!

dianhui 2004-12-13 09:05:36
我用汇编做了一个程序:做一个电话本,先接收输入50个人名,然后再输入该人的电话号码,输入完后再进行排序,最后还可以查找该人或其电话号码!
可是现在我第一步都实现不了呀!

下面是从那个完整得程序中取得一部分,也既接收输入得一部份,这里是先将姓名放在一个临时区里面!


下面是代码:

在这里我用了一个call showmess 来跟踪程序得运行到的位置,其中

mov bh,0
mov bl,act_name
mov cx,21
sub cx,bx
b20:

mov star_name[bx],20h
inc bx

;call showmess

loop b20
这部分是用来将不足够20个字节人名的部分填上空白!
现在得问题是我发现其根本就没有运行到这里来!而且呢act_name这个值好像也没有让INT21这个中断收到,因为我发现我可以输入大约255个字符光标才不动了!再按回车就死了!
你们机子上有MASM 得话就可以帮我调试一下吧!谢谢谢谢谢谢谢谢!

大哥大姐们!
你们说说我应该怎么做呀!
小弟在这里先谢谢了!



data segment
namepar label byte
max_name db 21
act_name db ?
star_name db 21 dup(?)

show db 'I am here',24h
huanhan db 13,10,24h
mess1 db 'Input name:',24h

tel_tab db 50 dup(28 dup(' ') )
data ends
prognam segment

main proc far

assume cs:prognam, ds: data, es:data
push ax
push bx
push cx
push dx

mov ax,data
mov ds,ax
mov es,ax

cld
lea di,tel_tab


call input_name
call showmess


Exit:
pop ax
pop bx
pop cx
pop dx

ret
main endp


input_name proc near
;call showmess

mov ah,09
lea dx,mess1
int 21h
;call crlf

;call showmess


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

call crlf

;call showmess

mov bh,0
mov bl,act_name
mov cx,21
sub cx,bx
b20:

mov star_name[bx],20h
inc bx

;call showmess

loop b20
ret

input_name endp




crlf proc near

mov ah,09
lea dx,huanhan
int 21h
ret

crlf endp


showmess proc near

mov ah,09
lea dx,show
int 21h
call crlf
ret

prognam ends
end

...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
clumsy 2004-12-13
  • 打赏
  • 举报
回复
你在前面的代码被运行到了. 但是, 你程序开始的一组 push 指令, 和最后的那组 pop 指令配对有问题, 应该是先 push 的, 后 pop, 你顺序反了; 程序结束使用的是 ret(f), 但并没有将 PSP:0000 压栈, 所以, 还是建议用 mov ah, 4ch int 21h 的方法来 "结束程序并返回到 DOS"

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧