汇编--指令详解 XLAT XCHG CALL RET IRET中断

XLAT  换码指令

XLAT指令规定:BX寄存器存放的首地址,AL寄存器中存放表内偏移量,执行XLAT指令,以段寄存器DS的内容为段基址,有效地址为BX和AL内容之和,取出表中一个字节内容送AL中。
以DS:【BX+AL】为地址 , 取出表中一个字节送到AL中
例 3.24内存中有一起始地址为TABLE的编码表,试编程将表中顺序号为4的存储单元内容送寄存器AL。

         ·MODEL SMALL
         ·DATA
  TABLE      DB 11H,22H,33H,44H,55H 某编码表
         ·CODE
         ·STARTUP
          MOV AL,4           ;AL←4
          MOV BX,OFFSET TABLE     ;BX←TABLE表首地址
          XLAT             ;结果在AL中,AL=55H
         ·EXIT
          END

  查表指令不影响标志位。

XCHG 交换指令

XCHG指令不允许的情况有以下四种:
1. 不能同时都为内存操作数
2. 任何一个操作数都不能为段寄存器 重要 凡是S结尾的都不行
3. 任何一个操作数不能为立即数 凡是有立即数 都不对
4. 两个操作数的长度必须相等 长度必须相当

1、依据位移进行转移的call指令

call 标号” ,相当于进行:

 
 
push IP
jmp near ptr 标号
 
 

2、转移地址在寄存器中的call指令

call 16位reg  ,相当于进行:

push IP
jum 16位寄存器

3、转移的目的地址在指令中的call指令

call far ptr 标号 ,相当于进行:

push CS
push IP
jmp far ptr 标号

4、 转移地址在内存中的call指令

有两种格式:

1) call word ptr 内存单元地址,相当于:

push IP
jum word ptr 内存单元地址

  2) call dword ptr 内存单元地址,相当于:

push CS
push IP
jmp dword ptr 内存单元地址

RET 和 RETF

ret 指令用栈中的数据,修改IP的内容,从而实现近转移

retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移

CPU执行ret指令时,相当于进行:

pop IP

CPU执行retf指令时,相当于进行:

pop IP
pop CS
软件中断(内中断)
  • 中断指令INT引起的内中断
  • 处理CPU某些错误的中断(除法错中断、溢出中断)
  • 为调试程序设置的中断(单步中断、断点中断)

除法错中断:执行除法指令,结果溢出产生的 0 号中断

单步中断:TF=1在每条指令执行后产生的 1 号中断

断点中断:用于断点调试(INT 3)的 3 号中断

溢出中断:执行溢出中断指令,OF=1产生的 4 号中断

 
INT N ;中断调用指令:
  1. 产生N号中断 Push (flags);
  2. IF<-0,TF<-0;
  3. PUSH (CS),(IP)
  4. (IP)<-(N*4)
  5. (CS)<-(N*4+2)
IRET ;中断返回指令:实现中断返回
  1. (IP)<-POP
  2. (CS)<-POP
  3. (FLAGS)<-POP
INTO ;溢出中断指令:
  • 若溢出标志OF=1,产生4号中断
  • 否则顺序执行

 

硬件中断(外中断)

  • 可屏蔽中断(来自外部设备)
  • 非屏蔽中断  类型号为2,CPU总会响应它,程序员无法控制。

 

优先级最高:

  • 内部中断
  • 非屏蔽中断(NMI)
  • 可屏蔽中断(INTR)

优先级最低:单步中断

 

中断处理过程

  • 取中断类型号N
  • FLAGS、CS、IP入栈,IF=TF=0
  • 计算中断向量地址4*N
  • 取中断向量,偏移地址送IP,段地址送CS
  • 转入中断处理程序
  • 中断返回到INT指令的下一条指令。

正在运行的中断处理程序,又被其他中断源中断,这种情况叫中断嵌套.
中断嵌套要受到堆栈容量的限制.

一个正在执行的中断处理程序,

  • 在开中断(IF=1)的情况下,能被优先级高于他的中断源中断
  • 但如果要被同级/低级的中断源中断,则必须发出EOI命令,清除正在执行的中断请求,才能响应同级/低级中断

 

 

 

 

 

 

 

 

你可能感兴趣的:(汇编--指令详解 XLAT XCHG CALL RET IRET中断)