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