用汇编指令xlat实现对数据的加密
xlat是汇编程序中常用的指令,;换码指令,也叫查表指令。用于改变al中的数据 将[al+bx]赋值给al。
指令功能:把待查表格的一个字节内容送到AL累加器中。在执行该指令前,应将TABLE先送至BX寄存器中,然后将待查字节与其在表格中距表首地址位移量送AL,即AL<--((BX)+(AL)). 执行XLAT将使待查内容送到累加器。
具体代码如下:
;输入4位数字得到密码,每一位数字是一个数组下标。按照数组mima输出。
;例如:输入:4568 输出:5794
.model small
.data ;定义数据段
mima db '3860579241' ;密码表
temp db 4 dup(0)
inputif db 'Please input 4 numbers: $'
crlf db 10,13,'$' ;回车换行
outputif db 'Your secret code is: $'
termif db 'The program runs over!',10,13,'$' ;表示程序结束
.code ;定义代码段
start: mov ax,@data
mov ds,ax ;设置数据段的段地址ds
mov dx, offset inputif ;取得inputif 的偏移地址, 也就是在ds段中的偏移地址
mov ah, 9 ;9号功能表示要显示一行字符串
int 21h
mov bx, offset mima ;取得mima的偏移地址放到bx中
mov cx, 4
lea si, temp ;获取temp的偏移地址放到si中
next: mov ah,1 ;从键盘上输入一个字符,将其对应字符的ASCII码送入AL中
int 21h ;并在屏幕上显示该字符。
and al, 0fh ;与运算将al的前四位制零, 将ASCII码转换为数字 ; 48的二进制位110000
xlat ;换码指令,改变al中的数据 将[al+bx]赋值给al
mov [si], al ;依次取出bx指向的mima中的前4位放到temp中
inc si
loop next
lea dx, crlf
mov ah,9 ;该功能为显示DS:DX地址处的字符,回车换行
int 21h
lea dx, outputif
mov ah, 9
int 21h ;输出outputif中的内容
mov cx, 4 ;打印temp
lea si,temp
next2: mov dl, [si] ;显示取出的4位数
mov ah, 2 ;调用2号中断,显示输出dl中的内容
int 21h
inc si
loop next2
lea dx, crlf ;回车换行
mov ah,9
int 21h
lea dx, termif ;显示termif中的内容
mov ah,9
int 21h
mov ah,4ch ;退出,表示要返回DOS
int 21h
end start