一、范例程序:cpuid.s
.section .dataoutput: .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n".section .text.globl _start_start: movl $0, %eax cpuidmovl $output, %edimovl %ebx, 28(%edi)movl %edx, 32(%edi)movl %ecx, 36(%edi)movl $4, %eaxmovl $1, %ebxmovl $output, %ecxmovl $42, %edxint $0x80movl $1, %eaxmovl $0, %ebxint $0x80
这个程序查看CPUID指令产生的厂商ID字符串。
1、使用GNU汇编器和GNU连接器构建可执行程序
运行情况:
2、使用GNU通用编译器编译
gcc有默认的_start标签,查找的是main标签,所以代码要进行以下修改:
.globl mainmain: movl $0, %eax cpuid
运行情况:
二、调试程序
使用GDB
两种最常被检查的数据元素是用于变量的寄存器和内存位置。如下:
三、在汇编语言中使用C库函数
代码如下:cpuid2.s
.section .dataoutput: .asciz "The processor Vendor ID is '%s'\n".section .bss .lcomm buffer, 12.section .text.globl _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, %esp pushl $0 call exit
用连接器生成:
用gcc,只需把_start标签变为main。