在emu8086中打印在屏幕上移动的ascii字符&删除字符

时间:2018-01-16 04:03:58

标签: assembly emu8086

汇编和emu8086相当新,我试图让ASCII字符(星号*)从某个点开始在不同方向上移动屏幕。

我可以让星号向右移动(请参阅代码段),但是如何让它向左移动?上,下?

count = 0

for i in unique_digits:

    if count.has_key(i):

        count[i] += 1
else:

    count[i] = count + 1

此外,我一直在尝试在输出后立即删除*,因此看起来它正在移动,但正如您从注释部分中看到的那样,它无法正常工作。我该怎么办?

1 个答案:

答案 0 :(得分:1)

  

此外,我一直在尝试在输出后立即删除*,因此看起来它正在移动,但正如您从评论部分中看到的那样,它无效。

;mov dl, 20h ;space
;int 21h 
;mov dl, 08h
;int 21h

如果你先输出退格(8)然后输出空格(32),这就接近成功。

mov dl, 08h
int 21h
mov dl, 20h ;space
int 21h 
  

我试图让ASCII字符(星号*)从某个点开始在不同的方向上移动屏幕。

执行这些操作的程序遵循以下步骤:

  • 定位光标
  • 画一个星号
  • 等一下
  • 通过绘制空格
  • 删除星号
  • 修改列或行(或两者!)
  • 从顶部重复

此示例从左向右移回:

Top:
 mov  dh, Row
 mov  dl, Column
 mov  bh, 0
 mov  ah, 02h    ;SetCursor
 int  10h

 mov  cx, 1
 mov  bh, 0
 mov  al, "*"
 mov  ah, 0Ah    ;DrawCharacter
 int  10h

 mov  dx, 0      ;Approximately 1/8 second
 mov  cx, 2
 mov  ah, 86h    ;Delay
 int  15h

 mov  cx, 1
 mov  bh, 0
 mov  al, " "
 mov  ah, 0Ah    ;DrawCharacter
 int  10h

 mov  al, Sense  ;Is +1 to go right, is -1 to go left
 test al, al
 js   GoLeft
GoRight:
 inc  Column
 cmp  Column, 80
 jb   Top
 mov  Column, 78
 neg  Sense
 jmp  Top
GoLeft:
 dec  Column
 jns  Top
 mov  Column, 1
 neg  Sense
 jmp  Top

Column db 20
Row    db 12
Sense  db -1

这应该可以让您了解如何解决问题。

  • 也许您可以介绍2个方向变量 SenseX SenseY
  • 也许您可以让用户决定方向应该是什么?
  • ...