我有一个小问题。
这是我的代码:
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
此过程应比较两个字符串并返回 ( mov
to ax
) 1,如果字符串(第一个es:bx
,第二个ds:si
)相同,则返回 0,如果它们不同。我的问题是执行过程调用之前的命令,正在打印字母“D”(比较成功)但过程调用之后的命令不起作用。我认为这个问题一定是在这个过程中的某个地方。有人知道这里有什么问题吗?