用汇编指令xlat实现对数据的加密

用汇编指令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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥自在”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值