汇编程序说明

来源:百度知道 编辑:UC知道 时间:2024/06/09 13:38:02
设0~9数字序列对应的密码表为 9,0,8,2,7,4,6,3,1,5。任意一个二位十进制数转化为对应的二位密码,如94密码为57,
data segment
table db 1,8,3,7,5,9,6,4,2,0 ;解密码表
x db 84H
y db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bh,0
mov al,x ;取密码
mov bl,al ;?
and bl,0fh ;?
mov dl,table[bx] ;查表取得转换数码
mov bl,al ;?
mov cl,4
shr bl,cl ;高位密码移到低位,这里为什么要这样做?
mov dh,table[bx]
shl dh,cl ;转换后的数码移到高位,这里也不懂?
or dl,dh
mov y,dl ;存入转换结果
mov ah,4ch ;返回DOS
int 21
code ends
end start
这个程序是书上的,我自己看不懂为什么这样做,已经在注释哪里提问了,麻烦高手解说一下

这个查表程序用的是基址寻址方式。程序分别用变量x的低四位(4)和高四位(8)来生成基址寄存器BX的值,然后分别查表取得各自的密码,再把这两个密码值合在一起,形成一个字节的密码。

楼主不明白的地方在于,程序中一会儿逻辑右移4位,一会儿又逻辑左移4位。 右移是为了拆分,左移是为了合并。

我这么解释一下,能明白了吗?