我有一个程序,它要求用户输入一个字符,将该字符移动到屏幕的最右侧,然后我需要把它移回左边,我知道怎么移到右边,但是我不知道怎么把它移回左边。目前,当试图把它带到左边时,它会打印字符中的整行,而不是将其遍历回屏幕的左侧。
include PCMAC.INC
.model small
.586
.stack 100h
.data
prompt DB "Please enter a character is be printed: $"
userCh DB ?
.code
delay proc
push cx ;;save the caller's CX register
mov ecx,150000
for_2: nop
dec ecx
jnz for_2
pop cx ;; restore caller's CX
ret
delay endp
main proc
_Begin
_PutStr prompt
_GetCh
mov userCh, al
_PutCh 13, 10
mov cx,79
for_1: _PutCh userCh ;;print left to right
call delay
_PutCh 8,32
dec cx
jnz for_1
for_3: ;; print right to left
_PutCh 8
_PutCh userCh
call delay
_PutCh 8
inc cx
cmp cx, 79
jne for_3
_Exit 0
main endp
end main
1条答案
按热度按时间ocebsuys1#
您的尝试已接近所需!
使用您的宏并使用@ecm在她的第二个评论中给您的建议,我们得到:
现在看起来是骗人的。对于 _PuctCh 宏的每个参数,宏的扩展将在程序中插入几行代码(
mov dl, ?
mov ah, 02h
int 21h
)。下一个替代解决方案是使用BIOS在输出字符之前定位光标,BIOS字符输出函数不会自动推进光标。因为光标不是由该函数推进的,所以您可以使用所有80个位置,而不是之前的前79个位置。
代码做的第一件事是确定游标所在的行。该行(在DH中)在整个循环中保持不变。
另一种版本更短,更适合您的需要。