80486微处理器的指令系统P58

来源:百度知道 编辑:UC知道 时间:2024/06/11 09:35:50
利用查表转换功能实现一位十六进制数与ASCII码的转换

DATA SEGMENT
TAB DB '0123456789ABCDEF'
NUM DB ?
DATA ENDS

代码段设置如下指令,即可查出与NUM单元中的数相对应的ASCII编码:

MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TAB
MOV AL,NUM
XLAT

我想问下,每一行的意思是什么?
通过MOV与XLAT的那些指令,是如何得到ASCII编码的?

MOV AX,DATA
MOV DS,AX
这两句没得说,写x86汇编的例行公事。

MOV BX,OFFSET TAB
把字符串TAB,也就是0123456789ABCDEF的首地址放入 BX

MOV AL,NUM
把NUM变量单元中的值赋给 AL

XLAT
换码,以BX为起始,AL为偏移的单元中的数据取出,赋给AL

例如假设 AL=NUM=11,则从BX=TAB索引的位置起始(也就是从TAB字符串的开始处起始),偏移11字节,找到单元“B”,但事实上ASCII码“B”在内存中的形式为 1000 0002 ,所以将“B”(也就是1000 0002)取出,赋给 AL

从AL寄存器便得到了11相应的十六进制数的ASCII编码1000 0002,也就是“B”。

高深!