unsafe-binop.asm
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· 汇编 代码 · 共 137 行
ASM
137 行
; -----------------------------------------------
; $Id: unsafe-binop.asm,v 1.2 2003/11/28 09:12:32 epr Exp $
;
; Native method implementation for org.jnode.vm.Unsafe
; of the binary operations.
;
; Author : E. Prangsma
; -----------------------------------------------
; BINOP24_VALUES opcode, mask-opcode, mask
%macro BINOP24_VALUES 3
push edi
mov edi,[esp+12] ; memPtr
mov eax,[esp+8] ; value
mov ecx,[esp+4] ; count
jecxz %%end ; (Count == 0) ?
%2 eax,%3 ; Apply Mask
%%loop:
%1 dword [edi],eax
lea edi,[edi+3]
loop %%loop
%%end:
pop edi
ret 12
%endmacro
; BINOP32_VALUES opcode, type, size, reg
%macro BINOP32_VALUES 4
mov eax,[esp+12] ; memPtr
mov edx,[esp+8] ; value
mov ecx,[esp+4] ; count
jecxz %%end ; (Count == 0) ?
%%loop:
%1 %2 [eax],%4
add eax,%3
loop %%loop
%%end:
ret 12
%endmacro
; BINOP64_VALUES opcode
%macro BINOP64_VALUES 1
push edi
mov eax,[esp+16] ; memPtr
mov edx,[esp+12] ; value MSB
mov eax,[esp+8] ; value LSB
mov ecx,[esp+4] ; count
jecxz %%end ; (Count == 0) ?
%%loop:
%1 dword [edi],eax ; LSB
%1 dword [edi+4],edx; MSB
add edi,8
loop %%loop
%%end:
pop edi
ret 16
%endmacro
; -----------------------------------------------
; AND
; -----------------------------------------------
; void andByte(Address memPtr, byte value, int count);
Q43org5jnode2vm6Unsafe23andByte2e28Lorg2fjnode2fvm2fAddress3bBI29V:
BINOP32_VALUES and, byte, 1, dl
; void andShort(Address memPtr, short value, int count);
; void andChar(Address memPtr, char value, int count);
Q43org5jnode2vm6Unsafe23andShort2e28Lorg2fjnode2fvm2fAddress3bSI29V:
Q43org5jnode2vm6Unsafe23andChar2e28Lorg2fjnode2fvm2fAddress3bCI29V:
BINOP32_VALUES and, word, 2, dx
; void andInt24(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23andInt242e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP24_VALUES and, or, 0xFF000000
; void andInt(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23andInt2e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP32_VALUES and, dword, 4, edx
; void andLong(Address memPtr, long value, int count);
Q43org5jnode2vm6Unsafe23andLong2e28Lorg2fjnode2fvm2fAddress3bJI29V:
BINOP64_VALUES and
; -----------------------------------------------
; OR
; -----------------------------------------------
; void orByte(Address memPtr, byte value, int count);
Q43org5jnode2vm6Unsafe23orByte2e28Lorg2fjnode2fvm2fAddress3bBI29V:
BINOP32_VALUES or, byte, 1, dl
; void orShort(Address memPtr, short value, int count);
; void orChar(Address memPtr, char value, int count);
Q43org5jnode2vm6Unsafe23orShort2e28Lorg2fjnode2fvm2fAddress3bSI29V:
Q43org5jnode2vm6Unsafe23orChar2e28Lorg2fjnode2fvm2fAddress3bCI29V:
BINOP32_VALUES or, word, 2, dx
; void orInt24(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23orInt242e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP24_VALUES or, and, 0x00FFFFFF
; void orInt(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23orInt2e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP32_VALUES or, dword, 4, edx
; void orLong(Address memPtr, long value, int count);
Q43org5jnode2vm6Unsafe23orLong2e28Lorg2fjnode2fvm2fAddress3bJI29V:
BINOP64_VALUES or
; -----------------------------------------------
; XOR
; -----------------------------------------------
; void xorByte(Address memPtr, byte value, int count);
Q43org5jnode2vm6Unsafe23xorByte2e28Lorg2fjnode2fvm2fAddress3bBI29V:
BINOP32_VALUES xor, byte, 1, dl
; void xorShort(Address memPtr, short value, int count);
; void xorChar(Address memPtr, char value, int count);
Q43org5jnode2vm6Unsafe23xorShort2e28Lorg2fjnode2fvm2fAddress3bSI29V:
Q43org5jnode2vm6Unsafe23xorChar2e28Lorg2fjnode2fvm2fAddress3bCI29V:
BINOP32_VALUES xor, word, 2, dx
; void xorInt24(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23xorInt242e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP24_VALUES xor, and, 0x00FFFFFF
; void xorInt(Address memPtr, int value, int count);
Q43org5jnode2vm6Unsafe23xorInt2e28Lorg2fjnode2fvm2fAddress3bII29V:
BINOP32_VALUES xor, dword, 4, edx
; void xorLong(Address memPtr, long value, int count);
Q43org5jnode2vm6Unsafe23xorLong2e28Lorg2fjnode2fvm2fAddress3bJI29V:
BINOP64_VALUES xor
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?