• 汇编扫盲


    地址空间


    在32位操作系统环境下,每个进程拥有一片连续的内存空间,程序本身和其需要的数据共存于此,这片空间的每个字节都可以用一个32位无符号数定位,每个字节都有唯一的空间位置,我们称之为地址.这里的内存一般并非真正的物理意义上的存储设备,我们把它叫地址空间.32位系统地址空间的大小为2的32次幂(4G),由于系统本身也有代码和数据,所以实际可用的地址空间只有2G-3G.
     

    寄存器


    CPU中的储存单元,用于处理程序的逻辑.
    常用的有10个
    EAX,EBX,ECX,EDX(通用寄存器,少数情况有特别的用途),可以只操作高16位或低16位AX,也可使用低16位中的低8位AL或高8位AH
    ESI,EDI,EBP(存储内存地址,多数情况可以当通用寄存器使用,每个在特殊情况有特殊作用),可以只操作高16位或低16位,不能操
     
    作低8位
    ESP,EIP(特殊寄存器,不能通用)
    PSW
    前9个是32位,PSW是16位
    前7个寄存器可以看做供代码快速操作数据的临时变量即可
     
    EIP:
    修改EIP的值,就是程序逻辑中的跳转,对于汇编指令就是JMP&n6159;指向堆栈上的数据,可以用别的寄存器来取代,但ESP,许多操作堆栈数据汇编指令会隐式地改变它的值.
    通常,一个进程的堆栈处于整个地址空间的最低处(通常指单线程程序,或者指多线程程序的主线程),用掉一定的堆栈空间,ESP就会递减,一旦ESP减到0发生环绕后,就引发了堆栈溢出.PUSH,CALL这样的指令会把数据放入ESP指向的地址,并减小ESP的值,POP,RET做相反操作
     
    PSW:
    按位保存CPU的内部状态
    9个标志位:(略)
    很多情况下,将影响标志位的指令和根据标志位做跳转的指令结合起来用(这里就是if语句的由来)
    CMP EAX,EBX 
    JNZ label  
     
    第一句:减法操作,结果影响标志寄存器,而并不将结果放回EAX,这条指令影响ZF(零标志)
    第二句:JNZ-jump not zero,非零则跳转,就是此时ZF为1时就修改EIP到地址label处(注意:条件判断语句的跳转地址不同于JMP,
     
    它们的指令数据中是用一个有符号整数保存的相对地址),所以当条件成立时,将EIP累加一个值,而不是将EIP赋予一个新值.所以条件跳转往往不能跳过一个过大的语句块(大于128字节).一般把它和JMP结合起来用.
     

    CPU工作过程


    1 通电后,从EIP寄存器中取出一个数据,其含义是一个地址空间中的一个地址
    2 CUP加载这个EIP指向的若干字节的数据组成的指令
    3 随后将EIP递增到下一个字节的地址处
     

    指令


    由操作,参数,参数定位方式组成,存在形式是数字组合的形式
     
    操作:比如赋值操作Mov,跳转操作等Jmp
    参数:可以指定寄存器或者内存.?[怎么指向内存]
    参数定位方式:就是寻址方式

    寻址方式

     
    1 立即寻址: 
    操作数包含在指令中 MOV EAX,1
     
    2 寄存器寻址
    操作数在寄存器中 MOV EAX,EBX
     
    3 直接寻址
    操作数的地址被直接写在指令内 MOV EAX,[0X1000]
     
    4 间接寻址
    操作数的地址需要经过某种运算才能得到,可能是从一个寄存器读取,也可能是把几个寄存器中的数据相加等
     
    MOV EAX,[EBX]
    MOV EAX,[EBX+4]  EBX里的数据做为一个地址,将这个地址加4后得到新地址,从新地址读取数据给EAX
     
    MOV EAX,[EBX+ECX*4+4] *4不代表CPU寻址操作时可做乘法,而只是将ECX扩大了4倍
    间接寻址中[]中最多只能是3个部分的和,基址,变址和常数偏移.
  • 相关阅读:
    [MFC] MFC 用mciSendString加载WAV资源文件
    [JS] HTML QQ分享界面js代码
    [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)
    [ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)
    [ACM_动态规划] ZOJ 1425 Crossed Matchings(交叉最大匹配 动态规划)
    easyui combobox可编辑的情况下,只能首字母开始过滤的问题选项
    easyui-combobox绑定回车事件注意事项
    easyui-combobox绑定回车事件相关
    jquery-qrcode 生成和读取二维码
    zxing生成二维码和读取二维码
  • 原文地址:https://www.cnblogs.com/nafio/p/9137683.html
Copyright © 2020-2023  润新知