Assembly 如何将钻头设置到位?
如何在第5位燃烧cf 例如: 我的电话号码是10000111。CF=1=>10001111Assembly 如何将钻头设置到位?,assembly,x86,fasm,Assembly,X86,Fasm,如何在第5位燃烧cf 例如: 我的电话号码是10000111。CF=1=>10001111 我的主要任务是使用shr(shl)生成反向字节。我想自己做,但我不知道如何将位设置在位置以反转位,只需将它们从源移出的同一端移入到目标操作数(即使用相反的移位)。示例代码: mov al, 100d ; 01100100 shr eax, 1 ; cf = 0 ; 00110010 mov al, 100 ; input = 01100100 mov ah, 0
我的主要任务是使用shr(shl)生成反向字节。我想自己做,但我不知道如何将位设置在位置以反转位,只需将它们从源移出的同一端移入到目标操作数(即使用相反的移位)。示例代码:
mov al, 100d ; 01100100
shr eax, 1 ; cf = 0
; 00110010
mov al, 100 ; input = 01100100
mov ah, 0 ; output
mov ecx, 8 ; 8 bits to process
next:
shr al, 1 ; shift next bit out to the right
rcl ah, 1 ; shift it in from the right
loop next
; result in ah = 38 = 0010 1100
不过,要回答您的问题,请将进位移到一个调零的临时寄存器中的给定位置,然后使用按位或将其设置到目标位置。示例代码:
mov al, 100d ; 01100100
shr eax, 1 ; cf = 0
; 00110010
mov al, 100 ; input = 01100100
mov ah, 0 ; output
mov ecx, 8 ; 8 bits to process
next:
shr al, 1 ; shift next bit out to the right
rcl ah, 1 ; shift it in from the right
loop next
; result in ah = 38 = 0010 1100
“…但我不知道如何设置钻头的位置…”
可以理解。有无数的说明
您选择使用的第一个,即SHR
(和SHL
,在本讨论中被忽略),将拨动进位标志以包含您移出的(源寄存器)边缘上的位
还有另一条指令,RCL
(和RCR
,在本次讨论中同样被忽略),它将进位放入另一个边缘(目标寄存器)上的位,也就是说,您将“移入”
连续八次这样做,您将完成您的“reverse-o-matic”程序
这里有两页描述这两个说明,包括一个小图片
嘿,这很简单,所以,免费代码,只是因为我今天感觉很好
mov dl, 0 ; zero temp register, without affecting CF
rcl dl, 5 ; move CF into bit #5 (use CL register for dynamic)
or al, dl ; merge into al
测试它并让我们知道它是否有效我不明白。你能举个例子吗?我不知道RCL的存在。非常感谢。