我想交换两位的位置。这该怎么做?

I want to swap the position of two bits. How to do this?

我有一个问题,我必须编写一个程序,使第一个段偏移地址的最后一位成为第二个段偏移地址的第一位。例如,如果我得到 ABCDH,那么第二个地址的偏移地址应该是 DCBAH。我只关注偏移地址的交换,暂时忽略基地址:

MOV AX,ABCDH
ROR AX,16  ;    this will rotate the value of AX 16 times

现在我们有了 CDABH。现在想调换D和C的位置,卡在这了。我会使用 SAR 命令吗?

MOV AX,ABCDH
ROR AX,16  ;    this will rotate the value of AX 16 times

Now we have CDABH

AX 寄存器有 16 位。当您将这 16 位旋转 16 次时,您将获得与开始时相同的值!

For example if I am given ABCDH then the offset address of the second address should be DCBAH

所以你想从 ABCDh 到 DCBAh。

AX 寄存器分为两半。低半部分命名为 AL,高半部分命名为 AH。您可以独立操作这些部分。

指令mov ax, 0ABCDh将值0ABh放入AH,将值0CDh放入AL

mov     ax, 0ABCDh  ; AH = 0ABh AL = 0CDh
rol     al, 4       ; AH = 0ABh AL = 0DCh 
rol     ah, 4       ; AH = 0BAh AL = 0DCh
xchg    al, ah      ; AH = 0DCh AL = 0BAh

现在终于AX=0DCBAh.


以上所有都涉及 4 位数量。我们称这些半字节。
您可以使用像 1010101111001101b 这样的二进制表示来写入您的十六进制值 0ABCDh。你可以看到有 16 位。

对齐的位组有特殊的名称:

  • 每4位组成一个半字节,可以看到有4个半字节。 (1010 1011 1100 1101)
  • 每8位组成一个字节,可以看到有2个字节。 (10101011 11001101)
  • 每16位组成一个,可以看到有1个字。 (1010101111001101)