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编码的?
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”。
高深!