【问题标题】:A simple function to square a number in assembly在汇编中对数字求平方的简单函数
【发布时间】:2022-01-21 19:40:00
【问题描述】:

我进入汇编编程的第二天,我正在尝试创建一个对数字求平方的函数
square.asm:

    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

main.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

我错过了什么?

【问题讨论】:

    标签: nasm


    【解决方案1】:

    如果您使用的是System V ABI,您的第一个参数在rdi,而不是rsi

    用途:

    mov ras, rdi
    mul rdi
    ret
    

    为了使输出更易于阅读,您还需要在打印语句中添加一些空格或换行符:

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

    还有一个挑剔 - 使用 int main(void)int main(int argc, char **argv) 作为您的 main 函数签名。其他任何东西都是未定义的。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2016-04-07
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2013-07-25
      相关资源
      最近更新 更多