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

标签:
it |
分类: 汇编笔记 |
查表指令
指令格式: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即为查找指令 (一个字节)。
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。
; 汇编语言查表指令 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]
可用如下指令实现:
MOV BX,2000H ;BX←表首地址
MOV AL,0BH ;AL←序号
XALT ;查表转换
执行后:AL = 42H
还可用其他方法实现,如:
MOV BX,0BH
MOV AL,[BX+2000H]
前一篇:汇编中INT 21的功能