根据NEG和NEGU的定义,
NEG $X,Y,$Z (negate signed): s($X) := Y - s($Z).
NEGU $X,Y,$Z (negate unsigned): u($X) := (Y - u($Z)) mod 2^64.让我们假设$Z = s(-1)或u(2^64 - 1)。然后,第一个操作码将在Y = 0时将值1放入$X寄存器,最近的一个操作码将给出相同的结果,因为u(-(2^64 - 1)) mod 2^64 = 1。我说的对吗?$Z = -2^63时NEG指令是否应引发溢出异常
发布于 2013-07-16 12:48:33
简短回答“当$Z =-2^63时,NEG指令是否应该引发溢出异常?”
yes, but you probably already suspected that.从逻辑上讲,NEG $X,0,-2^63应该给出2^63,这超出了有符号正整数的界限,因此溢出。但是如果你像我一样,你想要一个整数溢出确实发生的证据。这就是它:
t IS $255
LOC #20 //handle the integer overflow event
PUSHJ 255,Err
PUT rJ,$255
GET $255,rB
RESUME
LOC #100
Main SET t,#4000
PUT rA,t //set the integer overflow event bit
SETH $0,#8000
NEG $1,0,$0
GETA t,End
TRAP 0,Fputs,StdOut
TRAP 0,Halt,0
End BYTE "End of program",#a,0
Err SET $0,$255 //overflow subroutine, prints out message
GETA t,Emes
TRAP 0,Fputs,StdOut
GET t,rW
INCL t,4
PUT rW,t
SET $255,$0
POP 0,0
Emes BYTE "Error: integer overflow",#a,0https://stackoverflow.com/questions/16967136
复制相似问题