代码之家  ›  专栏  ›  技术社区  ›  kesarling

一个简单的函数,用于在汇编中求一个数的平方

  •  1
  • kesarling  · 技术社区  · 4 年前

    我进入汇编编程的第二天,我正试图创建一个函数来平方一个数字

        global square: ; do not need _start because gcc has one already
        section .text
    square:
        mov rax, rsi; remember: first argument is always in rsi. (Order is: rsi, rdi, rdx, tcx, r8, r9)
        mul rsi ; rax = rax * rsi (remember: accumulator is the implicit argument)
        ret ; returns the value in accumulator
    

    主要的c:

    #include <stdio.h>
    
    long int square(long int);
    
    int main() {
        for (long int i = 1; i < 6; i++) {
            printf("%li", square(i));
        }
        return 0;
    }
    

    结果:

    7556421251850319424-3765949904798924751-3765949904798924751-3765949904798924751-3765949904798924751
    

    预期:

    1491625
    

    我错过了什么?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Carl Norum    4 年前

    您的第一个参数在中 rdi rsi System V ABI .

    使用:

    mov ras, rdi
    mul rdi
    ret
    

    printf("%li\n", square(i));
    

    还有一个吹毛求疵的地方——要么用 int main(void) int main(int argc, char **argv) 为了你的 main

    推荐文章