linux 汇编学习

本文介绍了汇编语言的基础内容,包括一个简单的汇编程序exit.s的编写、汇编和链接过程,解释了汇编器和连接器的作用。还阐述了汇编语言的注释和伪指令,重点讲解了X86上通用寄存器和专用寄存器,以及eax、ax、al(ah)等寄存器之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个程序:

exit.s:

.section .data
.section .text
.global _start

_start:
    movl $1, %eax  //eax保存系统调用号
    movl $0, %ebx   //ebx保存返回状态,改变此数字,则返回echo $?的值
    int $0x80

 

汇编:

as exit.s -o exit.o

链接:

ld exit.o -o exit

解释:

as为汇编器,即汇编命令,将汇编程序汇编为机器码

ld为连接器

 

注释:

#

汇编语言以‘#’开始一行注释

.(.section .text中的小点):任何以点号开始的指令都不会直接翻译成机器语言,这些是针对汇编程序本身,最终由汇编器处理,因此被称为伪指令

 

X86上有如下几个通用寄存器:

%eax

%ebx

%ecx

%edx

%edi

%esi

x86上的专用寄存器:

%ebp

%esp

%eip

%eflags

 

eax ebx ecx edx以及他们与8086的AX BX CX DX的联系与区别

4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI)
2个指针寄存器(ESP和EBP)

4个数据寄存器(EAX、EBX、ECX和EDX):
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

那么如何理解eax,ax,al(ah)之间的关系呢?
专业点可以这样解释:Eax是32位寄存器,ax是16位寄存器,al(ah)是八位寄存器。
那么eax存储的数据就是ax的两倍,ax是al(ah)的两倍。
Eax可以存储的数字是DWORD(双字)ax存储的是WORD(字)AL(AH)存储的是BYTE(字节),那么为什么又有AH和AL呢,我们可以这样理解,AX=AH+AL,AH存储的是AX的高8位数据,AL存储的是AX的低八位数据。H这里就是HIGH,L就是LOW.
假设eax是红色区域,那么eax现在就是64636261;
那么ax就是eax的低十六位,也就是6261;
Al是61;AH是62。

其他ebx,ecx,edx也有类似的bx,bl,bh等对应的寄存器,原理和上面相同

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值