小さな問題があります。
これは私のコードです:
cmpstr:
pusha
xor cx, cx
mov ax, ds
push ax
mov ax, si
push ax
call strlen
mov dx, ax
mov ax, es
mov ds, ax
mov si, bx
call strlen
cmp al, dl
jnz .fail
pop ax
mov si, ax
pop ax
mov ds, ax
.loop:
push bx
mov al, byte [es:bx]
mov bl, byte [ds:si]
cmp al, bl
jne .fail
cmp bl, 0
jz .suc
pop bx
add bx, 1
inc si
inc cx
jmp .loop
.fail:
mov al, 'C';
mov ah, 0Eh
int 10h
popa
mov ax, 0
jmp .end
.suc:
mov al, 'D';
mov ah, 0Eh
int 10h
popa
mov ax, 1
.end:
ret
このプロシージャは 2 つの文字列を比較し、文字列 (first on 、second ) が同じ場合は 1mov
を返し、異なる場合は 0 を返します。私の問題は、プロシージャ コールが実行される前にコマンドが実行され、文字 'D' が出力されている (比較が成功した) が、プロシージャ コール後のコマンドが機能しないことです。その問題はこの手順のどこかにあるに違いないと思います。ここで何が悪いのか誰か知っていますか?ax
es:bx
ds:si