科锐16位汇编学习笔记 03 汇编指令

指令种类

  1. 数据传送指令
  2. 算数运算类指令
  3. 位操作类指令
  4. 串操作类指令
  5. 控制转移类指令
  6. 处理器控制类指令

数据传送类指令

传送类指令不影响标志位,**除了标志位传送指令外。**

传送指令MOV(move)
说明

​ 把一个字节或字的操作数从源地址传送至目的地址。注意:不存在存储器向存储器的传送指令。

举例:

mov     ax,es      ;ax←es mov     ds,ax  ;ds←ax←es mov     word ptr [si+2],0bh

注意:

​ 两个操作数类型要一致.操作宽度

不允许段寄存器向段寄存器传送

操作

立即数到内存需要注意: 需要指明立即数要占多大内存 byte 表示字节 word 表示 字,寄存器不需要是因为他自带宽度属性

源操作数和目标数的长度必须一致,要么都是byte,要么都是word,个别指令除外,8位寄存器和16位寄存器相互赋值,会被系统转化成16位

段寄存器到内存需要指明宽度

段偏移的不同写法,推荐使用 [bp + si + 12 ]

交换指令XCHG(exchange)
说明

把两个地方的数据进行互换。不存在存储器向存储器的传送指令。

举例

1\. al, ah高低位交换       xchg  al,ah 2.存储器 [2040]与[2050]交换   xchg  ax,[2040]                             xchg  ax,[2050]                             xchg  ax,[2040]

注意

1.寄存器与寄存器之间可以对换数据

2.寄存器与存储器之间可以对换数据

3.不能在存储器与存储器之间对换数据

操作
寄存器到寄存器

寄存器到内存

换码指令XLAT
说明

•作用:将BX 指定的缓冲区中、AL指定的位移处的一个字节取出赋给AL 。即 : al <-- ds:[ bx + al ]

•该指令无操作数。

•用途:键盘的扫描码,需要转为ASCII 码,可以将扫描码做成表,扫描码作下标可以查到对应的ASCII 码

类似于 al = bx[al];

操作

堆栈操作指令

进栈(push reg)
说明

将标志寄存器的内容压入堆栈,同时栈顶指针SP减2

等同于 sub sp , 2 申请内存

​ mov [sp] , reg 吧数据存入内存

寄存器SP的值就是当前栈顶

操作

这里查看数据内存是 -d ss:fffo 是因为 sp寄存器的段基址 是 ss,sp是段偏移

8位寄存器,8位内存和还有立即数是不可以入栈的

出栈(pop reg)
说明

将栈顶单元内容送到标志寄存器,同时栈顶指针SP 加 2

等同于 mov reg, [sp] 把把数据传给变量

​ add sp , 2 释放内存

操作

保存所有寄存器环境
32位:pushad / popad
16位:pusha / popa
说明

将所有寄存器的值入栈或者出栈

一般用于函数,为了不影响其他函数的环境,自己先把寄存器环境入栈,自己操作完再出栈

操作

标志寄存器传送指令

标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作

•有2对4条指令

–低8位传送:LAHF和SAHF

–16位传送:PUSHF和POPF

LAHF 和 SAHF

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏安全实验室_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值