x86汇编

抽象层次:

硬件:唯一的物理层,由电子电路组成,是XOR、AND、OR和NOT等逻辑运算器的复杂组合,称为数字逻辑。(digital logic)

微指令:又称为固件(firmware),只能在为它设计的特定电路上执行,从更高的机器码层翻译而来,提供了访问硬件的接口。

机器码:由操作码(opcode)组成,操作码是一些十六进制形式的数字,每一个代表特定的指令。

低级语言:计算机体系结构指令集的人类易读版本,主要是汇编语言。

高级语言:对机器层做了很高的抽象,可以轻松实现程序逻辑和流控制机制,包括C、C++等,被编译器编译为机器码。

解释型语言:C#、Perl、Java等解释语言,这一层的代码不会被编译为机器码,而是被翻译为字节码(bytecode)。字节码是特定于该语言的一种中间表示,在解释器(interpreter)中执行,解释器可在运行时将字节码实时翻译为可执行机器码的程序。相比于传统被编译的代码,解释器提供了一种自动的抽象层次,可以独立于操作系统,自己处理错误和管理内存。

x86体系结构:

内存:

一个程序的内存可以分为四个主要的段:

栈+堆+代码+数据

数据段(data section)存放了程序初始加载的值,称为静态值(static value),因为不发生改变,也称为全局值(global value)。

代码段包含了执行执行程序任务时CPU所取得的指令。

堆是为程序执行期间需要的动态内存准备的,用于创建、消除值,称为动态内存(dynamic memory),因为在程序运行期间经常被改变。

栈用于函数的局部变量和参数,以及控制程序执行流。

指令:

助记符+目标操作数+源操作数

mov       ecx               0x42

操作码:

每条指令使用操作码告诉CPU该执行什么操作,反汇编器将操作码翻译为人类易读的指令。

指令         mov ecx,            0x42

操作码     B9                         42 00 00 00

所以指令mov ecx,0x42的操作码就是B9 42 00 00 00

字节序:

数据的字节序(endianness)是指在一个大数据项中,最高位(大端big-endian)还是最低位(小端little-endian)被排在第一位(即排在最低的地址上)。

网络数据使用大端字节序,x86使用小端字节序,如127.0.01在大端字节序下被表示为0x7F000001,在小端字节序下被表示为0x0100007F。

操作数:

说明指令要使用的数据。有以下三种类型:

立即数(immediate):一个固定的值,如0x42

寄存器(register):指向寄存器,如ecx

内存地址(memory address):指向内存地址,一般由方括号内包含值、寄存器或方程式组成,如[eax]

寄存器:

被CPU使用的少量数据存储器,主要分为以下四类:

 

通用寄存器:CPU在执行期间使用(32位)。eax、ebx、ecx、edx、ebp、esp、esi

EAX:AX表示后有16位,AL后8位,AH次后8位。

 

段寄存器:用于定位内存节。cs、ss、ds、es、fs、gs

 

标志寄存器:用于作出决定。eflags

在x86中是32位,每一位是一个标志,要么是置位(1),要么清除(0),由这些值控制CPU的运算,或者给出某些运算的值。

ZF:当一个运算的结果位0时,ZF被置位,否则被清除。

CF:当一个运算结果相对于目标操作数太大或太小时,CF被置位,否则被清除。

SF:一个运算结果为负数时,SF被置位,否则被清除。对算术运算,若结果最高位为1,被置位。

TF:用于调试,当它被置位时,x86处理器每次只执行一条指令。

 

指令指针:用于定位要执行的下一条指令。eip

又称为程序计数器,保存了程序将要执行的下一条指令在内存中的地址。

简单指令:

mov eax,1000 把1000赋给eax寄存器

push eax 把eax寄存器的值入栈

pop eax 把栈底值赋给eax寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值