Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/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
Assembly Cmpsd没有像我预期的那样工作_Assembly_X86 - Fatal编程技术网

Assembly Cmpsd没有像我预期的那样工作

Assembly Cmpsd没有像我预期的那样工作,assembly,x86,Assembly,X86,我对这段代码感到非常困惑: .section .data value1: .ascii "This is a test string" value2: .ascii "This is a test String" .section .text .globl main main: movl $1, %eax leal value1, %esi leal value2, %edi movl $21, %e

我对这段代码感到非常困惑:

.section .data
    value1:
            .ascii "This is a test string"
    value2:
            .ascii "This is a test String"
.section .text
.globl main
main:
    movl $1, %eax
    leal value1, %esi
    leal value2, %edi
    movl $21, %ecx
    cld
    repe cmpsb
    je equal
    movl %ecx, %ebx
    int $0x80
equal:
    movl $0, %ebx
    int $0x80
输出如下:

es@elegy:~/ATT$ ./cmpstest2
es@elegy:~/ATT$ echo $?
5

为什么ECX包含5个?我期望的是15,从字符串的开头开始计数。

ecx
21
开始倒数。是的,CPU通常按照规范工作,而不是程序员的期望。调试器也可能有帮助(或者使用GNU标准gdb,或者对于您可以尝试的小任务)。要获取字符偏移量,请尝试
subl value1,%esi
(我不确定gas语法,但您明白了吗?)。我会将
eax=1
移动到每个
int0x80
的前面,只是为了让源代码更容易阅读(本地)。非常感谢,我现在明白了ecx无论发生什么都会倒计时。它必须倒计时,这就是工作原理。您将其初始化为21。很难想象你还期待什么。