unsafe.asm
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· 汇编 代码 · 共 710 行 · 第 1/2 页
ASM
710 行
; -----------------------------------------------
; $Id: unsafe.asm,v 1.6 2004/01/20 19:30:17 epr Exp $
;
; Native method implementation for org.jnode.vm.Unsafe
;
; Author : E. Prangsma
; -----------------------------------------------
extern VmThread_runThread
extern bootHeapStart
extern bootHeapEnd
extern freeMemoryStart
Q43org5jnode2vm6Unsafe23addressOf2e28Ljava2flang2fObject3b29Lorg2fjnode2fvm2fAddress3b:
Q43org5jnode2vm6Unsafe23addressToInt2e28Lorg2fjnode2fvm2fAddress3b29I:
Q43org5jnode2vm6Unsafe23intToAddress2e28I29Lorg2fjnode2fvm2fAddress3b:
mov eax,[esp+4] ; object
ret 4
Q43org5jnode2vm6Unsafe23addressToLong2e28Lorg2fjnode2fvm2fAddress3b29J:
mov eax,[esp+4] ; address -> lsb
xor edx,edx ; msb
ret 4
Q43org5jnode2vm6Unsafe23longToAddress2e28J29Lorg2fjnode2fvm2fAddress3b:
mov eax,[esp+4] ; LSB long -> address
ret 8 ; We ignore the MSB here.
Q43org5jnode2vm6Unsafe23pushInt2e28I29V:
Q43org5jnode2vm6Unsafe23pushLong2e28J29V:
Q43org5jnode2vm6Unsafe23pushObject2e28Ljava2flang2fObject3b29V:
ret
Q43org5jnode2vm6Unsafe23objectAt2e28Lorg2fjnode2fvm2fAddress3b29Ljava2flang2fObject3b:
mov eax,[esp+4] ; memPtr
ret 4
Q43org5jnode2vm6Unsafe23getVmClass2e28Ljava2flang2fObject3b29Lorg2fjnode2fvm2fclassmgr2fVmClassType3b:
mov eax,[esp+4] ; object reference
mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; vmt reference
mov eax,[eax+(TIBLayout_VMTYPE_INDEX+VmArray_DATA_OFFSET)*4]
ret 4
Q43org5jnode2vm6Unsafe23getTIB2e28Ljava2flang2fObject3b295bLjava2flang2fObject3b:
mov eax,[esp+4] ; object reference
mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; TIB reference
ret 4
Q43org5jnode2vm6Unsafe23getSuperClasses2e28Ljava2flang2fObject3b295bLorg2fjnode2fvm2fclassmgr2fVmType3b:
mov eax,[esp+4] ; object reference
mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; TIB reference
mov eax,[eax+(TIBLayout_SUPERCLASSES_INDEX+VmArray_DATA_OFFSET)*4]
ret 4
Q43org5jnode2vm6Unsafe23getObjectFlags2e28Ljava2flang2fObject3b29I
mov eax,[esp+4] ; object reference
mov eax,[eax+ObjectLayout_FLAGS_SLOT*4] ; size
ret 4
Q43org5jnode2vm6Unsafe23setObjectFlags2e28Ljava2flang2fObject3bI29V
mov eax,[esp+8] ; object reference
mov edx,[esp+4] ; new flags
mov [eax+ObjectLayout_FLAGS_SLOT*4],edx
ret 8
Q43org5jnode2vm6Unsafe23getBoolean2e28Lorg2fjnode2fvm2fAddress3b29Z:
mov eax,[esp+4] ; memPtr
movzx eax,byte [eax]
ret 4
; boolean getBoolean(Object object, int offset);
Q43org5jnode2vm6Unsafe23getBoolean2e28Ljava2flang2fObject3bI29Z:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
movzx eax,byte [eax]
ret 8
Q43org5jnode2vm6Unsafe23getByte2e28Lorg2fjnode2fvm2fAddress3b29B:
mov eax,[esp+4] ; memPtr
movsx eax,byte [eax]
ret 4
; byte getByte(Object object, int offset);
Q43org5jnode2vm6Unsafe23getByte2e28Ljava2flang2fObject3bI29B:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
movsx eax,byte [eax]
ret 8
Q43org5jnode2vm6Unsafe23getChar2e28Lorg2fjnode2fvm2fAddress3b29C:
mov eax,[esp+4] ; memPtr
movzx eax,word [eax]
ret 4
Q43org5jnode2vm6Unsafe23getShort2e28Lorg2fjnode2fvm2fAddress3b29S:
mov eax,[esp+4] ; memPtr
movsx eax,word [eax]
ret 4
; short getShort(Object object, int offset);
Q43org5jnode2vm6Unsafe23getShort2e28Ljava2flang2fObject3bI29S:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
movsx eax,word [eax]
ret 8
; char getChar(Object object, int offset);
Q43org5jnode2vm6Unsafe23getChar2e28Ljava2flang2fObject3bI29C:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
movzx eax,word [eax]
ret 8
; int getInt(Address memPtr);
Q43org5jnode2vm6Unsafe23getInt2e28Lorg2fjnode2fvm2fAddress3b29I:
mov eax,[esp+4] ; memPtr
mov eax,dword [eax]
ret 4
; int getInt(Object object, int offset);
Q43org5jnode2vm6Unsafe23getInt2e28Ljava2flang2fObject3bI29I:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
mov eax,dword [eax]
ret 8
; long getLong(Address memPtr);
Q43org5jnode2vm6Unsafe23getLong2e28Lorg2fjnode2fvm2fAddress3b29J:
mov eax,[esp+4] ; memPtr
mov edx,dword [eax+4] ; MSB
mov eax,dword [eax+0] ; LSB
ret 4
; long getLong(Object object, int offset);
Q43org5jnode2vm6Unsafe23getLong2e28Ljava2flang2fObject3bI29J:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
mov edx,dword [eax+4] ; MSB
mov eax,dword [eax+0] ; LSB
ret 8
; float getFloat(Address memPtr);
Q43org5jnode2vm6Unsafe23getFloat2e28Lorg2fjnode2fvm2fAddress3b29F:
mov eax,[esp+4] ; memPtr
mov eax,dword [eax]
ret 4
; float getFloat(Object objec, int offset);
Q43org5jnode2vm6Unsafe23getFloat2e28Ljava2flang2fObject3bI29F:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
mov eax,dword [eax]
ret 8
; double getDouble(Address memPtr);
Q43org5jnode2vm6Unsafe23getDouble2e28Lorg2fjnode2fvm2fAddress3b29D:
mov eax,[esp+4] ; memPtr
mov edx,dword [eax+4] ; MSB
mov eax,dword [eax+0] ; LSB
ret 4
; double getDouble(Object object, int offset);
Q43org5jnode2vm6Unsafe23getDouble2e28Ljava2flang2fObject3bI29D:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
mov edx,dword [eax+4] ; MSB
mov eax,dword [eax+0] ; LSB
ret 8
; Object getObject(Address memPtr);
; Address getAddress(Address memPtr);
Q43org5jnode2vm6Unsafe23getObject2e28Lorg2fjnode2fvm2fAddress3b29Ljava2flang2fObject3b:
Q43org5jnode2vm6Unsafe23getAddress2e28Lorg2fjnode2fvm2fAddress3b29Lorg2fjnode2fvm2fAddress3b:
mov eax,[esp+4] ; memPtr
mov eax,dword [eax]
ret 4
; Object getObject(Object object, int offset);
; Address getAddress(Object object, int offset);
Q43org5jnode2vm6Unsafe23getObject2e28Ljava2flang2fObject3bI29Ljava2flang2fObject3b:
Q43org5jnode2vm6Unsafe23getAddress2e28Ljava2flang2fObject3bI29Lorg2fjnode2fvm2fAddress3b:
mov eax,[esp+8] ; Object
add eax,[esp+4] ; Offset
mov eax,dword [eax]
ret 8
; void setBoolean(Address memPtr, boolean value);
Q43org5jnode2vm6Unsafe23setBoolean2e28Lorg2fjnode2fvm2fAddress3bZ29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov byte [eax],dl
ret 8
; void setBoolean(Object object, int offset, boolean value);
Q43org5jnode2vm6Unsafe23setBoolean2e28Ljava2flang2fObject3bIZ29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov byte [eax],dl
ret 12
; void setByte(Address memPtr, byte value);
Q43org5jnode2vm6Unsafe23setByte2e28Lorg2fjnode2fvm2fAddress3bB29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov byte [eax],dl
ret 8
; void setByte(Object object, int offset, byte value);
Q43org5jnode2vm6Unsafe23setByte2e28Ljava2flang2fObject3bIB29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov byte [eax],dl
ret 12
; void setShort(Address memPtr, short value);
Q43org5jnode2vm6Unsafe23setShort2e28Lorg2fjnode2fvm2fAddress3bS29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov word [eax],dx
ret 8
; void setShort(Object object, int offset, short value);
Q43org5jnode2vm6Unsafe23setShort2e28Ljava2flang2fObject3bIS29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov word [eax],dx
ret 12
; void setChar(Address memPtr, char value);
Q43org5jnode2vm6Unsafe23setChar2e28Lorg2fjnode2fvm2fAddress3bC29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov word [eax],dx
ret 8
; void setChar(Object object, int offset, char value);
Q43org5jnode2vm6Unsafe23setChar2e28Ljava2flang2fObject3bIC29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov word [eax],dx
ret 12
; void setInt(Address memPtr, int value);
Q43org5jnode2vm6Unsafe23setInt2e28Lorg2fjnode2fvm2fAddress3bI29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 8
; void setInt(Object object, int offset, int value);
Q43org5jnode2vm6Unsafe23setInt2e28Ljava2flang2fObject3bII29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 12
; void setLong(Address memPtr, long value);
Q43org5jnode2vm6Unsafe23setLong2e28Lorg2fjnode2fvm2fAddress3bJ29V:
mov eax,[esp+12] ; memPtr
mov edx,[esp+8] ; value MSB
mov dword [eax+4],edx
mov edx,[esp+4] ; value LSB
mov dword [eax+0],edx
ret 12
; void setLong(Object object, int offset, long value);
Q43org5jnode2vm6Unsafe23setLong2e28Ljava2flang2fObject3bIJ29V:
mov eax,[esp+16] ; Object
add eax,[esp+12] ; Offset
mov edx,[esp+8] ; value MSB
mov dword [eax+4],edx
mov edx,[esp+4] ; value LSB
mov dword [eax+0],edx
ret 16
; void setFloat(Address memPtr, float value);
Q43org5jnode2vm6Unsafe23setFloat2e28Lorg2fjnode2fvm2fAddress3bF29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 8
; void setFloat(Object object, int offset, float value);
Q43org5jnode2vm6Unsafe23setFloat2e28Ljava2flang2fObject3bIF29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 12
; void setDouble(Address memPtr, double value);
Q43org5jnode2vm6Unsafe23setDouble2e28Lorg2fjnode2fvm2fAddress3bD29V:
mov eax,[esp+12] ; memPtr
mov edx,[esp+8] ; value MSB
mov dword [eax+4],edx
mov edx,[esp+4] ; value LSB
mov dword [eax+0],edx
ret 12
; void setDouble(Object object, int offset, double value);
Q43org5jnode2vm6Unsafe23setDouble2e28Ljava2flang2fObject3bID29V:
mov eax,[esp+16] ; Object
add eax,[esp+12] ; Offset
mov edx,[esp+8] ; value MSB
mov dword [eax+4],edx
mov edx,[esp+4] ; value LSB
mov dword [eax+0],edx
ret 16
; void setObject(Address memPtr, Object value);
Q43org5jnode2vm6Unsafe23setObject2e28Lorg2fjnode2fvm2fAddress3bLjava2flang2fObject3b29V:
mov eax,[esp+8] ; memPtr
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 8
; void setObject(Object object, int offset, Object value);
Q43org5jnode2vm6Unsafe23setObject2e28Ljava2flang2fObject3bILjava2flang2fObject3b29V:
mov eax,[esp+12] ; Object
add eax,[esp+8] ; Offset
mov edx,[esp+4] ; value
mov dword [eax],edx
ret 12
Q43org5jnode2vm6Unsafe23intBitsToFloat2e28I29F:
mov eax,[esp+4]
ret 4
Q43org5jnode2vm6Unsafe23floatToRawIntBits2e28F29I:
mov eax,[esp+4]
ret 4
Q43org5jnode2vm6Unsafe23longBitsToDouble2e28J29D:
mov edx,[esp+8] ; MSB
mov eax,[esp+4] ; LSB
ret 8
Q43org5jnode2vm6Unsafe23doubleToRawLongBits2e28D29J:
mov edx,[esp+8] ; MSB
mov eax,[esp+4] ; LSB
ret 8
Q43org5jnode2vm6Unsafe23clear2e28Lorg2fjnode2fvm2fAddress3bI29V:
mov edx,[esp+8] ; memPtr
mov eax,[esp+4] ; Size
push edi
push ecx
mov edi,edx
mov ecx,eax
shr ecx,2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?