汇编速查-IA32汇编helloword

本文介绍了IA32汇编语言的基础,包括AT&T语法、数据段定义、C库函数的使用,以及如何通过汇编程序实现Linux系统调用如helloworld和cpuid。涉及的内容包括编译、调试和段如.data、.rodata、bss的使用。
摘要由CSDN通过智能技术生成

AT&T语法

  1. $表示立即数,引用10进制数4,AT&T语法 $4,Intel语法是4
  2. AT&T语法在寄存器前加 % ,Intel语法不需要
  3. AT&T语法处理源操作数和目的操作数和Intel语法相反
    AT&T: movl $4, %eax
    Intel: mov eax, 4
  4. AT&T语法在助记符后使用一个单独的字符来引用操作中使用的数据长度, Intel 语法中数据长度被声明为单独的操作数
    AT&T: movl $test, %eax
    Intel: mov eax, dword ptr test
  5. 长调用和跳转使用不同的语法定义段和偏移值
    AT&T: ljmp $section, $offset
    Intel: jmp section:offset

cpuid.s的编译

汇编器$: as -o cpuid.o cpuid.s
连接器$: ld -o cpuid cpuid.o

gdb是命令行调试器
objdump反汇编器 obj=>汇编$objdump -d test.o
gprof简档器 ,分析程序的执行和确定应用程序中的“热点”

$./demo
...
$gprof demo > gprof.txt

汇编程序的基础模板

.section  .data     
;.section命定义段 参数只能为 .data, .bss, .text
;.data 是初始化了的数据
.section .bss
;使用0(null)初始化,常用做汇编语言程中的缓冲区
.section .text      
;文本段,所有汇编语言程序中都必须有文本段,数据段,bss段是可选的
.globl   _start     
;.globl命令声明外部程序可以访问的程序,如过编写外部汇编程序或C语言程序使用的一组工具,应该用.globl声明每个函数标签
_start:         
;定义起始点,连接器必须知道指令码的起点,默认标签是_start,表明程序应该从这条指令开始执行

这里写图片描述

定义数据元素

.data 命令声明数据段

这个段中的任何元素都保留在内存中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值