- LEA DST, SRC 是把SRC的有效地址放入DST中。
- MOV DST, SRC 是把SRC中的值放入DST中, DST, SRC的字长必须相同,否则出错。
- MOV DST, OFFSET SRC 也是把SRC的有效地址放入DST中,OFFSET为获取SRC的偏移地址。
- OFFSET指令只能与简单的符号地址相连,而不能和诸如LIST[SI] 或[SI]等复杂操作数相连。
- 一般双操作指令中,DST, SRC 不能同时为段寄存器,SRC, DST中必须有一个为寄存器。
- 立即数不能直接送段寄存器,应先将其存入寄存器中,再将寄存器送段寄存器。
- MOV指令不影响标志码。
- 一般双操作指令中,源操作数和目的操作数的长度是一致的,但是MOVSX和MOVZX的源操作数长度一定要小于目的操作数长度。
- SP或者ESP的内容在任何时候都指向当前栈顶。
- 堆栈的存取在16位操作中必须以字位单元(不允许字节堆栈),在32位操作中必须以双字为单元,PUSH/POP指令只能做字或双字操作。
- 8086不允许PUSH指令用立即数寻址,POP指令不允许用立即数寻址,POP指令为目的段寄存器时,不允许使用CS段寄存器。
- PUSH和POP操作均不影响标志位。
- PUSHA:16位通用寄存器依次进栈,次序为:AX, CX, DX, BX, 指令执行前的SP, BP, SI, DI。 指令执行后 (SP)<- (SP)-16仍指向栈顶。
- SP出栈只是修改了指针使其后的BX能顺利出栈,而堆栈指针中原先由PUSHA指令存入SP的原始内容被丢弃,并未真正的送到SP寄存器中去。
- 在80x86里,所有的I/O端口与CPU端口之间的通信都由IN和OUT指令来完成。
- Push、Pop指令的操作数不能是字节如AH,必须是AX,还可以是32位EAX。
- 移位次数大于1时,必须先将次数放入CL寄存器中再用寄存器寻址方式。
- MUL、DIV指令为单操作数指令,目的操作数默认为AX。
- 段基址:逻辑地址的一部分,用于表示一个逻辑段的起始地址
- 有效地址即偏移量:用于指示被访问内存单元距离段基地址的字节距离。
- 8086/8088的存储器是分段的,因此存储单元的物理地址是由段地址和偏移地址组合而成的。
- 标号和变量均有三种属性,分别是段属性、偏移量属性和类型属性。
- 段内子程序调用要压入堆栈2个字节数据来保存程序的返回地址,段间子程序调用要压入堆栈4个字节的数据来保存程序的返回地址(2段2偏移),中断执行要压入6个字节的数据来保存中断服务程序的返回地址。
- DEBUG中T命令的功能是单步执行下一条指令。
- 条件转移指令的最大转移范围为-128~127个字节。
- 物理地址:也叫实际地址或绝对地址,是CPU访问存储器实际使用的地址,为20位地址。
- 段地址:段起始地址的高16位。
- 偏移地址(有效地址EA):段内相对于段起始地址的偏移值。
- 物理地址 = 段基址 * 16 + 偏移地址。
- 宏指令简化程序的书写,不节省程序存储空间,但执行时间比子程序短。
- 子程序简化程序的书写,也节省程序的存储空间,但执行时间比宏指令长。
- 在程序执行的过程中, IP寄存器中始终保存的是下一条指令的首地址。与代码段联用确定下一条指令的物理地址。
- INC、DEC指令执行结果除不影响CF位以外,其余状态位(AF、OF、PF、SF、ZF)都受影响。
- 经EQU定义的符号不占用存储空间。
- 除法指令对所有条件码均无定义
- 缓冲区是先进先出的循环队列。
- 在系统定时器的中断处理程序中,有一条中断指令INT 1CH,时钟中断每发生一次都要嵌套调用一次中断类型1CH处理程序。
- 段寄存器和相应存放偏移地址的寄存器之间的默认组合:
|
|
|
|
|
|
|
|
|
|