首页 > 解决方案 > 我收到错误“64 位模式不支持 32 位绝对寻址”

问题描述

我是组装新手。我正在尝试在组装中获得成型三角形。编译时,出现“64 位模式不支持 32 位绝对寻址”错误。你能解释一下我想念什么吗?我做的方式是否正确

#include <stdio.h>

int main()
{
    int a, b, c;

    scanf("%d %d %d", &a, &b, &c);
    if(c < a + b && b < a + c && a < b + c)
        printf("yes");
    else
        printf("no");
}

这是我的代码。

.data
.yes: .string "Yes"
.no: .string "No"
.global main


tri:
    push %rsi
    push %rdx

    add %rdi, %rsi # a + b
    cmp %rdx, %rsi # a + b > c
    jle no
    pop %rsi
    add %rsi, %rdx # c + a 
    cmp %rdi, %rdx # c + a > b
    jle no
    pop %rdx
    add %rdx, %rdi # b + c
    cmp %rsi, %rdi # b + c > a
    jle no 

    mov $.yes, %rdi
    mov %rax, %rsi
    xor %rax, %rax
    call printf
    ret
no:
    mov $.no, %rdi
    mov %rax, %rsi
    xor %rax, %rax
    call printf
    ret

main:
    mov $2, %rsi
    mov $2, %rdi
    mov $3, %rdx
    call tri




 

标签: macosassemblyx86-64gnu-assembleratt

解决方案


推荐阅读