换码指令XLAT的使用

汇编指令名:XLAT(换码指令)

实现的功能: 实现编码的快速转换

实现的机理: 初始化条件是 在数据段建立一个转换表table, 将该表的首地址加载给BX, 在AL中加载要转换的编码,

                        跟据对应关系,将AL中的编码适当转化以使其与表格中的换码对应,

                        然后执行指令 XLAT  table,其中table是可选,只为可读性考虑。

                        (AL)<-------(  [(BX) +(AL) ] ) = ( table[AL] )

具体指令: 

Code:
  1. MOV BX,   OFFSET table          ; LEA BX, table    
  2. MOV AL,   被调整后的源码   
  3. XLAT   table  

                        

一个简单的实例: 将bx中二进制数用十六进制的形式显示在屏幕上

Code:
  1. ;************************************************************   
  2. ;   title: 将bx寄存器中的二进制数用16进制数的形式显示在屏幕上   
  3. ;*************************************************************   
  4.   
  5. data segment   
  6.     table db '0''1''2''3''4''5''6''7''8''9'  
  7.           db 'A''B''C''D''E''F'  
  8.              
  9.     table_case_big      db '0''1''2''3''4''5''6''7''8''9'  
  10.                         db 'A''B''C''D''E''F'  
  11.        
  12.     table_case_small    db '0''1''2''3''4''5''6''7''8''9'  
  13.                         db 'a''b''c''d''e''f'  
  14.                    
  15. data ends   
  16.   
  17. code segment   
  18.     assume cs:code, ds:data   
  19.        
  20. start:   
  21.         mov ax, data   
  22.         mov ds, ax   
  23.            
  24.         mov bx, 89FEh   
  25.            
  26.         mov ch, 4   
  27. rotate:   
  28.         mov cl, 4   
  29.         rol bx, cl   
  30.         mov al, bl   
  31.         and al, 0fh   
  32.   
  33. ; display the one bit of hex           
  34.         push bx   
  35.         push ax   
  36.         push dx   
  37.            
  38.         mov bx, offset table   
  39.         xlat table   
  40.         mov dl, al   
  41.         mov ah, 02h   
  42.         int 21h   
  43.            
  44.         pop dx   
  45.         pop ax   
  46.         pop bx   
  47. ; end of display   
  48.            
  49.         dec ch   
  50.         jnz rotate     
  51.            
  52.         mov ah, 4ch   
  53.         int 21h        
  54.            
  55.            
  56. code ends   
  57.   
  58.   
  59.     end start   
  60.   

 该实例的另一种用数学的实现方法:

Code:
  1. ;将bx中二进制数以十六进制的形式显示在屏幕上   
  2. data segment    
  3. data ends   
  4.   
  5. code segment   
  6.     assume cs:code, ds:data   
  7.        
  8. start:   
  9.     mov ax, data   
  10.     mov ds, ax   
  11.        
  12.     mov bx, 89feh   
  13.        
  14.     mov ch, 4   
  15. rotate:   
  16.     mov cl,4   
  17.     rol bx, cl    
  18.     mov al, bl   
  19.     and al, 0fh   
  20.     add al, 30h   
  21.     cmp al, 3ah   
  22.     js  print   
  23.     add al, 07h   
  24.        
  25. print:   
  26.       mov dl, al   
  27.       mov ah, 02h   
  28.       int 21h;   
  29.          
  30.       dec ch   
  31.       jnz rotate   
  32.          
  33.       mov ah, 4ch   
  34.       int 21h   
  35.        
  36. code ends   
  37.     end start   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值