Linux 64位系统下的AT&T汇编调用C语言printf函数

市面上大多数的汇编代码都是32位的。很少有Linux 64位 AT&T的。<汇编语言程序设计>这里面的例子大部分也是32的。想要64位的例子需要自己研究,调试。

书本上的例子如下:

.section .data

output:

    .string "The Processor Vendor ID is '%s'\n"

.section .bss

    .lcomm buffer, 12

.section .text

.global _start

_start:

    movl %0, %eax

    cpuid

    movl $buffer, %edi

    movl %ebx, (%edi)

    movl %edx, 4(%edi)

    movl %ecx, 8(%edi)

    pushl $buffer

    pushl $output

    call printf

    addl $8, %ebp

    pushl $0

    call e

    exit

Makfile如下:

all: cpuid2

cpuid2: cpuid2.o

    ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o $@ -lc $<

cpuid2.o: cpuid2.s

    as -gstabs+ -o $@ $<

clean:

    rm ./cpuid2 ./cpuid2.o 

该程序在32位linux系统下可以正常运行。

 

 <

你可能感兴趣的:(asm,gnu)