菜鸟请教一道简单汇编题

来源:百度知道 编辑:UC知道 时间:2024/05/17 12:57:28
题目:
MOV DX,1234H
MOV AX,5678H
MOV CX,4
AGAIN: ROL AX,1
RCL DX,1
LOOP AGAIN
答案上DX是2345,我还是搞不懂为什么是这样啊,我的做法是如果CF开始是,那DX就是2348,如果CF开始是0那DX就是2340,请问我错在哪里啊?麻烦给出详细的解答步骤,感谢了。
问题是要求最后 DXAX的值,AX的很好求,我求出来了,就差DX了,麻烦各位了。

ROL是循环左移指令,它们移出的位不仅要进入CF,而且还要填补空出的位。而RCL是带进位的循环左移指令,用原CF的值填补空出的位,移出的位再进入CF。两者相近,但又不同,容易混淆。

AX循环左移4位,结果AX=6785H
DX循环左移4位,结果DX=2345H

关键点:RCL DX,1的执行结果,受ROL AX,1的影响;而ROL AX,1的执行结果,不受RCL DX,1的影响。

移位过程如下:

第1次执行循环体
ROL AX,1
0101011001111000→1010110011110000,CF=0
RCL DX,1
0001001000110100→0010010001101000,第0位的0=CF(ROL AX,1产生的)

第2次执行循环体
ROL AX,1
1010110011110000→0101100111100001,CF=1
RCL DX,1
0010010001101000→0100100011010001,第0位的1=CF

第3次执行循环体
ROL AX,1
0101100111100001→1011001111000010,CF=0
RCL DX,1
0100100011010001→1001000110100010,第0位的0=CF

第4次执行循环体
ROL AX,1
1011001111000010→0110011110000101,CF=1,AX=6785H
RCL DX,1
1001000110100010→0010001101000101,第0位的1=CF,DX=2345H

AX 中的高四位0101,逐次移进DX的低四位,所以DX是2345。