汇编XLAT指令的应用

来源:互联网 发布:第三方银行数据录入员 编辑:程序博客网 时间:2024/06/02 19:10

    XLAT指令可用于数字得加密,比如我们有一个数组array  db  3,5,8,2,4,7,9,6,10,33;那么如果仅仅提供0,3,2,4这几个数字,array[0]=3,array[5]=7,array[2]=8,array[4]=4,于是对应数字0,3,2,4的数组中的序列就是3,7,8,4。

  在汇编中XLAT指令的作用就是在bx保存array的首地址,AL保存array的位置的基础上,执行XLAT指令,将返回值送入AL指令中.

  指令如下指令后AL=5

   lea    bx,array

    mov    al,1

    xlat        ;返回值AL=array[AL]



例题:

(3)编写一个程序,接受从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为:

输入数字:0,1,2,3,4,5,6,7,8,9

密码数字:7,5,9,1,3,6,8,0,2,4

加密后的数字:

7591368024

          l 

 

代码:

;*********************************************

datarea segment              ;define data segment

    array  db  11

           db  11 dup(?)

           db   "$"

    pwd    db  7,5,9,1,3,6,8,0,2,4

    buffer  db  10  dup(?)

datarea   ends

;*********************************************

prognam segment         ;define code segment

;--------------------------------------

main proc far          ;main part of program

   assume cs:prognam,ds:datarea

start:                     ;start execution address

;set up stack for return

   push ds            ;save old data segment

   sub   ax,ax           ;put zero in ax

   push  ax               ;save it on stack

;save DS register to current data segment

   mov ax,datarea     ;datarea segment address

   mov ds,ax                 ;into ds register

  

;MIAN PART OF PROGRAM GOES HERE

  

    mov ah,10

    lea dx,array

    int 21h

    mov cx,10

    lea bx,array  ;bx存储array的偏移地址

    add  bx,2    

    mov  cx,9   ;循环九次

    mov  si,0

encrypt:          ;加密 

    mov al,pwd[si]

    xlat 

    mov  buffer[si],al   ;将加密后的数写入buffer

    inc   si

    loop  encrypt

    ret

  

main endp       ;end of main part of prognam

;------------------------------------------

prognam  ends

;**********************************************

end  start    ;end of a