我正在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
答案 0 :(得分:1)
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