组装中刽子手的打印图

Print figure of hangman in assembly

有没有更好的打印刽子手模型的方法?

FIG0    DB 0DH,0AH,' +=======+',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG1    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG2    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/        |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG3    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/ \      |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG4    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG5    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG6    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'/        |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG7    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'/ \      |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH,'$'
FIG8    DB 0DH,0AH,' +=======+',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'   \O/   |',0DH,0AH,'    |    |',0DH,0AH,'    |    |',0DH,0AH,'   / \   |',0DH,0AH,' ========+',0DH,0AH,'$'

这是一些不错的数字。 https://youtu.be/e2S_POws3DQ?t=42s

如果你赢了比赛,他跳起来的样子真的很酷。我尝试使用 call Clrscr 让他跳起来,但没有成功。

首先:不要更改您的环境(Windows、32 位、Console、MASM、Irvine32)!你会遇到很多建议你改变它的人(用 BIOS、MS-DOS、Linux 做。用 GDI、OpenGL、DirectX 做。等等。)。您可能会在另一个环境中更好地解决问题,但您会遇到新问题,这些问题可以通过改变环境来解决。最后你将退出整个项目 - 未完成。

"$"是MS-DOS字符串的终止符。在 Windows/Irvine32 中,您处理空终止。

甚至 Windows 的控制台模式也相当快。所以你需要 Irvine 的 Delay 函数来观看动画:

INCLUDE Irvine32.inc

.DATA

FIG0    DB 0DH,0AH,' +=======+',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG1    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG2    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/        |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG3    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/ \      |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG4    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG5    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG6    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'/        |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG7    DB 0DH,0AH,' +=======+',0DH,0AH,' |       |',0DH,0AH,' O       |',0DH,0AH,'/|\      |',0DH,0AH,' |       |',0DH,0AH,'/ \      |',0DH,0AH,'         |',0DH,0AH,' ========+',0DH,0AH, 0
FIG8    DB 0DH,0AH,' +=======+',0DH,0AH,'         |',0DH,0AH,'         |',0DH,0AH,'   \O/   |',0DH,0AH,'    |    |',0DH,0AH,'    |    |',0DH,0AH,'   / \   |',0DH,0AH,' ========+',0DH,0AH, 0

.CODE

main PROC

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG0
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG1
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG2
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG3
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG4
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr
    lea edx, FIG5
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG6
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG7
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    mov eax, 1000                       ; 1000 milliseconds = 1 second
    call Delay                          ; Irvine32: Delay ECX milliseconds
    call ClrScr                         ; Irvine32; Clear Screen
    lea edx, FIG8
    call WriteString                    ; Irvine32: Write a string pointed to by EDX

    exit                                ; Irvine32: ExitProcess

main ENDP

END main

ClrScr is not ideal for your purpose since it clears the whole screen including the inputs. Use Irvine's GotoXY。写空格删除旧图