我正在使用互联网上的补习说进行SCJP考试.
根据我的说明,>>操作员应该是右移,右边是符号位.虽然左移位运算符<<应该保留符号位.
然而,在我周围玩耍时,我可以用<<操作员移动标志(fe Integer.MAX_VALUE << 1评估为-2,而我永远无法用>>操作员移动标志.
我一定是在误解这里的东西,但是什么?
我正在通过paul caurter从PC Assembly学习80386
mul source
Run Code Online (Sandbox Code Playgroud)
- 如果操作数是字节大小,则将其乘以AL寄存器中的字节,结果存储在AX的16位中.
精细.
- 如果源是16位,则将其乘以AX中的字,32位结果存储在DX:AX中.
Q1:为什么选择DX:AX?为什么它不能存储在EAX/EDX中?
imul 真是令人困惑
imul dest, source1
imul dest, source1, source2
Run Code Online (Sandbox Code Playgroud)
alt text http://img697.imageshack.us/img697/8976/imul.gif
我在理解表格方面遇到了问题.
Q2:在表的第2个条目中.再次,为什么DX:AX.为什么不EAX或EDX?
现在考虑以下代码片段:
imul eax ; edx:eax = eax * eax
mov ebx, eax ; save answer in ebx
mov eax, square_msg ; square_msg db "Square of input is ", 0
call print_string ; prints the string eax
mov eax, ebx
call print_int ; prints the int stored in eax
call …Run Code Online (Sandbox Code Playgroud) 我正在设计一个简单的玩具指令集和随附的模拟器,并且正在尝试找出支持哪些指令。在算术方面,我目前有无符号加法、减法、乘法和除法。但是,我似乎无法找到以下问题的明确答案:哪些算术运算符需要签名版本,哪些算术运算符的无符号和补码签名版本等效?
例如,1111 的补码等于 -1。如果你加 1 并假装它是一个无符号数,你会得到 0000,即使将其视为 -1,这也是正确的。然而,这对所有数字都适用吗?那么其他三个运算(减法、乘法、除法)呢?
在MIPS组件中,使用addiuover有addi什么好处?是不是addiu未签名的(会破坏我们的计算?)
正如标题中所述,为什么ARM指令集仅区分有符号和无符号?
SDIV和UDIV可用,但ADD,SUB和MUL不是这种情况.