21,459
社区成员
发帖
与我相关
我的任务
分享
我写了个程序是显示提示..然后输入名字...
输入第一次后我已经把..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
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
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