1

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

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

现在我们有了 CDABH。现在我想交换D和C的位置。我被困在这一点上。我会使用 SAR 命令吗?

4

1 回答 1

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

现在我们有了 CDABH

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

例如,如果给定我 ABCDH,那么第二个地址的偏移地址应该是 DCBAH

所以你想从 ABCDh 到 DCBAh。

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

该指令mov ax, 0ABCDh将值 0ABhAH放入并将值 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)
于 2019-03-10T20:50:45.957 回答