我試圖建立在裝配8086對電腦的井字遊戲,但每當我運行的TD卡在這個特定的命令:裝配8086 - 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
有什麼想法嗎?
也許inc dx溢出並設置一個標誌,以便cmp dx,bp始終跳轉,使mov dx,0無法訪問。 –
「卡住了」是什麼意思? – Ferruccio
難道是你在寫代碼段嗎?我真的不知道你的意思是「被卡住」,所以我只是猜測。不過,如果你不是在源代碼中調試,而是在內存中調試,你應該看看指令是否已經改變。 – Devolus