汇编指令名:XLAT(换码指令)
实现的功能: 实现编码的快速转换
实现的机理: 初始化条件是 在数据段建立一个转换表table, 将该表的首地址加载给BX, 在AL中加载要转换的编码,
跟据对应关系,将AL中的编码适当转化以使其与表格中的换码对应,
然后执行指令 XLAT table,其中table是可选,只为可读性考虑。
(AL)<-------( [(BX) +(AL) ] ) = ( table[AL] )
具体指令:
- MOV BX, OFFSET table ; LEA BX, table
- MOV AL, 被调整后的源码
- XLAT table
一个简单的实例: 将bx中二进制数用十六进制的形式显示在屏幕上
- ;************************************************************
- ; title: 将bx寄存器中的二进制数用16进制数的形式显示在屏幕上
- ;*************************************************************
- data segment
- table db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
- db 'A', 'B', 'C', 'D', 'E', 'F'
- table_case_big db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
- db 'A', 'B', 'C', 'D', 'E', 'F'
- table_case_small db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
- db 'a', 'b', 'c', 'd', 'e', 'f'
- data ends
- code segment
- assume cs:code, ds:data
- start:
- mov ax, data
- mov ds, ax
- mov bx, 89FEh
- mov ch, 4
- rotate:
- mov cl, 4
- rol bx, cl
- mov al, bl
- and al, 0fh
- ; display the one bit of hex
- push bx
- push ax
- push dx
- mov bx, offset table
- xlat table
- mov dl, al
- mov ah, 02h
- int 21h
- pop dx
- pop ax
- pop bx
- ; end of display
- dec ch
- jnz rotate
- mov ah, 4ch
- int 21h
- code ends
- end start
该实例的另一种用数学的实现方法:
- ;将bx中二进制数以十六进制的形式显示在屏幕上
- data segment
- data ends
- code segment
- assume cs:code, ds:data
- start:
- mov ax, data
- mov ds, ax
- mov bx, 89feh
- mov ch, 4
- rotate:
- mov cl,4
- rol bx, cl
- mov al, bl
- and al, 0fh
- add al, 30h
- cmp al, 3ah
- js print
- add al, 07h
- print:
- mov dl, al
- mov ah, 02h
- int 21h;
- dec ch
- jnz rotate
- mov ah, 4ch
- int 21h
- code ends
- end start