Assembly 和CF设置的SHL指令

Assembly 和CF设置的SHL指令,assembly,x86,Assembly,X86,我试图理解SHL指令是如何设置OF和CF标志的,在很大程度上我理解它是如何发生的,但有一个特殊的例子我想不起来 考虑以下情况: ; RAX == 0x18F2086424981487 SHL RAX, 0x22 在此之后,标志状态如下: OF == 0, CF == 0 我来解释一下我的逻辑 CF始终是从目标推出的最后一位,因此在这种情况下,如果移位计数大于1,则未定义的0x18f2086444981487(请参阅伪代码)。0x22>1。0x78同上(0x78模块0x40>1) UP

我试图理解SHL指令是如何设置OF和CF标志的,在很大程度上我理解它是如何发生的,但有一个特殊的例子我想不起来

考虑以下情况:

; RAX == 0x18F2086424981487
SHL     RAX, 0x22
在此之后,标志状态如下:

OF == 0, CF == 0
我来解释一下我的逻辑


CF始终是从目标推出的最后一位,因此在这种情况下,如果移位计数大于1,则未定义的
0x18f2086444981487(请参阅伪代码)。0x22>1。0x78同上(0x78模块0x40>1)

UPD

请试着理解未定义意味着OF可能会变成任何东西(保持不变或改变)


如果您暗示当移位计数大于1时,CPU没有将设置为随机值,那么您完全正确。事实并非如此。但是,在这种情况下,OF的实际公式没有记录。你可以从实验中推断出来。但这不是你可以依赖的。事实上,我以前做过这个实验,为不同的CPU找到了3种不同的公式(AMD、带超线程的英特尔、不带超线程的英特尔、AFAIR)。你用这个做什么?

你引用了它。。。“OF标志仅在1位移位时受影响。”:)@Ped7g与手册中常见的情况一样,该语句本身是不完整或不明确的,并且可能被错误地理解为OF仅在移位计数为1时发生变化。但是,当移位计数大于1时,文本后面的伪代码明确表示OF未定义。@Ped7g请参阅edit@AlexeyFrunze请参阅编辑手册。手册保证x86 CPU将设置为0或1,但不保证移位计数大于1时设置为0或1。您碰巧发现,在本例中,CPU上的值为1。好了,除此之外,没什么有趣的话可说了。在手册上注明“未定义”的某些情况下,实际行为是有趣和/或有用的(例如)。但正如我所说,IDK的实际行为是什么,或者它是否有用。
; RAX == 0xABECFF1297783575
SHL     RAX, 0x78
CF == 1, OF == 1