Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 字符串比较不起作用_String_Assembly_X86 - Fatal编程技术网

String 字符串比较不起作用

String 字符串比较不起作用,string,assembly,x86,String,Assembly,X86,我有个小问题 这是我的代码: 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]

我有个小问题

这是我的代码:

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

如果字符串(第一个在
es:bx
,第二个在
ds:si
)相同或不同,此过程应比较两个字符串并返回(
mov
ax
)1。我的问题是,执行过程调用之前的命令,正在打印字母“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转到陌生的地方。

您是否尝试使用调试器单步执行代码?我没有任何16位的调试器。我的问题是函数没有返回。它又回到了回路。