将 ASM 转换为 C?
Convert ASM to C?
我正在尝试将以下 ASM 转换为 C,但我无法理解跳转语句的作用。有人可以帮我看看到底发生了什么吗?
func_a:
.LFB0:
.cfi_startproc
testq %rdx, %rdx
js .L3
movslq %edi, %rdi
movslq %esi, %rsi
addq %rdi, %rsi
cmpq %rdx, %rax
jg .L4
rep ret
.L3:
movl [=10=], %eax
ret
.L4:
movq %rdx, %rax
.p2align 4,,4
ret
.cfi_endproc
js
如果 %rdx
的符号 (MSB) 已设置(即如果 %rdx
为负)则跳转到 .L3
。
jg
如果%rax
大于%rdx
则跳转到.L4
(AT&T语法,操作数颠倒)。
剩下的代码符号将%edi
和%esi
扩展为64位,然后相加
我正在尝试将以下 ASM 转换为 C,但我无法理解跳转语句的作用。有人可以帮我看看到底发生了什么吗?
func_a:
.LFB0:
.cfi_startproc
testq %rdx, %rdx
js .L3
movslq %edi, %rdi
movslq %esi, %rsi
addq %rdi, %rsi
cmpq %rdx, %rax
jg .L4
rep ret
.L3:
movl [=10=], %eax
ret
.L4:
movq %rdx, %rax
.p2align 4,,4
ret
.cfi_endproc
js
如果 %rdx
的符号 (MSB) 已设置(即如果 %rdx
为负)则跳转到 .L3
。
jg
如果%rax
大于%rdx
则跳转到.L4
(AT&T语法,操作数颠倒)。
剩下的代码符号将%edi
和%esi
扩展为64位,然后相加