使用%rdi作为参数

时间:2016-04-10 15:17:00

标签: assembly gas att

我刚刚写了下面的代码来计算2 ^ 3 + 2 ^ 5的魔法和。我有一些问题。

1.在x86_64调用约定中,参数在寄存器%rdi,%rsi,%rdx,%rcx,%r8和%r9中传递。但是,当我试图在%rdi中调用exit值时,编译它然后echo $?它给我的值为0.如果我将值转移到%rbx,如下所示它给我正确的结果。

2.最初我的代码在文件末尾以标签exit:退出,我做了jmp exit而不是_start中的最后三行。这给了我一个分段错误。为什么呢?

3.从命令行获取基础和电源需要做什么? argv在哪里?

.data
.globl _start
_start:
        movq $2, %rdi
        movq $3, %rsi
        call power
        pushq %rax

        movq $2, %rdi
        movq $5, %rsi
        call power

        popq %rdi

        addq %rax, %rdi

        movq $1, %rax
        movq %rdi, %rbx 
        int $0x80

power:
        pushq %rbp
        movq %rsp, %rbp
        movq %rsi, %rcx
        decq %rcx
        subq $8, %rsp
        movq %rdi, -8(%rbp)

loop_power:
        movq -8(%rbp), %rax
        imulq %rdi, %rax
        movq %rax, -8(%rbp)
        loop loop_power

exit_power:
        movq -8(%rbp), %rax
        movq %rbp, %rsp
        popq %rbp
        retq

更新

.data
.text
.globl _start
_start:
        movq $2, %rdi
        movq $3, %rsi
        call power
        pushq %rax

        movq $2, %rdi
        movq $5, %rsi
        call power

        popq %rdi

        addq %rax, %rdi

        jmp exit

power:
        pushq %rbp
        movq %rsp, %rbp
        movq %rsi, %rcx
        decq %rcx
        subq $8, %rsp
        movq %rdi, -8(%rbp)

loop_power:
        movq -8(%rbp), %rax
        imulq %rdi, %rax
        movq %rax, -8(%rbp)
        loop loop_power

exit_power:
        movq -8(%rbp), %rax
        movq %rbp, %rsp
        popq %rbp
        retq

exit:
        movq $60, %rax
        syscall

0 个答案:

没有答案