📄 arm-asm.f
字号:
INSTRUCTIOND# stc2 ( -- ) \ ARM Assembler, co-processor instruction
FD800000 , FE100000 , FFFF102C , ' CO-MEM# , F1E000FF ,
INSTRUCTION# cdp2 ( -- ) \ ARM Assembler, co-processor instruction
FE000000 , FF000010 , FF20302C , ' CO-DATA# ,
\ ----------------------------------------------------------------------------
\ ARM5E instructions
\ ----------------------------------------------------------------------------
PUBLIC: d ( -- ) \ ARM Assembler, load/store double instruction modifier
01C000D0
OP-VALUE @ INVERT 00100000 AND 0F RSHIFT OR \ add in ldr/str bit
EXTRA-MEM-OP2
;
\ ----------------------------------------------------------------------------
PUBLIC: pld ( -- ) \ ARM Assembler, PLD instruction
ldr r15 F1400000 F1600000 OP-BUILD ;
\ ----------------------------------------------------------------------------
: CO-MOV2# ( u -- ) \ Handle immediate operand for MCRR/MRCC
0F CHECK#
4 LSHIFT 000000F0 OP-BUILD
RESET-#
;
INSTRUCTION# mcrr ( -- ) \ ARM Assembler, co-processor double instruction
EC400000 , 0FF00000 , FF20100C , ' CO-MOV2# ,
INSTRUCTION# mrrc ( -- ) \ ARM Assembler, co-processor double instruction
EC500000 , 0FF00000 , FF20100C , ' CO-MOV2# ,
\ ----------------------------------------------------------------------------
INSTRUCTION qadd ( -- ) \ ARM Assembler, saturated arithmetic instruction
E1000050 , 0FF00FF0 , FF10000C ,
INSTRUCTION qsub ( -- ) \ ARM Assembler, saturated arithmetic instruction
E1200050 , 0FF00FF0 , FF10000C ,
INSTRUCTION qdadd ( -- ) \ ARM Assembler, saturated arithmetic instruction
E1400050 , 0FF00FF0 , FF10000C ,
INSTRUCTION qdsub ( -- ) \ ARM Assembler, saturated arithmetic instruction
E1600050 , 0FF00FF0 , FF10000C ,
\ ----------------------------------------------------------------------------
INSTRUCTION smlabb ( -- ) \ ARM Assembler, dsp multiply instruction
E1000080 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlatb ( -- ) \ ARM Assembler, dsp multiply instruction
E10000a0 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlabt ( -- ) \ ARM Assembler, dsp multiply instruction
E10000c0 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlatt ( -- ) \ ARM Assembler, dsp multiply instruction
E10000e0 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlawb ( -- ) \ ARM Assembler, dsp multiply instruction
E1200080 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlawt ( -- ) \ ARM Assembler, dsp multiply instruction
E12000c0 , 0FF000F0 , 0C080010 ,
INSTRUCTION smulbb ( -- ) \ ARM Assembler, dsp multiply instruction
E1600080 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smultb ( -- ) \ ARM Assembler, dsp multiply instruction
E16000a0 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smulbt ( -- ) \ ARM Assembler, dsp multiply instruction
E16000c0 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smultt ( -- ) \ ARM Assembler, dsp multiply instruction
E16000e0 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smulwb ( -- ) \ ARM Assembler, dsp multiply instruction
E12000a0 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smulwt ( -- ) \ ARM Assembler, dsp multiply instruction
E12000e0 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smlalbb ( -- ) \ ARM Assembler, dsp multiply instruction
E1400080 , 0FF000F0 , 0800100C ,
INSTRUCTION smlaltb ( -- ) \ ARM Assembler, dsp multiply instruction
E14000a0 , 0FF000F0 , 0800100C ,
INSTRUCTION smlalbt ( -- ) \ ARM Assembler, dsp multiply instruction
E14000c0 , 0FF000F0 , 0800100C ,
INSTRUCTION smlaltt ( -- ) \ ARM Assembler, dsp multiply instruction
E14000e0 , 0FF000F0 , 0800100C ,
\ ----------------------------------------------------------------------------
\ ARM5J instructions
\ ----------------------------------------------------------------------------
INSTRUCTION bxj ( -- ) \ ARM Assembler, branch instruction
E12FFF20 , 0FFFFFF0 , FFFFFF00 ,
\ ----------------------------------------------------------------------------
\ ARM6 instructions
\ ----------------------------------------------------------------------------
INSTRUCTION# mcrr2 ( -- ) \ ARM Assembler, co-processor double instruction
FC400000 , FFF00000 , FF20100C , ' CO-MOV2# ,
INSTRUCTION# mrrc2 ( -- ) \ ARM Assembler, co-processor double instruction
FC500000 , FFF00000 , FF20100C , ' CO-MOV2# ,
\ ----------------------------------------------------------------------------
: CPS# ( u -- ) \ Handle immediate operand for CPS instruction
1F CHECK#
00020000 OR 0002001F OP-BUILD
;
FLAGS IFLAGS ( c -- ) \ Parse flags for CPS instruction
CHAR a C, 8 C,
CHAR i C, 7 C,
CHAR f C, 6 C,
0 C,
INSTRUCTIOND# cpsie ( -- ) \ ARM Assembler, CPS instruction
F1080000 , FFFDFE20 , FFFFFFFF , ' CPS# , F002001F ,
PUBLIC: cpsie ( -- )
cpsie IFLAGS ;
INSTRUCTIOND# cpsid ( -- ) \ ARM Assembler, CPS instruction
F10C0000 , FFFDFE20 , FFFFFFFF , ' CPS# , F002001F ,
PUBLIC: cpsid ( -- )
cpsid IFLAGS ;
INSTRUCTION# cps ( -- ) \ ARM Assembler, CPS instruction
F1000000 , FFFDFFE0 , FFFFFFFF , ' CPS# ,
\ ----------------------------------------------------------------------------
INSTRUCTION setend ( -- ) \ ARM Assembler, SETEND instruction
F1010000 , FFFFFDFF , FFFFFFFF ,
PUBLIC: le ( -- ) \ ARM Assembler, modifier for SETEND instruction
OP-VALUE @ F1010000 = \ if SETEND instruction...
IF 000 200 OP-BUILD \ ... set LE bit to zero
ELSE le \ else do less-or-equal condition code
THEN
;
PUBLIC: be ( -- ) \ ARM Assembler, modifier for SETEND instruction
200 200 OP-BUILD ;
\ ----------------------------------------------------------------------------
INSTRUCTIOND rfe ( -- ) \ ARM Assembler, RFE instruction
F8100A00 , FE50FFFF , FFFFFF10 , 01A00000 ,
: SRS# ( u -- ) \ Handle immediate operand for SRS instruction
1F CHECK# 0000001F OP-BUILD RESET-# ;
INSTRUCTIOND# srs ( -- ) \ ARM Assembler, SRS instruction
F84D0A00 , FE5FFFE0 , FFFFFFFF , ' SRS# , 01A00000 ,
\ ----------------------------------------------------------------------------
INSTRUCTION ldrex ( -- ) \ ARM Assembler, swap instruction
E1900F9F , 0FF00FFF , FFFF100C ,
INSTRUCTION strex ( -- ) \ ARM Assembler, swap instruction
E1800F90 , 0FF00FF0 , FF10000C ,
\ ----------------------------------------------------------------------------
INSTRUCTION umaal ( -- ) \ ARM Assembler, multiply instruction
E0400090 , 0FF000F0 , 0800100C ,
\ ----------------------------------------------------------------------------
: PAS-INSTRUCTION ( x "<spaces>name" -- ) \ Parallel add/sub intruction
PUBLIC-CREATE ,
DOES> ( -- )
@ 0FF00FF0 FF00100C OP-BEGIN
;
E6100F10 PAS-INSTRUCTION sadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6100F30 PAS-INSTRUCTION saddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6100F50 PAS-INSTRUCTION ssubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6100F70 PAS-INSTRUCTION ssub16 ( -- ) \ ARM Assembler, parallel add/sub
E6100F90 PAS-INSTRUCTION sadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6100FF0 PAS-INSTRUCTION ssub8 ( -- ) \ ARM Assembler, parallel add/sub
E6200F10 PAS-INSTRUCTION qadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6200F30 PAS-INSTRUCTION qaddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6200F50 PAS-INSTRUCTION qsubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6200F70 PAS-INSTRUCTION qsub16 ( -- ) \ ARM Assembler, parallel add/sub
E6200F90 PAS-INSTRUCTION qadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6200FF0 PAS-INSTRUCTION qsub8 ( -- ) \ ARM Assembler, parallel add/sub
E6300F10 PAS-INSTRUCTION shadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6300F30 PAS-INSTRUCTION shaddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6300F50 PAS-INSTRUCTION shsubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6300F70 PAS-INSTRUCTION shsub16 ( -- ) \ ARM Assembler, parallel add/sub
E6300F90 PAS-INSTRUCTION shadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6300FF0 PAS-INSTRUCTION shsub8 ( -- ) \ ARM Assembler, parallel add/sub
E6500F10 PAS-INSTRUCTION uadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6500F30 PAS-INSTRUCTION uaddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6500F50 PAS-INSTRUCTION usubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6500F70 PAS-INSTRUCTION usub16 ( -- ) \ ARM Assembler, parallel add/sub
E6500F90 PAS-INSTRUCTION uadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6500FF0 PAS-INSTRUCTION usub8 ( -- ) \ ARM Assembler, parallel add/sub
E6600F10 PAS-INSTRUCTION uqadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6600F30 PAS-INSTRUCTION uqaddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6600F50 PAS-INSTRUCTION uqsubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6600F70 PAS-INSTRUCTION uqsub16 ( -- ) \ ARM Assembler, parallel add/sub
E6600F90 PAS-INSTRUCTION uqadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6600FF0 PAS-INSTRUCTION uqsub8 ( -- ) \ ARM Assembler, parallel add/sub
E6700F10 PAS-INSTRUCTION uhadd16 ( -- ) \ ARM Assembler, parallel add/sub
E6700F30 PAS-INSTRUCTION uhaddsubx ( -- ) \ ARM Assembler, parallel add/sub
E6700F50 PAS-INSTRUCTION uhsubaddx ( -- ) \ ARM Assembler, parallel add/sub
E6700F70 PAS-INSTRUCTION uhsub16 ( -- ) \ ARM Assembler, parallel add/sub
E6700F90 PAS-INSTRUCTION uhadd8 ( -- ) \ ARM Assembler, parallel add/sub
E6700FF0 PAS-INSTRUCTION uhsub8 ( -- ) \ ARM Assembler, parallel add/sub
\ ----------------------------------------------------------------------------
: PKH/SAT-LSR# ( x -- ) \ Handle immediate operand for PKT & SAT shifts
1F CHECK# 7 LSHIFT 00000F80 OP-BUILD RESET-# ;
PUBLIC: lsl ( -- ) \ Extend LSL shift to cope with PKH & SAT instructions
OP-VALUE @ 0F800070 AND 06800010 <>
IF lsl EXIT THEN \ if not PKH/SAT instruction do normal LSL
00000000 00000040 OP-BUILD
['] PKH/SAT-LSR# '# !
;
: PKH/SAT-ASR# ( x -- )
1- 1F CHECK# 1+ 1F AND PKH/SAT-LSR# ;
PUBLIC: asr ( -- ) \ Extend ASR shift to cope with PKH & SAT instructions
OP-VALUE @ 0F800030 AND 06800010 <>
IF asr EXIT THEN \ if not PKH/SAT instruction do normal ASR
00000040 DUP OP-BUILD
['] PKH/SAT-ASR# '# !
;
INSTRUCTIOND pkhbt ( -- ) \ ARM Assembler, PKHBT instruction
E6800010 , 0FF00030 , FF00100C , F0000FC0 ,
PUBLIC: pkhtb ( -- ) \ ARM Assembler, PKHTB instruction
pkhbt ;
: SAT# ( x -- ) \ Handle immediate operand for SAT instructions
1F CHECK# 10 LSHIFT 001F0000 OP-BUILD RESET-# ;
INSTRUCTIOND# ssat ( -- ) \ ARM Assembler, SSAT instruction
E6A00010 , 0FE00030 , FFFF000C , ' SAT# , F0000FC0 ,
INSTRUCTIOND# usat ( -- ) \ ARM Assembler, USAT instruction
E6E00010 , 0FE00030 , FFFF000C , ' SAT# , F0000FC0 ,
: SAT16# ( x -- )
F CHECK# 10 LSHIFT 000F0000 OP-BUILD RESET-# ;
INSTRUCTION# ssat16 ( -- ) \ ARM Assembler, SSAT16 instruction
E6A00F30 , 0FF00FF0 , FFFF000C , ' SAT16# ,
INSTRUCTION# usat16 ( -- ) \ ARM Assembler, USAT16 instruction
E6E00F30 , 0FF00FF0 , FFFF000C , ' SAT16# ,
INSTRUCTION sel ( -- ) \ ARM Assembler, SEL instruction
E6800FB0 , 0FF00FF0 , FF00100C ,
\ ----------------------------------------------------------------------------
: EXT# ( x -- x) \ Handle immediate operand for Extend instructions
DUP FFFFFFE7 AND IF INVALID# THEN
PKH/SAT-LSR#
;
PUBLIC: ror ( -- ) \ Extend ROR shift to cope with Extend instructions
OP-VALUE @ 0F8000F0 AND 06800070 <>
IF ror EXIT THEN \ if not extend instruction do normal ROR
['] EXT# '# !
;
INSTRUCTIOND sxtab16 ( -- ) \ ARM Assembler, extend instruction
E6800070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND sxtab ( -- ) \ ARM Assembler, extend instruction
E6A00070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND sxtah ( -- ) \ ARM Assembler, extend instruction
E6B00070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND uxtab16 ( -- ) \ ARM Assembler, extend instruction
E6C00070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND uxtab ( -- ) \ ARM Assembler, extend instruction
E6E00070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND uxtah ( -- ) \ ARM Assembler, extend instruction
E6F00070 , 0FF00070 , FF00100C , F0000F80 ,
INSTRUCTIOND sxtb16 ( -- ) \ ARM Assembler, extend instruction
E68F0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTIOND sxtb ( -- ) \ ARM Assembler, extend instruction
E6AF0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTIOND sxth ( -- ) \ ARM Assembler, extend instruction
E6BF0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTIOND uxtb16 ( -- ) \ ARM Assembler, extend instruction
E6CF0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTIOND uxtb ( -- ) \ ARM Assembler, extend instruction
E6EF0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTIOND uxth ( -- ) \ ARM Assembler, extend instruction
E6FF0070 , 0FFF0070 , FFFF000C , F0000F80 ,
INSTRUCTION rev ( -- ) \ ARM Assembler, reverse instruction
E6BF0F30 , 0FFF0FF0 , FFFF000C ,
INSTRUCTION rev16 ( -- ) \ ARM Assembler, reverse instruction
E6BF0FB0 , 0FFF0FF0 , FFFF000C ,
INSTRUCTION revsh ( -- ) \ ARM Assembler, reverse instruction
E6FF0FB0 , 0FFF0FF0 , FFFF000C ,
\ ----------------------------------------------------------------------------
INSTRUCTION smuad ( -- ) \ ARM Assembler, multiply instruction
E700F010 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smuadx ( -- ) \ ARM Assembler, multiply instruction
E700F030 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smusd ( -- ) \ ARM Assembler, multiply instruction
E700F050 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smusdx ( -- ) \ ARM Assembler, multiply instruction
E700F070 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smmul ( -- ) \ ARM Assembler, multiply instruction
E750F010 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smmulr ( -- ) \ ARM Assembler, multiply instruction
E750F030 , 0FF0F0F0 , FF080010 ,
INSTRUCTION smlad ( -- ) \ ARM Assembler, multiply instruction
E7000010 , 0FF000F0 , 0C080010 ,
INSTRUCTION smladx ( -- ) \ ARM Assembler, multiply instruction
E7000030 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlsd ( -- ) \ ARM Assembler, multiply instruction
E7000050 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlsdx ( -- ) \ ARM Assembler, multiply instruction
E7000070 , 0FF000F0 , 0C080010 ,
INSTRUCTION smlald ( -- ) \ ARM Assembler, multiply instruction
E7400010 , 0FF000F0 , 0800100C ,
INSTRUCTION smlaldx ( -- ) \ ARM Assembler, multiply instruction
E7400030 , 0FF000F0 , 0800100C ,
INSTRUCTION smlsld ( -- ) \ ARM Assembler, multiply instruction
E7400050 , 0FF000F0 , 0800100C ,
INSTRUCTION smlsldx ( -- ) \ ARM Assembler, multiply instruction
E7400070 , 0FF000F0 , 0800100C ,
INSTRUCTION smmla ( -- ) \ ARM Assembler, multiply instruction
E7500010 , 0FF000F0 , 0C080010 ,
INSTRUCTION smmlar ( -- ) \ ARM Assembler, multiply instruction
E7500030 , 0FF000F0 , 0C080010 ,
INSTRUCTION smmls ( -- ) \ ARM Assembler, multiply instruction
E75000d0 , 0FF000F0 , 0C080010 ,
INSTRUCTION smmlsr ( -- ) \ ARM Assembler, multiply instruction
E75000f0 , 0FF000F0 , 0C080010 ,
\ ----------------------------------------------------------------------------
INSTRUCTION usad8 ( -- ) \ ARM Assembler, USAD instruction
E780F010 , 0FF0F0F0 , FF080010 ,
INSTRUCTION usada8 ( -- ) \ ARM Assembler, USAD instruction
E7800010 , 0FF000F0 , 0C080010 ,
\ ----------------------------------------------------------------------------
PREVIOUS PREVIOUS PREVIOUS DEFINITIONS
DECIMAL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -