箭头命中数字游戏。箭头未命中定义的数字

Arrow hit number game. Arrow does not hit defined number

我正在 8086 汇编器上用汇编语言开发一个简单的游戏,Windows 10. 该程序接受用户的输入。箭头出现在输入数字处,而不是水平移动到该数字,而是向下移动。我想让箭射中那个数字。我找到了 this 个游戏,但我无法理解它。请指导我哪里错了。如果可能,请提供详细说明。

.model small
.stack 100h
.data
str db "Enter number to hit: $"
arrow db "--->>$"
my db 0
.code
main proc
    mov ax, @data
    mov ds, ax

    sub cx, cx

    mov cl, 9
    mov al, '1'
    mov dh, 1
    l1:
        mov ah, 02
        mov dl, 79
        mov dh, dh
        mov bx, 0
        int 10h

        mov ah, 02
        mov dl, al
        int 21h

        inc dh
        inc al
    loop l1

    mov ah, 02
    mov dl, 0
    mov dh, 0
    mov bx, 0
    int 10h

    lea dx, str
    mov ah, 09
    int 21h

    mov ah, 01
    int 21h
    mov my, al

    mov bp, 0
    l2:
        mov ah, 02
        mov dl, bp
        mov dh, my
        mov bx, 0
        int 10h

        mov ah, 02
        mov dl, ' '
        int 21h

        lea dx, arrow
        mov ah, 09
        int 21h

        inc bp
    loop l2

    mov ah, 4ch
    int 21h
    main endp
end main
mov ah, 01
int 21h
mov my, al

这个输入给你一个字符,所以“1”到“9”。
您的代码需要使用它代表的数字,即 1 到 9。
您需要减去 48 才能执行此操作:

mov ah, 01
int 21h
sub al, '0'    ; This subtracts 48
mov my, al

mov bp, 0
l2:
...
loop l2

此循环无法正常工作,因为您忘记初始化 CX 寄存器。
知道箭头的长度和屏幕的宽度,设置CX=74就可以了:

    mov bp, 0
    mov cx, 74
l2:
    ...
    loop l2

mov dl, bp    ????????
mov dh, my

您的汇编程序将不接受 mov dl, bp 指令!您不能将 16 位寄存器移动到 8 位寄存器。
你可以在这里写的是:

mov dx, bp  ; 16-bit into 16-bit
mov dh, my  ; 8-bit into 8-bit