Assembly language: floating point operations

2023年8月1日

shl dest, cnt

Logical shift dest to the left by cnt bits

要注意,不管shift left or shift right,都要补上0。在做shl的时候可能没注意,但shr如果没补0,就跟没shift是一样的。

例子

eax=FFFF4CCD
shl eax,F

FFFF4CCD(16)=

11111111111111110100110011001101

(2)=4294921421

向左shift 15次,并补15个0,得

‭A6668000‬(16)=







10100110011001101000000000000000‬
(2)=2791735296

如果在十进制计算,[latex]4294921421 \times 2^{15} \neq 2791735296[/latex]。这是因为shift出去的15 bits要去掉。

下面用Mathematica模拟。

int64Mask = BitShiftLeft[1, 32] - 1;
eax = Interpreter["HexInteger"]["FFFF4CCD"]
BaseForm[eax, 2]
result = BitShiftLeft[eax, 15]
limitedResult = BitAnd[result, int64Mask]
BaseForm[limitedResult, 16]
Out[]= 4294921421
Out[]//BaseForm= 11111111111111110100110011001101(2)
Out[]= 140735985123328
Out[]= 2791735296
Out[]//BaseForm= a6668000(16)

ChatGPT with Code Interpreter也可以算出正确的结果。ChatGPT本身不行,因为这个任务有很多算术运算,神经网络做算术运算的结果是不确定的。但是ChatGPT with Code Interpreter会把算术过程写成Python,Code Interpreter运行该Python代码,这样神经网络结合确定性算法,就能得出正确答案。