汇编指令总结

汇编指令 总结


【连续第1天总结】

笔记来源于《汇编语言》王爽著,主要对平常用到的汇编中寄存器指令进行总结

0x01 寄存器


寄存器进行信息存储;通俗的理解为——变量(CPU中的)

8086CPU有14个寄存器:

​ AX、BX、CX、DX、

​ SI、DI、

​ IP、SP、BP、

​ CS、DS、SS、ES、

​ PSW


  1. 通用寄存器:AX,BX,CX,DX;这4个寄存器通常用来存放一般性的数据,被称为通用寄存器

  2. 段寄存器:CS、DS、SS、ES;存放内存单元的段地址

    代码段寄存器:CS 指令指针寄存器:IP

    ​ (CPU将CS:IP 指向的内容当作指令执行)

  3. 数据段寄存器:DS […]:表示一个内存单元地址

    ​ ([address]表示一个偏移地址为address的内存单元)

    ​ (用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中)

  4. 栈顶段地址:SS 偏移地址:SP

    ​ (任意时刻,SS:SP指向栈顶元素)

  5. [bx]也表示一个内存单元,bx存放偏移地址

    (ax):表示ax中的内容

  6. 标志寄存器:flag;其中存储的信息通常被称为程序状态字(PSW),它的每一位都有特殊的功能

    ZF标志:

CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。

0x02 指令


mov ax,bx       将寄存器BX中的数据送入寄存器AX(AX=BX)
mov al,[O]      从1000:0单元的数据到al的传送;CPU会自动从数据段地址中ds中取出段地址,然后加上偏移地址,找到内存单元,然后读取数据
add ax,bx       将AX和BX中的数值相加,结果存在AX中(AX=AX+BX)
sub 寄存器,寄存器

jmp 段地址:偏移地址    同时修改CS、IP的内容
jmp 某一合法寄存器     仅修改IP的内容;用寄存器中的值修改IP
jmp ax

push ax         入栈;表示将寄存器ax中的数据送入栈中
pop ax          出栈;表示从栈顶取出数据送入ax
                8086CPU的入栈和出栈都是以字为单位进行的

loop 有循环的含义


//转移指令CALLRET它们都修改IP,或同时修改CS和IP。经常被共同用来实现子程序的设计
call指令
ret指令用栈中的数据,修改IP的内容,从而实现近转移

0x03 汇编代码分析


  1. 调用函数时,需要使用栈数据结构
    (1)传递参数
    函数调用时,需要传递参数,而在汇编中是将参数放到栈中来调用一个函数
调用栈

push 参数3
push 参数2
push 参数1
call xxxx           //调用函数,并返回地址压入栈中
push ebp            //将之前的EBP压入
mov ebp,esp         //建立新的空栈
sub esp,xxxx        //开辟新的栈空间,之后往栈中放入局部变量
......              //函数代码
mov esp,ebp         //将esp回到ebp处,为了取之前的ebp
pop ebp             //取之前的ebp
ret                 //结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值