#数据传输指令
- 是对所有指令都有效注意:
- 在传送时,目的操作数和源操作数数据类型必须一致
- 两操作数不能同时位存储器操作数
- DS段和立即数不能作为目的操作数
- IP 寄存器 不允许读和写
- 目的操作数和源操作数不能同时为段寄存器
- 立即数不能直接传送到段寄存器(要利用一个通用寄存器进行中转)
- 一般传送指令不会影响标志位
- 对于声名 字节 还是 字 是看传输指令中是否有 寄存器 参与如果有寄存器不用声名,没有寄存器参与 就需要声明 字节 还是 字
- 声名的是 目的操作数 所在的空间的大小
-
通用数据传送指令 MOV
-
格式:MOV 目的操作数 ,源操作数
-
目的操作数,不能是 CS 寄存器。源操作数,可以为,寄存器 存储器 立即数
-
-
堆栈指令 PUSH POP
-
格式: PUSH / POP 操作数
-
PUSH 见源操作数入栈操作
-
POP 将栈顶元素弹出
-
- 注意
- 堆栈操作数必须以字为单位 , 先进后出 原则
- 入栈操作 ,指针 SP - 2,不能是 立即数
- 出栈操作 , 指针 SP + 2
- 入栈操作,是先将操作数 放入栈底 ,既 地址为最大值
- 出栈操作,就是将操作数 从栈顶提出,既 地址为最小值
- 代码段CS 可以进行入栈操作,但不能弹出到 CS 段(CS 段不可以随意修改)
- 堆栈段地址从上到下 是由低到高的
- 这两条指令主要用于现场的保护和恢复,以保证子程序调用和中断程序可以正常返回
- 依次输入0000 H 和 1111 H 的SP 指针示意图
-
例题
- PUSH AX
- 是先将 SP = SP - 1 ;
- 压入 AH
- 再将 SP = SP - 1 ;
- 压入 AL
- POP AX
- 是先将 栈顶元素 送入 AL
- SP = SP - 1
- 再将 堆栈元素 送入 AH
- SP = SP - 1
-
交换指令 XCHG
-
格式:XCHG 源操作数 , 目的操作数
-
用于寄存器与寄存器之间的交换
-
或者寄存器与存储器(段寄存器)之间的交互啊
-
不能同时为存储器
-
-
取地址指令 LEA , LDS ,LES
-
格式 LEA 取出效地址;偏移地址(EA)
-
LEA BX ,[SI + 30 H] ; BX = SI + 30H ;
-
比较 MOV BX [SI + 30H] ; BX = DS:[SI +_ 30H ];
- LDS , LDA 取逻辑地址 (DS:[SI +_ 30H ])
-
- 注意
- 是将连续的四个字节(段基地址 一个字 + 偏移地址 一个字)中的内容送入指定的寄存器
- 低两个字节 送入寄存器
- 高两个字节 送入 DS / ES
- 换码指令(查表指令,翻译指令)
- 换码指令是一条完成字节翻译功能的指令,它可以使累加器 AL 中的一个值来换成内存表格中的以一个值,一般用于实现编码值的转换
- 格式 :XLAT
- 功能 :[BX + AL ] ——> AL ; 其中 BX 中存储的为 基址 AL 中存储的为 偏移地址 ;从其中获得数据在转存到 AL
- 例题
- MOV BX 2000H ; MOV AL 4
- 则 当 BX 和 AL 存储的内容为上面 则
- XLAT 后 AL = 14