汇编-数据传送类指令
数据传送类指令
- 通用数据传送指令
- 输入输出指令
- 地址传送指令
- 标志传送指令
除标志传送指令外,其他指令的执行对标志位不产生影响
通用数据传送指令#
-
一般数据传送指令
- 使用 的注意事项
- 两个操作数的字长必须相同
- 两个操作数不允许同时为存储器操作数
- 两个操作数不能同时为段寄存器
- 在源操作数是立即数的时候 ,目标操作数不能是段寄存器
- 和 不作为目标操作数, 一般也不作为操作数在指令中出现
是 错误的, 目标操作数两个都是基址,应为
- 使用 的注意事项
-
堆栈操作指令 操作数必须是 16位 的 通用寄存器 和 存储器均可,存储器需要声明字长
-
交换指令 操作数至少有一个是寄存器,如果是存储器操作数 必须声明字长
-
查表转换指令
-
字位扩展指令
- 将符号数的符号位扩展到高位
- 指令为零操作数指令,采用隐含寻址,隐含的操作数为 及
- 无符号数的扩展规则为在高位补零
-
- 将 的内容扩展到 若最高位为 则执行后 若最高位为 , 则执行后
-
- 将 的内容扩展到 若最高位为 则执行后 若最高位为 , 则执行后
该类所有指令的执行都不影响标志位
输入输出指令#
I/O端口:#
I/O 接口中用于存储数据、可以直接被CPU访问的寄存器
计算机输入输出系统中可以包含若干接口控制电路(芯片),每个接口都包含了一个或者多个端口
输入输出指令#
专门面向 I/O 端口操作的指令
端口地址在指令中的表示方式 寻址方式
指令功能: 从端口地址读入数据到累加器/将累加器的值输出到端口中
指令格式:
- 输入指令: (是端口地址, 是 )
- 输出指令:
指令寻址方式#
根据端口地址码的长度,指令具有两种不同的端口地址表现形式
直接寻址
- 端口地址为 8位 时,指令中直接给出 8位 端口地址
- 寻址 256个 端口
间接寻址
- 端口地址为 16位 指令中的端口地址必须由DX 指定
- 可寻址 64K 个端口
地址传送指令#
- 取偏移地址指令 取近地址指针
- 指令 取远地址指针
- 指令 取远地址指针
LEA#
操作#
将变量的 16位 偏移地址写入到目标寄存器
当程序中用符号标志内存偏移地址的时,须使用该指令#
格式#
指令要求#
源操作数 必须是一个 存储器操作数,目标操作数通常是间址寄存器
LDS LES指令#
LDS 和 LES 均用于将一个 32位的远地址指针写入到目标寄存器#
LDS 的一般格式#
LDS 通用寄存器,存储操作数
将源操作数的偏移地址送到目标寄存器,将源操作数的段地址送到 ES
因此这个存储器操作数事实上是一个 32位 的操作数
LES 的一般格式#
LES 通用寄存器,存储操作数
将源操作数的偏移地址送到目标寄存器,将原操作数的段地址送到 ES
标志传送指令#
LAHF SAHF#
隐含操作数
LAHF : 将 的低八位装入
SAHF : 将 的内容写入 的低八位
PUSHF POPF#
隐含操作数
能够表示偏移地址的寄存器只有四个
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理