逻辑位移指令shl和shr是第14章的内容,我感觉书上对这两个指令的描述不是太好理解,实际上对shl指令更容易让人理解的描述是:shl指令对给定的目的操作数左移(cl)次,每次移位时最高的那一位移入CF中,最低位补0,移动位数大于1时,必须将移动位数放在cl中。shr指令也可以类比理解。
通过编写下面的一个子程序,能更加深入的理解了这两个指令。
;功能:把寄存器中的数值显示在屏幕上
;入口参数:ax,需要在屏幕上显示的寄存器
inputReg:
mov cx,0003h ;设置cl=3,初次左移3位。ch=0
s1:shl ax,1 ;每次左移一位,移出后放在CF中
pushf ;标志寄存器入栈
pop bx ;出栈
and bl,0000001b ;取出CF的值
shl bl,cl
add dl,bl
dec cl
inc ch
cmp cl,0ffh ;循环4次,得到ax的最高4位
jnz s1
cmp dl,0ah
jna s2
add dl,37h
jmp s3
s2:add dl,30h
s3:push ax ;调用21h号中断的02h
mov ah,02h
int 21h
pop ax
cmp ch,16
mov cl,3
mov bl,0
mov dl,0
jnz s1
ret