亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? arm-asm.f

?? 這個是關(guān)于G.726算法的源程序
?? F
?? 第 1 頁 / 共 4 頁
字號:
\ ARM Assembler.
\
\ This code has been placed in the Public Domain by J.D.Medhurst (aka Tixy).
\
\
\ ----------------------------------------------------------------------------
\ REQUIREMENTS and DEPENDECIES
\
\ This code requires ANS wordsets: CORE, CORE-EXT, SEARCH-ORDER and
\ SEARCH-ORDER-EXT. It also uses the non-standard word VOCABULARY.
\
\ The code is dependent on the size of a CELL being at least 32 bits.
\
\
\ ----------------------------------------------------------------------------
\ USAGE
\
\ All assembler words are in the vocabulary ARM-ASSEMBLER. Before use
\ this must be added to the search order, with:
\
\     ALSO ARM-ASSEMBLER
\
\ Before performing any assembly CODE-BEGIN must be executed, this takes as
\ a parameter the target address for which code will be compiled for.
\ When all code has been assembled, CODE-END must be executed to ensure that
\ the final instruction is assembled correctly.
\
\ Because many ARM instructions also share names with standard Forth words
\ there may be problems when intermingling Forth and ARM code. To resolve this
\ the word [[ is provided which adds the FORTH wordlist to the beginning of
\ the search order, the word ]] reverts this change. E.g.
\
\     mov r0 [[ SOME-VARIABLE @ FF AND ]] #
\
\ This is analogous to escaping from compilation mode with the Forth [ ]
\ words.
\
\
\ ----------------------------------------------------------------------------
\ ASSEMBLER SYNTAX
\
\ The assembler syntax attempts to follow that defined by ARM but changes have
\ made to enable it to work under the Forth interpreter. These changes are
\ detailed below.
\
\ 1. Operands are separated by whitespace rather than commas. E.g.
\
\        ADD  R0,R1,R2
\
\    is written as
\
\        ADD  R0 R1 R2
\
\ 2. Non alpha-numeric symbols must be surrounded by whitespace. E.g.
\
\        LDR  R0,[R1]
\        LDM  R0!,{R2,R3}
\
\    is written as
\
\        LDR  R0 [ R1 ]
\        LDM  R0 ! { R2 R3 }
\
\ 3. Condition code mnemonics must be surrounded by whitespace. E.g.
\
\        MOVEQ  R0,R1
\
\    is written as
\
\        MOV EQ  R0 R1
\
\    This may also mean that an instruction names get split. E.g.
\
\        LDREQBT  R0,[R1]
\        MOVEQS   R2,R0
\
\    is written as
\
\        LDR EQ BT  R0 [ R1 ]
\        MOV EQ S   R2 R0
\
\ 4. All numeric constants are postfixed by a #, (which actually just takes a
\    value from the stack). E.g.
\
\        MOV  R0,#123
\
\    is written as
\
\        MOV  R0 123 #
\
\    A # is also used for numeric values which don't normally have a # prefix
\    in ARM syntax. E.g.
\
\        MCR  P15,1,R2,C3,C4,5
\
\    is written as
\
\        MCR  P15 1 # R2 C3 C4 5 #
\
\ 5. The PSR fields in the MSR instruction must have whitespace before them.
\    E.g.
\
\        MSR  CPSR_CF,R0
\
\    is written as
\
\        MSR  CPSR_ CF R0
\
\    The words CPSR_ and SPSR_ are parsing words.
\
\
\ Other Notes:
\
\ The load an store instructions can take numeric constants as their
\ addressing mode and the assembler converts these into pc relative
\ addressing. E.g.
\
\     LDR R0 12345678 #
\
\ is converted to the form
\
\     LDR R0 [ PC <offset> # ]
\
\ The pseudo instruction ADR does a similar thing to generate ADD or SUB
\ instructions which give a pc relative address. E.g.
\
\     ADR R0 12345678 #
\
\ is converted to the form
\
\     ADD R0 PC <offset> #
\
\
\ LABELS
\
\ The assembler supports labels. There are 3 words which support this:
\
\    L: name
\        Define label 'name' whose value is the current code address.
\
\    L= name
\        Define label 'name' and assign its value from the top of the stack.
\
\    L# name
\        Use the value of label 'name' in an instruction as though it were a
\        numeric constant.
\
\    Examples:
\        CHAR " L= terminator
\        L: scan-loop
\        	 ldr b  r0 [ r1 ] 1 #
\        	 cmp    r0 L# terminator
\        	 bl ne  L# scan-loop
\
\            ldr    r0 L# default
\            mov    pc lr
\        L: default
\            dcd 12345678 #
\
\
\ PORTING
\
\ The internal words CODE-HERE CODE-HERE! and CODE, are used for storing
\ assembled code into memory. This implementation uses the Forth dictionary
\ but these words can be modified to use some other location.
\
\ CODE, will also need porting if this code is run on a Forth system where
\ a cell isn't 32 bits.
\
\
\ Code follows... 


HEX

\ ----------------------------------------------------------------------------
\ Place assembler in its own vocabulary.
\ Internal implementation words go into a separate PRIVATE-WORDLIST

VOCABULARY ARM-ASSEMBLER      ALSO ARM-ASSEMBLER DEFINITIONS
VOCABULARY PRIVATE-WORDLIST   ALSO PRIVATE-WORDLIST DEFINITIONS

ALSO FORTH   \ Make sure FORTH words are found first

: PRIVATE   ( -- )   \ Make new words go into private wordlist
	ALSO PRIVATE-WORDLIST DEFINITIONS PREVIOUS ;

: PUBLIC   ( -- )   \ Make new words go into public wordlist
	ALSO ARM-ASSEMBLER DEFINITIONS PREVIOUS ;

: PUBLIC:   ( "<spaces>name" -- )   \ Define word in public wordlist
	PUBLIC : PRIVATE ;

: PUBLIC-CREATE   ( "<spaces>name" -- )   \ CREATE in public wordlist
	PUBLIC CREATE PRIVATE ;

\ ----------------------------------------------------------------------------
\ Helpers words...

: RROTATE   ( x1 u -- x2 )   \ Rotate the bits of x1 right by u bits
	1F AND
	2DUP RSHIFT
	ROT ROT 20 SWAP - LSHIFT
	OR
;

\ ----------------------------------------------------------------------------
\ Words governing where assembled code gets placed.  ( PORTING )

: CODE-HERE   ( -- a-addr )   \ Return address where code will be assembled to
	HERE ;

: CODE-HERE!   ( a-addr -- )   \ Set address where code will be assembled to
	HERE - ALLOT ;

: CODE,   ( x -- )   \ Store 32 bit x at assembly address, and step to next
	, ; 

\ ----------------------------------------------------------------------------
\ Variables

VARIABLE OP-VALUE     \ bits for op-code being constructed
VARIABLE OP-MASK      \ mask of bits currently stored in OP-VALUE
VARIABLE OP-DEFAULT   \ mask of bits in OP-VALUE which have default values
VARIABLE SHIFT-FLAG   \ set by shift operands
VARIABLE ]-FLAG       \ set true by ]
VARIABLE {-FLAG       \ set true by {
VARIABLE REGISTER-LOCATION   \ 0 to 4 bytes giving location to store registers
VARIABLE '#           \ vector for #
VARIABLE 'RM          \ vector called when Rm register is encountered
VARIABLE CODE-ORIGIN  \ address at which OP-VALUE is assembled for

\ ----------------------------------------------------------------------------
\ Words controlling immediate operands

PUBLIC: #   ( x -- )   \ ARM Assembler, immediate operand suffix
	'# @ EXECUTE ;

: UNEXPECTED-#   ( -- )
	TRUE ABORT" ARM Assembler: Unexpected #" ;

: RESET-#   ( -- )   \ Clear behaviour of immediate operand
	['] UNEXPECTED-# '# ! ;

: INVALID#   ( -- )
	TRUE ABORT" ARM Assembler: Invalid immediate operand" ;

: CHECK#   ( u1 u2 -- u1 )   \ Check u1 <= u2
	OVER U< IF INVALID# THEN ;

\ ----------------------------------------------------------------------------
\ Words for initialising op-code generation

: DEFAULT-RM   ( x1 x2 x3 -- x1 x2 )   \ Default action when RM register used
	DROP ;   \ Do nothing

: OP-RESET   ( -- )   \ Reset assembler state
	0 OP-VALUE !
	0 OP-MASK !
	F0000000 OP-DEFAULT !
	0 SHIFT-FLAG !
	0 ]-FLAG !
	0 {-FLAG !
	FFFFFFFF REGISTER-LOCATION !
	RESET-#
	['] DEFAULT-RM 'RM !
;

: ?INVALID   ( x -- )   \ If x not zero, then instruction is invalid
	ABORT" ARM Assembler: Invalid instruction form"
;

: OP-BUILD   ( x1 x2 -- )   \ Set opcode bits masked by x2 to values in x1
	OP-MASK @
	2DUP AND ?INVALID
	OVER OR OP-MASK !
	INVERT OP-VALUE @ AND OR OP-VALUE !
;

: OP-END   ( -- )   \ End of instruction assembly
	OP-MASK @
	IF
		OP-MASK @ OP-DEFAULT @ OR
		FFFFFFFF XOR ?INVALID   \ check all bits are accounted for
		OP-VALUE @ CODE,
		4 CODE-ORIGIN +!
		0 OP-MASK !
	THEN
;

: OP-INIT   ( x1 x2 x3 -- )   \ Initialise the assembler of new instruction
	OP-RESET
	REGISTER-LOCATION !
	OP-MASK !
	OP-VALUE !
;

: OP-BEGIN   ( x1 x2 x3 -- )    \ Start assembly of a new instruction
	OP-END OP-INIT ;

: DO-INSTRUCTION   ( a-addr -- )   \ Common behaviour of INSTRUCTION words
	\ Fetch 3 words from a-addr and call OP-BEGIN
	DUP @
	SWAP CELL+ DUP @
	SWAP CELL+ @
	OP-BEGIN
;

: INSTRUCTION   ( "<spaces>name" -- )   \ Create instruction
	PUBLIC-CREATE
	DOES>  ( -- )
	DO-INSTRUCTION
;

: INSTRUCTION#   ( "<spaces>name" -- )   \ Instruction with immediate operand
	PUBLIC-CREATE
	DOES>  ( -- )
	DUP DO-INSTRUCTION
	CELL+ CELL+ CELL+
	@ '# !
;

: INSTRUCTIOND   ( "<spaces>name" -- )   \ Instruction with default ops mask
	PUBLIC-CREATE
	DOES>  ( -- )
	DUP DO-INSTRUCTION
	CELL+ CELL+ CELL+
	@ OP-DEFAULT !
;

: INSTRUCTIOND#   ( "<spaces>name" -- )   \ Instr. with default and immediate
	PUBLIC-CREATE
	DOES>  ( -- )
	DUP DO-INSTRUCTION
	CELL+ CELL+ CELL+
	DUP @ '# !
	CELL+ @ OP-DEFAULT !
;

\ ----------------------------------------------------------------------------
\ Flags parsing

: LOWER-CASE   ( c1 -- c2 )   \ Covert ASCII character to lower-case
	DUP [CHAR] A - 1A U< 20 AND +
;

: FLAG   ( c c-addr -- )   \ Process a single parsed flag character
	BEGIN
		2DUP C@ <>
	WHILE
		DUP C@ 0= ?INVALID
		CHAR+ CHAR+
	REPEAT
	1 SWAP CHAR+ C@ LSHIFT
	DUP OP-BUILD
	DROP
;

: FLAGS   ( -- )   \ Create flags parsing word
	CREATE
	DOES>   ( "<spaces>ccc" -- )
	>R
	\ set flags in OP-VALUE for each flag char present in "ccc"...
	BL WORD COUNT
	BEGIN
		DUP
	WHILE
		OVER C@ LOWER-CASE R@ FLAG
		1- SWAP CHAR+ SWAP
	REPEAT
	2DROP
	\ now set OP-MASK for each flag bit...
	0 R>
	BEGIN
		DUP C@
	WHILE
		CHAR+
		>R 1 R@ C@ LSHIFT OR
		R> CHAR+
	REPEAT
	DROP
	OP-MASK @ OR OP-MASK !
;

\ ----------------------------------------------------------------------------
\ Labels
\
\ Structure of object is
\   CELL    REF-LINK   \ link to list of unresolved references
\   CELL    VALUE      \ value for label
\   STRING  NAME       \ name of label as a counted string

: LABEL>REF-LINK   ( a-addr1 -- a-addr2 )
	;

: LABEL>VALUE   ( a-addr1 -- a-addr2 )
	CELL+ ;

: LABEL>NAME   ( a-addr -- c-addr )
	CELL+ CELL+ ;

0F CONSTANT MAX-LABEL-NAME-SIZE   \ Max significant length for label name

2 CELLS  MAX-LABEL-NAME-SIZE 1+ CHARS +   ALIGNED
CONSTANT LABEL-SIZE   \ Size of label object

10 CONSTANT #LABELS   \ Max number of labels
CREATE LABELS   #LABELS LABEL-SIZE * ALLOT
HERE CONSTANT LABELS-END

: ALLOC-LABEL   ( -- a-addr )   \ Allocate a new label object
	LABELS
	BEGIN
		DUP LABEL>NAME C@

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看亚洲a| 国内外成人在线视频| 99久久精品国产麻豆演员表| 精品久久久久久久久久久院品网| 香蕉成人伊视频在线观看| 欧美日韩亚洲综合在线| 性欧美大战久久久久久久久| 91.麻豆视频| 免费看欧美美女黄的网站| 久久综合中文字幕| 国产99精品国产| 亚洲天堂2016| 欧美猛男超大videosgay| 日本不卡免费在线视频| 精品久久久久一区| 成人h版在线观看| 亚洲制服丝袜av| 91精品国产综合久久福利软件| 男女男精品网站| 欧美国产精品一区二区三区| 972aa.com艺术欧美| 婷婷久久综合九色综合伊人色| 日韩免费一区二区三区在线播放| 国产在线视频一区二区| 国产精品美女一区二区三区 | 在线观看免费亚洲| 亚洲成人福利片| 精品成人免费观看| 色综合中文综合网| 亚洲欧美日韩国产另类专区| 欧美三日本三级三级在线播放| 久久精品国产亚洲一区二区三区| 欧美国产日韩一二三区| 欧美日韩免费电影| 国产乱人伦精品一区二区在线观看 | 色成年激情久久综合| 亚洲线精品一区二区三区| 日韩欧美一级特黄在线播放| 成人激情开心网| 水野朝阳av一区二区三区| 欧美刺激午夜性久久久久久久| caoporn国产精品| 秋霞影院一区二区| 综合亚洲深深色噜噜狠狠网站| 欧美一区二区三区人| 97久久人人超碰| 麻豆国产一区二区| 一二三四社区欧美黄| 国产欧美日韩在线| 日韩欧美黄色影院| 欧美又粗又大又爽| 成人丝袜18视频在线观看| 日产国产欧美视频一区精品| 亚洲欧美综合网| 久久―日本道色综合久久| 宅男在线国产精品| 欧美在线三级电影| 91亚洲午夜精品久久久久久| 国产原创一区二区三区| 天堂影院一区二区| 亚洲高清在线精品| 亚洲精品成人天堂一二三| 欧美激情一区三区| 久久久不卡网国产精品一区| 欧美一区二区日韩| 91成人在线精品| 色综合一区二区三区| av成人动漫在线观看| 国产不卡免费视频| 国产成人在线看| 国产一区二区三区在线观看免费视频| 秋霞影院一区二区| 日韩av中文字幕一区二区三区| 亚洲一区二区视频| 一区二区三区精品| 亚洲精品国产成人久久av盗摄 | 久久亚洲私人国产精品va媚药| 555夜色666亚洲国产免| 欧美日韩国产区一| 91精品在线一区二区| 在线亚洲一区观看| 欧美日韩综合不卡| 欧美日韩五月天| 欧美日韩视频第一区| 欧美色精品天天在线观看视频| 欧美日韩中文国产| 欧美日韩国产一级二级| 欧美日韩黄色一区二区| 欧美日韩中文一区| 日韩一卡二卡三卡| 日韩精品专区在线影院观看| 精品国产电影一区二区| 久久精品一区二区三区四区| 国产亚洲人成网站| 欧美国产1区2区| 亚洲欧美另类久久久精品2019| 亚洲精选一二三| 亚洲va天堂va国产va久| 麻豆成人在线观看| 国产成人免费视频网站高清观看视频| 国产成人在线视频网站| 一本色道a无线码一区v| 欧美日本在线一区| 久久影视一区二区| 亚洲国产高清不卡| 亚洲国产精品影院| 看国产成人h片视频| 国产精品一卡二卡在线观看| 成人99免费视频| 欧美午夜精品久久久| 日韩欧美成人午夜| 国产精品毛片无遮挡高清| 一区二区三区色| 蜜臀99久久精品久久久久久软件| 国产高清在线观看免费不卡| 99re热这里只有精品视频| 欧美日韩一区小说| 国产日韩欧美a| 亚洲午夜激情网页| 国产在线国偷精品产拍免费yy| 99精品视频免费在线观看| 欧美美女视频在线观看| 欧美国产一区在线| 丝袜脚交一区二区| www.爱久久.com| 日韩久久免费av| 亚洲伦理在线精品| 国产精品主播直播| 欧美色偷偷大香| 中文字幕欧美日韩一区| 日韩中文欧美在线| 95精品视频在线| 亚洲精品一区二区精华| 亚洲国产成人av网| 成a人片亚洲日本久久| 日韩欧美第一区| 一区二区久久久久久| 岛国av在线一区| 91精品国产综合久久香蕉麻豆| 国产精品乱码妇女bbbb| 免费不卡在线观看| 在线免费亚洲电影| 国产精品情趣视频| 精品影院一区二区久久久| 欧美日韩国产片| 亚洲日本丝袜连裤袜办公室| 国产精品自在在线| 精品理论电影在线| 全部av―极品视觉盛宴亚洲| 色婷婷国产精品综合在线观看| 国产欧美精品一区二区色综合| 日韩高清不卡在线| 欧美三级视频在线观看| 亚洲欧美综合色| 成人动漫av在线| 亚洲国产精品精华液ab| 久国产精品韩国三级视频| 91麻豆精品国产自产在线| 亚洲一区二区三区四区五区黄 | 国产午夜亚洲精品不卡| 久久99久久久欧美国产| 7777女厕盗摄久久久| 香蕉成人伊视频在线观看| 欧美曰成人黄网| 亚洲精品第一国产综合野| 91亚洲精品乱码久久久久久蜜桃| 国产区在线观看成人精品| 韩国av一区二区三区四区| 精品国产精品网麻豆系列| 久久电影国产免费久久电影| 日韩欧美精品在线视频| 蜜桃精品在线观看| 精品美女在线观看| 狠狠色伊人亚洲综合成人| 久久影院午夜论| 国产成人在线观看免费网站| 国产三级久久久| 成人毛片视频在线观看| 中文字幕五月欧美| 91麻豆国产在线观看| 亚洲视频狠狠干| 欧美亚洲一区二区三区四区| 亚洲一二三四区| 欧美理论在线播放| 麻豆精品视频在线观看| 久久久亚洲午夜电影| 成人午夜在线免费| 亚洲精品五月天| 欧美日韩亚洲综合| 久久99久久久久| 国产网站一区二区三区| av电影天堂一区二区在线观看| 亚洲精品视频一区二区| 91麻豆精品国产91久久久资源速度 | 亚洲欧洲精品天堂一级| 成人在线视频一区二区| 亚洲女人小视频在线观看| 欧美日韩aaa| 韩国三级在线一区| 亚洲九九爱视频|