菜鸟请教一道简单汇编题MOV DX,1234HMOV AX,5678HMOV CX,4AGAIN:ROL AX,1RCL

1个回答

  • 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