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 |