我遇到一个问题,我必须编写一个程序,以使第一段的偏移地址的最后一位成为第二段的偏移地址的第一位。例如,如果给我ABCDH,则第二个地址的偏移地址应为DCBAH。我只是专注于偏移地址的交换,而现在却忽略了基地址:
MOV AX,ABCDH
ROR AX,16 ; this will rotate the value of AX 16 times
现在我们有了CDABH。现在我想交换D和C的位置。我会使用SAR命令吗?
答案 0 :(得分: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
将值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位。
对齐的位组具有特殊名称: