我正在尝试在8086程序集上构建针对计算机的tic tac toe游戏,但每当我运行它时,TD都会遇到这个特定的命令:
mov dx,0
此命令位于函数中(第三行):
reboard proc
mov al, 0
mov bx, 0
mov dx, 0
mov cx, bp
rowdata:
cmp arr[bx], 'X'
je rowX
cmp arr[bx], 'y'
je rowY
jmp rowQm
rowX:
add al, 100
jmp rowQm
rowY:
add al, 1
rowQm:
inc bx
loop rowdata
mov cx, bp
add si, dx
mov arr[si + 3], al
sub si, dx
mov al, 0
inc dx
cmp dx, bp
jnz rowdata
mov dx, 0
mov bx, dx
coldata:
cmp arr[bx], 'X'
je colX
cmp arr[bx], 'Y'
je colY
jmp colQm
colX:
add al, 100
jmp colQm
colY:
add al, 1
colQm:
add bx, bp
loop coldata
add si, bp
add si, dx
mov arr[si + 3], al
sub si , dx
sub si, bp
inc dx
mov bx, dx
mov al, 0
mov cx, bp
dec cx
cmp dx, bp
jnz coldata
ret
reboard endp
此外,应用了函数中的两个第一个命令,但不对寄存器进行任何更改。
这不是第一次发生这个问题,它也发生在另一个函数中(在同一个程序中),同样 - 函数中的前两个命令不起作用。命令是:
mov dl,13
我试图将光标向下移动一行。
我也在一个新程序上运行了这个特定的功能,它从头到尾都很完美,我很无能为力,无论如何这是我试过的新程序:
注意:'X'的值为88,'Y'的值为89。
dseg segment
arr db 63, 63, 89, 88, 89, 63, 63, 88, 89
dseg ends
cseg segment
assume cs:cseg, ds:dseg
a proc
mov al, 0
mov bx, 0
mov dx, 0
mov cx, bp
rowdata:
cmp arr[bx], 'X'
je rowX
cmp arr[bx], 'Y'
je rowY
jmp rowQm
rowX:
add al, 100
jmp rowQm
rowY:
add al, 1
rowQm:
inc bx
loop rowdata
mov cx, bp
add si, dx
mov arr[si + 3], al
sub si, dx
mov al, 0
inc dx
cmp dx, bp
jnz rowdata
mov dx, 0
mov bx, dx
coldata:
cmp arr[bx], 'X'
je colX
cmp arr[bx], 'Y'
je colY
jmp colQm
colX:
add al, 100
jmp colQm
colY:
add al, 1
colQm:
add bx, bp
loop coldata
add si, bp
add si, dx
mov arr[si + 3], al
sub si , dx
sub si, bp
inc dx
mov bx, dx
mov al, 0
mov cx, bp
cmp dx, bp
jnz coldata
ret
a endp
Begin:
mov ax, dseg
mov ds, ax
mov bp, 3
mov si, 9
call a
int 3h
cseg ends
end begin
任何想法?
答案 0 :(得分:0)
我明白了:
TD被冻结的原因是我调用函数的位置远离函数本身。我只是将函数复制到一个更近的位置(在代码中)到我称之为的地方。这也是当我在一个新程序上运行它时,函数从头到尾完美运行的原因,在另一个程序中,函数和我称之为函数的地方之间没有太多不同的空间。