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
eax=1
移动到每个int0x80
的前面,只是为了让源代码更容易阅读(本地)。非常感谢,我现在明白了ecx无论发生什么都会倒计时。它必须倒计时,这就是工作原理。您将其初始化为21。很难想象你还期待什么。