zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    推荐几个不错的console调试技巧
    JS字符串截取函数slice(),substring(),substr()的区别
    ES6入门基础
    setTimeout的小尴尬
    Javascript自定义事件功能与用法实例分析
    JavaScript中函数定义的三种方法
    数组方法
    数组选择排序
    数组冒泡排序
    this指向问题(1)
  • 原文地址:https://www.cnblogs.com/kunlingou/p/15115640.html
Copyright © 2011-2022 走看看