x86汇编

操作数排列是从源(右)到目的(左)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
assume cs:codesg ;假设代码段的名称为codesg
codesg segment ;定义一个codesg段
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends ;codesg段结束
end ;是个伪指令,程序的结束标记

AT&T汇编

1.寄存器

引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp

8个16-bit寄存器 它们事实上是上面8个32-bit寄存器的低16位:
%ax,%bx,%cx,%dx,%di,%si,%bp,%sp

8个8-bit寄存器  %ah,%al,%bh,%bl,%ch,%cl,%dh,%dl
它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和低8位

6个段寄存器   %cs(code),%ds(data),%ss(stack), %es,%fs,%gs

3个控制寄存器 %cr0,%cr2,%cr3; 

6个debug寄存器  %db0,%db1,%db2,%db3,%db6,%db7;
 
2个测试寄存器  %tr6,%tr7; 

8个浮点寄存器栈 %st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)

2.操作数顺序

操作数排列是从源(左)到目的(右)

1
movl %eax(源), %ebx(目的)  (ebx) = (eax)

要动手实践的事情:

1.标出来的实验

2.字母大小写转换 看DOSBox中的内存状况

3.低八位、高八位 DOSBox中的内存状况以及栈中的状况

寄存器及其作用

寄存器以e开头或r开头,来代表不同的架构,其中e开头表示32位,r开头表示64位

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。
允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称入栈和出栈。
有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。
 
CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。
CPU的EIP寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。
 
ECX一般用来当作计数器
EDX是数据寄存器
EAX是累加器
EBX是基址寄存器,  
ESI是源变址寄存器
EDI是目的变址寄存器
ESP是堆栈指针寄存器
EBP是基址指针寄存器,其中ESP和EBP一般是针对堆栈面言

CS:IP 存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行

CS Code segment

IP instruction Pointer

PC

PC是非intel厂家对IP的称呼,也就是说PC起始跟CS:IP是一回事儿。

PC 是计算机科学中使用的一个术语。IP 是 x86 兼容 CPU 中的一个寄存器。

简单来说,在 x86 兼容 CPU 上,CS 段寄存器和 IP 寄存器两个寄存器就是实现计算机科学中的 PC 这个概念的具体设施。

AX

BX

CX

DX

DS

SS

SP

SI

DI

ESP(Extended Stack Pointer)为扩展栈指针寄存器,是指针寄存器的一种,用于存放函数栈顶指针。与之对应的是EBP(Extended Base Pointer),扩展基址指针寄存器,也被称为帧指针寄存器,用于存放函数栈底指针。