+ -
当前位置:首页 → 问答吧 → 紧急求助求助一个汇编问题

紧急求助求助一个汇编问题

时间:2011-01-06

来源:互联网

一段汇编代码,关于32位操作数的
下面的程序的功能是把(DX,AX)的32位二进制数——??
  MOV CX,4
LP:SHL AX,1
  RCL DX,1
  LOOP LP

作者: yuanyingfeiyu   发布时间: 2011-01-06

每左移一位相当于乘以2

作者: z307450494   发布时间: 2011-01-06

但是为什么代码要这么写

作者: yuanyingfeiyu   发布时间: 2011-01-06

为什么是CX是逻辑左移,DX是带进位的循环右移,还有要怎么验证结果

作者: yuanyingfeiyu   发布时间: 2011-01-06

引用 2 楼 yuanyingfeiyu 的回复:
但是为什么代码要这么写

要是使用32位的cpu,就直接乘以16了。
32位操作数, 需要两个16位寄存器保存,所以在16位环境,就得这么写。

作者: masmaster   发布时间: 2011-01-06

为什么是CX是逻辑左移,DX是带进位的循环右移,还有要怎么验证结果,大哥谢谢了!

作者: yuanyingfeiyu   发布时间: 2011-01-06

引用 5 楼 yuanyingfeiyu 的回复:
为什么是CX是逻辑左移,DX是带进位的循环右移,还有要怎么验证结果,大哥谢谢了!

RCL是带进位循环左移指令

作者: masmaster   发布时间: 2011-01-06

对对是左移,说错了,可不可以解释一下

作者: yuanyingfeiyu   发布时间: 2011-01-06

自己在debug里实践一下吧
d:\MASM>debug
-a
1472:0100 mov dx,0123
1472:0103 mov ax,4567
1472:0106 mov cl,4
1472:0108 shl ax,1
1472:010A rcl dx,1
1472:010C loop 108
1472:010E
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1472 ES=1472 SS=1472 CS=1472 IP=0100 NV UP EI PL NZ NA PO NC
1472:0100 BA2301 MOV DX,0123
-t

AX=0000 BX=0000 CX=0000 DX=0123 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1472 ES=1472 SS=1472 CS=1472 IP=0103 NV UP EI PL NZ NA PO NC
1472:0103 B86745 MOV AX,4567
-t

AX=4567 BX=0000 CX=0000 DX=0123 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1472 ES=1472 SS=1472 CS=1472 IP=0106 NV UP EI PL NZ NA PO NC
1472:0106 B104 MOV CL,04
-g=100 10e

AX=5670 BX=0000 CX=0000 DX=1234 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1472 ES=1472 SS=1472 CS=1472 IP=010E NV UP EI PL NZ AC PO NC
1472:010E FA CLI
-q

d:\MASM>

作者: masmaster   发布时间: 2011-01-06

好,谢谢!不胜感激

作者: yuanyingfeiyu   发布时间: 2011-01-06