菜鸟问题麻烦帮下

jy01807853 2008-12-08 09:57:17

我写了个程序是显示提示..然后输入名字...
输入第一次后我已经把..Buffer的内容全部变成空白然后在显示出来..
为什么在屏幕上的显示效果没变了..我表达能力不杂..如果有什么地方说得不清楚..
我可以在详细的说下...
.model small
.stack 64
.data
para_list label byte
MaxLen db 20
ActLen db ?
Buffer db 21 dup(' ')
Prompt db 'Name? ', '$'

.code
.386
Main proc far
mov ax,@data
mov ds,ax
mov es,ax
call Clear_Screen

A20:
mov dx,0000
call Set_Cursor
call Input
cmp ActLen,00
je A30
call Enter_Model
call Display
call FlushBuffer
call Display
jmp A20
A30:
mov ax,4c00H
int 21H
Main endp

Input proc
push ax
push dx
call FlushBuffer
mov ah,09H
lea dx,Prompt
int 21H

mov ah,0aH
lea dx,para_list
int 21H
pop dx
pop ax
ret
Input endp

Enter_Model proc
movzx bx,ActLen
mov Buffer[bx],07H
mov Buffer[bx+1],'$'
mov dl,ActLen
shr dl,1
neg dl
add dl,40
mov dh,12
call Set_Cursor
ret
Enter_Model endp

Display proc
pusha
mov ah,09H
lea dx,Buffer
int 21H
popa
ret
Display endp

Clear_Screen proc
pusha
mov ax,0600H
mov bh,30
mov cx,0000
mov dx,184FH
popa
int 10H
ret
Clear_Screen endp

Set_Cursor proc
mov ah,02H
mov bh,00
int 10H
ret
Set_Cursor endp

FlushBuffer proc
pusha
mov cx,10
lea si,Buffer
B30:
mov WORD ptr [si],2020H
add si,2
loop B30
mov BYTE ptr [si],'$'
popa
ret
FlushBuffer endp
end Main
...全文
156 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtdumpling 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jy01807853 的回复:]
谢谢大家的帮助。。、
引用
改这个地方就很容易看出来了,
你这里的输出在前一次输出的后面,又是空格,所以看不到了

7楼的朋友。。我要的效果也不是这个。。
可能是我的表达有问题。。
我的意思是说。。在我提示在一次输入名字的时候。。清楚了BUFFER
就是要在屏幕上显示空白。。就是开始输入的名字。。。
[/Quote]
我那样改的目的是让你知道问题在哪里?
你输出的空格在之前输出字符串之后,所以就不会有清除的效果啦!
xiaopoy 2008-12-10
  • 打赏
  • 举报
回复
   A20:
mov dx,0000
call Set_Cursor
call Clear_Screen ;设置了光标,但没有清屏,自然看不到想要的输出
call Input
cmp ActLen,00
je A30
call Enter_Model
call Display
call FlushBuffer
call Display
jmp A20
A30:


Input proc
push ax
push dx
call FlushBuffer
mov ah,09H
lea dx,para_list;颠倒了
int 21H

mov ah,0aH
lea dx,Prompt;颠倒了
int 21H
pop dx
pop ax
ret
cnzdgs 2008-12-10
  • 打赏
  • 举报
回复
程序中的push、call、int指令都需要消耗占空间,另外,在程序运行过程中还不断有硬中断发生,在中断处理程序中也需要使用占空间,所以栈空间至少也要有上百字节。在实际编程应用时,建议至少分配1KB空间,对于复杂的程序还要更大。
当栈空间不足时,引起的问题是很难查的,所以才说先把栈空间加大,然后再看有没有问题。
jy01807853 2008-12-10
  • 打赏
  • 举报
回复
我试着一步一步的跟踪结果还是一样,,我想实现的效果是,
第1次提示输入名字,输入后按了回车,马上提示第2次输入名字,,这个时候
清理的BUFFER让屏幕上,,开始输入的名字消失掉,,意思就是输入和显示需要同步,,
可能是开始我没说清楚,,我已经想了很久可惜还是没有效果,,期待前辈指点!!
TO 漫天星前辈,,谢谢你的指点,,我以后会注意你说的问题的!!
jy01807853 2008-12-10
  • 打赏
  • 举报
回复

To 15楼谢谢你的提醒,,麻烦你看了下我的代码,,,也怪我自己表达能力不行,让大家没懂我说的什么
我想要的结果确实是需要ClearScreen,,而且我的这个函数也写错了,,程序执行顺序中
还少了一个延迟函数...问题已经解决,,谢谢各位的热心帮助,,分少,见谅!
xtdumpling 2008-12-09
  • 打赏
  • 举报
回复
    FlushBuffer    proc
pusha
mov cx,10
lea si,Buffer
B30:
; mov WORD ptr [si],2020H
mov WORD ptr [si],3030H
add si,2
loop B30
mov BYTE ptr [si],'$'
popa
ret
FlushBuffer endp

改这个地方就很容易看出来了,
你这里的输出在前一次输出的后面,又是空格,所以看不到了
cnzdgs 2008-12-09
  • 打赏
  • 举报
回复
先把栈空间加大,排除这方面的影响,然后再看是否有问题。
android2008 2008-12-09
  • 打赏
  • 举报
回复
友情up
android2008 2008-12-09
  • 打赏
  • 举报
回复
up
cnzdgs 2008-12-09
  • 打赏
  • 举报
回复
别的先不说,stack 64太小,你一个pusha就16字节。
jy01807853 2008-12-09
  • 打赏
  • 举报
回复
意思就是说我定义的栈空间太小,,,以此压入后就出现。。超出空间
是 吗 、??
jy01807853 2008-12-09
  • 打赏
  • 举报
回复
自己顶..期待ING!~~~~~~~
jy01807853 2008-12-09
  • 打赏
  • 举报
回复
是我说得不清楚嘛..如果我说得不清楚,,我可以在补充..
麻烦前辈些..帮下我嘛!!
jy01807853 2008-12-09
  • 打赏
  • 举报
回复
我需要的效果就是。。第一次提示输入名字后。。
输入的名字,,接着如果在次提示输入名字的时候。。清理BUFFER
使他象第一次。。出现提示输入名字那样。。我表达能力不行。。说地不清楚。。
我可以继续补充!
jy01807853 2008-12-09
  • 打赏
  • 举报
回复
谢谢大家的帮助。。、
[Quote]
改这个地方就很容易看出来了,
你这里的输出在前一次输出的后面,又是空格,所以看不到了
[/Quote]
7楼的朋友。。我要的效果也不是这个。。
可能是我的表达有问题。。
我的意思是说。。在我提示在一次输入名字的时候。。清楚了BUFFER
就是要在屏幕上显示空白。。就是开始输入的名字。。。
。。。
TO 满天星前辈。。我理解的pusha指令是把所有通用寄存器的内容。。压入栈
也就16个吧。。我定义的64杂不对了?在我进入过程的时候用了一次pusha在我
出过程的时候。。我已经把内容弹出来了。。SP已经回到了开始的位置吧。。这样定义64没错吧。。
我试了修改得更大效果一样!可能是我对基本指令的理解不清楚。。麻烦前辈给我说下吧。。谢谢!
jy01807853 2008-12-08
  • 打赏
  • 举报
回复
麻烦那位好心人.帮下我吧...

21,459

社区成员

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

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