アセンブリコードをCコードに変換しようとしていますが、sarqという1つの操作に気付きました。私はqがアドレスのサイズであると思いますが、sarqがそのアドレスに対して何をしているのか分かりません。私はコードが何を信じているかについてコメントしました。アセンブリ言語 - sarqはコード内で何をしますか?
.LC0 .string "ans %d\n"
main:
.LFB0: val = -8(%rbp), result = -12(%rbp)
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movabsq $53162464113523643, %rax
movq %rax, -8(%rbp) //val(variable) address -8,inputs value in %rax
movl $0, -12(%rbp) //result(variable) address -12, inputs 0
jmp .L2 //starts loop
.L3:
movq -8(%rbp), %rax //moves value in val into rax
andl $1, %eax //dunno what eax is but adds 1 into it
xorl %eax, -12(%rbp) //compares the value of eax and result to see if they are not equal. so compares 1 to 0
sarq -8(%rbp) //does something to val?
.L2:
cmpq $0, -8(%rbp) //compares val to 0
jg .L3 //if greater, goes to L3
movl -12(%rbp), %eax //else, moves value from result into eax
movl %eax, %esi //moves eax into esi
movl $.LC0, %edi //Moves w/e $.LC0 is into edi. Based on the top, edi now holds that string?
movl $0, %eax //moves 0 into eax
call printf //print statement
leave
ret
[SARは、インテルのinsn setリファレンスマニュアル(http://www.felixcloutier.com/x86/SAL:SAR:SHL:SHR.html)に記載されています。参照してくださいhttp://stackoverflow.com/tags/x86/info –