Стрелка попала в число игр.Стрелка не попадает в указанное число - PullRequest
0 голосов
/ 10 февраля 2019

Я работаю над простой игрой на ассемблере на ассемблере 8086, Windows 10. Программа принимает данные от пользователя.Стрелка появляется на входном номере, вместо того, чтобы идти к этому номеру по горизонтали, она идет вниз.Я хочу, чтобы стрелка попала в это число.Я нашел эту игру, но не могу ее понять.Пожалуйста, ведите меня, где я не прав.Если возможно, предоставьте подробное объяснение.

Screenshot

.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

1 Ответ

0 голосов
/ 10 февраля 2019
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
...