我正在尝试将以下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 $0, %eax
ret
.L4:
movq %rdx, %rax
.p2align 4,,4
ret
.cfi_endproc
最佳答案
如果设置了js
的符号(MSB)(即.L3
为负),则%rdx
跳转到%rdx
。
如果jg
大于.L4
(AT&T语法,操作数相反),则%rax
跳转到%rdx
。
其余代码符号将%edi
和%esi
扩展到64位,然后将它们加在一起。