字符串比较不起作用
问题描述:
我有一个小问题。字符串比较不起作用
这是我的代码:
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
到ax
)1,如果字符串(先上es:bx
,第二ds:si
)相同或0,如果它们是不同的。我的问题是执行过程调用之前的命令,字母'D'正在打印(比较成功),但过程调用后的命令不起作用。我认为这个问题一定在这个程序的某个地方。有人知道这里有什么问题吗?
答
当你离开的循环与条件的一个跳跃
.loop:
push bx
mov al, byte [es:bx]
mov bl, byte [ds:si]
cmp al, bl
jne .fail
cmp bl, 0
jz .suc
已经推BX,但你永远不弹出它。这将使下一个RET进入陌生的地方。
你是否尝试用调试器逐步执行代码? – 2012-07-21 08:00:11
我没有任何16位调试器 – user35443 2012-07-21 09:26:55
我的问题是只是功能没有返回。它正在返回到循环。 – user35443 2012-07-21 09:27:40