加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

汇编当中XLAT查表指令的用法

(2014-06-05 17:52:48)
标签:

it

分类: 汇编笔记

 

 

 查表指令 XLAT (XLAT: 字节查表转换)。
  指令格式:XLAT TABLE 其中TABLE为一待查表格的首地址。
  指令功能:把待查表格的一个字节内容送到AL累加器中。在执行该指令前,应将TABLE先送至BX寄存器中,然后将待查字节与其在表格中距表首地址位移量送AL,即AL<--((BX)+(AL)). 执行XLAT将使待查内容送到累加器
  本指令不影响状态标位,表格长度不超过256字节。

 

 

举例:编辑本段

3.1 例一

  X DW 1122H,3344H,5566H,7788H。
  LEA BX,X。
  MOV AL,03H。
  XLAT。
  结果AL为33H。
  XLAT作用:将((BX)+(AL))送给(AL)----简单:将BX为首地址的,偏移地址为AL的内容送给AL。
  在运行XLAT之前,AL=3 BX=(X的首地址)。
  这时BX+AL就是33....为什么?注意高地址放在下面。
  也就是。
  --------------
  22------BX指向这里。
  11。
  44。
  33-----偏移地址AL为3的位置就是这里。
  --------------
  XLAT X。
  在执行XLAT之前,先将X的地址送给BX,偏移次数送给AL。
  XLAT即为查找指令 (一个字节)。

3.2 例二

  ;xlat指令测试。
  ; 汇编语言查表指令 XLAT。
  ; 查表指令 XLAT。
  ; 指令格式:XLAT TABLE 其中TABLE为一待查表格的首地址
  ; 指令功能:把待查表格的一个字节内容送到AL累加器中。在执行该指令前,
  ; 应将TABLE先送至BX寄存器中,然后将待查字节与其在表格中距表首地址位移量送AL,
  ; 即(AL)<--((BX)+(AL)). 执行XLAT将使待查内容送到累加器。 注意:是将bx和al中的值相加再取地址
  ; 本指令不影响状态标位,表格长度不超过256字节。
  assume cs:code,ds:data。
  data segment。
  tab db 1000000b,1111001b,0100100b,0110000b。
  db 0011001b,0010010b,0000010b,1111000b。
  db 0000000b,0010000b,0001000b,0000011b。
  db 1000110b,0100001b,0000110b,0001110b。
  db 0010110b,0100001b,0010010b,0110000b.
  XCODE db 9。
  YCODE db ?。
  data ends。
  code segment。
  start:
  mov ax,data。
  mov ds,ax。
  mov bx,offset tab。
  mov al,XCODE。 
  and al,0fH。 
  xlat 。 
  mov YCODE,al。
  mov ah,4cH。
  int 21H。
  code ends。
  end start。

3.3 例三

http://p9.qhimg.com/dr/200_200_/t01391802f1fd62d377.png  如图,数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第11个代码的ASCII码。
  可用如下指令实现:
  MOV BX,2000H ;BX←表首地址
  MOV AL,0BH ;AL←序号
  XALT ;查表转换
  执行后:AL = 42H
  还可用其他方法实现,如:
  MOV BX,0BH
  MOV AL,[BX+2000H]

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有