汇编语言怎么让三十二位逻辑左移?

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:05:44
汇编语言怎么让三十二位逻辑左移?十六位能懂 32位怎么解决
是用8086的汇编语言 位移32位的
如果是位移16位也就不问了 直接RAL AX CX 也就行了 可是32位的怎么弄呢?

汇编语言中,要实现三十二位数据逻辑左移,可以使用SHL(Shiftlogical left)逻辑左移指令和RCL(Rotateleft through carry)含CF循环左移指令结合的方法。
下面具体说明,假如要将AX(低16位)和BX(高16位)中的32位数据逻辑左移N位:
MOV CX,N ;CX=逻辑左移位数
DATARL:
SHL AX,1 ;AX最低位填0,最高位进入CF
RCL BX,1 ;CF进入BX最低位,BX最高位进入CF
LOOP DATARL
执行以上程序段后,AX(低16位)和BX(高16位)中的32位数据被逻辑左移N位。

用带进位的左移,就是RCL
左移时把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位
先用RCL移低位的,再用RCL移高位的就好了,给你弄个注释吧:
假设用AX和DX存放这个32位的数据,AX是高位
AX=1111000011110000B DX=1100110011001100B

ADD AX,0;CF清零,不然左移的时候最低位可能会是1
RCL DX,1
;执行后DX=1001100110011000B
;CF里的0移到最低位,最高位的1再移到CF里,其他位顺序左移
RCL AX,1
;执行后AX=1110000111100001B
;原来DX的最高位移出来的1又通过CF移到了AX的最低位
;这样就实现32位的移位了
===================================================================
RCL的详细使用方法:
带进位的循环左移 RCL (rotate left through carry)

指令的汇编格式:RCL dst,cnt
指令的基本功能:RCL 对由dst指定的寄存器或存储器操作数,连同进位标志CF左循环移动,m所指定的次数,每左移一次,把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位。
指定支持的寻址方式:目的操作数