ITPub博客

首页 > 应用开发 > IT综合 > Linux环境汇编语言编程初步——AT&T语法(转)

Linux环境汇编语言编程初步——AT&T语法(转)

原创 IT综合 作者:ba 时间:2007-08-15 20:16:37 0 删除 编辑
Linux环境汇编语言编程初步——AT&T语法(转)[@more@]目前正在学习Linux汇编,写写文章共享一下心得

汇编语言作为一种高效的,而且紧密结合硬件平台的编程语言,在操作系统,嵌入式开发等领域都有着十分重要的作用。正因为汇编依赖于硬件结构(CPU指令码),因此不同体系结构上的汇编语言也大相径庭。目前国内大学的汇编语言课程大多以Intel平台的语法格式来讲述,而市面上讲述其他体系结构汇编语言的书籍也是寥寥无几,这就给系统程序员研究其他平台汇编代码带来了很大的困难。本文简单介绍了Linux下的AT&T语法,以及在Linux下汇编的基本方法。

AT&T语法起源于AT&T贝尔实验室,是在当时用于实现Unix系统的处理器操作码语法之上而形成的,AT&T语法和Intel语法主要区别如下:
AT&T使用$表示立即数,Intel不用,因此表示十进制2时,AT&T为$2,而Intel就是2
AT&T在寄存器前加%,比如eax寄存器表示为%eax
AT&T 处理操作数的顺序和Intel相反,比如,movl %eax, %ebx是将eax中的值传递给ebx,而Intel是这样的mov ebx, eax
AT&T在助记符的后面加上一个单独字符表示操作中数据的长度,比如movl $foo, %eax等同于Intel的mov eax, word ptr foo
长跳转和调用的格式不同,AT&T为ljmp $section, $offset,而Intel为jmp section:offset
主要的区别就是这些,其他的细节还有很多,下面给出一个具体的例子来说明
CODE:
#cpuid.s Sample program

.section .data

output:
.ascii "The processor Vendor ID is 'xxxxxxxxxxxx' "

.section .text
.globl _start

_start:

movl $0, %eax

cpuid

movl $output, %edi

movl %ebx, 28(%edi)

movl %edx, 32(%edi)

movl %ecx, 36(%edi)

movl $4, %eax

movl $1, %ebx

movl $output, %ecx

movl $42, %edx

int $0x80

movl $1, %eax

movl $0, %ebx

int $0x80

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10617731/viewspace-959715/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    1621
  • 访问量
    4430955