我想交换两位的位置。这该怎么做?
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)
我有一个问题,我必须编写一个程序,使第一个段偏移地址的最后一位成为第二个段偏移地址的第一位。例如,如果我得到 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)