操作系统学习之汇编学习2

4.汇编语言程序设计

汇编语言程序由定义好的段组成,三个常用的段如下:数据段,bss段,文本段
所有的汇编程序必须有文本段。数据段声明带有初始值的数据元素,这些数据时汇编程序中的变量。bss声明使用零或者null初始化的数据元素,最常用作汇编语言程序中的缓冲区。

段的定义:

使用.section命令来声明段:
.section.data
.section.bss
.section.text
bss必须在文本段之前
起始点:_start 用于表明程序应该从这条指令开始运行
汇编程序的模板:
.section.data
<...>
.section.bss
<...>
.section.text
.global _start
_start:
<...>

创建简单的程序:

CPUID指令:用于请求处理器的特定信息并且把信息返回到特定寄存器中。处理器把厂商ID字符串返回到EBX,EDX和ECX寄存器中:

  • EBX包含字符串的最低4个字节
  • EDX包含字符串的中间4个字节
  • ECX包含字符串的最高4个字节
    系统调用:int $0x80 从Linux内核访问五年控制台显示
运行汇编程序:

as -o cpuid.o cpuid.s
ld -o couid cpuid.o
./cpuid

调试程序:

为了调试程序必须使用-gstabs参数重新汇编源代码:
as -gstabs -o cpuid.o cpuid.s
ld -o cpuid cpuid.o
通过指定-gstabs参数,附加的信息被汇编进可执行程序中,但是会增加程序文件大小,所以尽量不要使用调试信息。
nop:用于表示空指令

连接C库函数
  1. 静态链接
  2. 动态链接
    在Linux系统中,标准的C动态库位于libc.so.x文件中(x表示库的版本),使用gcc时这个文件自动连接到C程序,必须手动地把它链接到城西目标代码以便C函数能够操作—使用-l参数
    as -o cpuid.o cpuid.s
    ld -o couid -lc cpuid.o
    ./cpuid

gcc -o cpuid2 cpuid2.s
./cpuid2


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值