C与汇编:汇编指令和寄存器

汇编指令

汇编指令分为:数据传送指令、算术运算指令、逻辑指令、转移指令、处理机控制指令、串处理指令等。

数据传送指令

实现寄存器和内存、寄存器和寄存器之间的单个数据传送。

MOV(move)

mov ax,2 // 从2复制数值,覆盖ax
mov eax,[ebx+8] // 是把内存地址为ebx+8处的数据赋给eax。

参考:https://baike.baidu.com/item/MOV/56228441?fr=aladdin

LEA(load effective address)

lea eax,[ebx+8] // 将ebx+8这个值直接赋给eax,而不是把ebx+8处的内存地址里的数据赋给eax。

算术运算指令

实现寄存器和内存中的数据运算。它们的执行结果影响标志寄存器的 sf、zf、of、cf、pf、af 位。

SUB(substract)

mov ax,2
mov bx,1
sub ax,bx // ax - bx,结果放入ax

XOR(substract)

xor %eax,%eax  // %eax = %eax xor %eax 将%eax = 0最佳方式

参考

https://blog.csdn.net/weixin_39768247/article/details/111091032

寄存器

基本寄存器分为:通用寄存器、段寄存器、状态和控制寄存器、指令寄存器

参考:
https://blog.csdn.net/qq_25884515/article/details/103733076
https://worthsen.blog.csdn.net/article/details/78907462

通用寄存器

32位通用寄存器有八个,eax, ebx, ecx, edx, esi, edi, ebp, esp,
他们主要用作逻辑运算、地址计算和内存指针,具体功能如下:
eax(累加和结果寄存器):"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
ebx(数据指针寄存器):"基地址"(base)寄存器, 在内存寻址时存放基地址。
ecx(循环计数器):计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
edx(i/o指针):总是被用来放整数除法产生的余数。
esi(源地址寄存器):
edi(目的地址寄存器):
esp(堆栈指针):
ebp(栈指针寄存器):
以上功能并未限制寄存器的使用,特殊情况为了效率也可作其他用途。
32位方式下寄存器名分别为 eax, ebx, ecx, edx, edi, esi, ebp, esp, r8d – r15d
64位模式下,他们被扩展为 rax, rbx, rcx, rdx, rdi, rsi, rbp, rsp, r8 – r15.

rsp、ebp

rsp是栈指针寄存器64位。指向栈顶,相当于32位汇编里的esp,16位的sp,用于指向栈的栈顶(下一个压入栈的活动记录的顶部),而EBP为帧指针,指向当前活动记录的底部。

剑指 Offer
原文地址:https://www.cnblogs.com/kunlingou/p/15115640.html