- 论坛徽章:
- 0
|
最近在学AT&T汇编,在cmps指令这里遇到了一点儿问题。我用 repe cmpsb 比较两个字符串,在比较完第一个字符T后为什么ZF不是1而是0呢?
但在最后一个字符比较完ZF就被置位了,这是为什么,谢谢各位解答。
汇编代码如下:
- .section .data
- value1:
- .ascii "This"
- value2:
- .ascii "This"
- .section .bss
- .section .text
- .globl _start
- _start:
- leal value1, %esi
- leal value2, %edi
- cld
- movl $4, %ecx
- repe cmpsb
- je equal
- movl $1, %eax
- movl $0, %ebx
- int $0x80
- equal:
- movl $1, %eax
- movl $1, %ebx
- int $0x80
复制代码 gdb调试:
- (gdb) b 14
- Breakpoint 1 at 0x8048086: file test.s, line 14.
- (gdb) r
- Starting program: /home/suntao/asm/test
- Breakpoint 1, _start () at test.s:14
- 14 repe cmpsb
- (gdb) p $eflags
- $1 = [ AF SF IF ]
- (gdb) n
- Breakpoint 1, _start () at test.s:14
- 14 repe cmpsb
- (gdb) p $eflags
- $2 = [ AF SF IF RF ]
复制代码 |
|