⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcode.asm

📁 web51的开发库
💻 ASM
字号:
; P-Code Interpreter (c)Copyright 2000, Radek Benedikt;	benedikt@lphard.cz, http://benedikt.lphard.cz; History: 1.00 -- Radek Benedikt 31-Oct-2000;  initial version;*************************************************************;***		PROJECT WWW8052  http://8052.lphard.cz	    **;*************************************************************;   This program is free software; you can redistribute it and/or modify;   it under the terms of the GNU General Public License as published by;   the Free Software Foundation, version 2.;;   This program is distributed in the hope that it will be useful,;   but WITHOUT ANY WARRANTY; without even the implied warranty of;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;   GNU General Public License for more details.;;   You should have received a copy of the GNU General Public License;   along with this program; if not, write to the Free Software;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.;   Tento program je volne programove vybaveni; muzete jej sirit a;   modifikovat podle ustanoveni Obecne verejne licence GNU, vydavane Free;   Software Foundation, verze 2;;   Tento program je rozsirovan v nadeji, ze bude uzitecny, avsak BEZ;   JAKEKOLI ZARUKY; neposkytuji se ani odvozene zaruky PRODEJNOSTI anebo;   VHODNOSTI PRO URCITY UCEL.;   Dalsi podrobnosti hledejte v Obecne verejne licenci GNU.;;   Kopii Obecne verejne licence GNU jste mel obdrzet spolu s timto;   programem; pokud se tak nestalo, napiste o ni Free Software Foundation,;   Inc., 675 Mass Ave, Cambridge, MA 02139, USA.;	.global	pcode	.global	pcall	.global	pret	.global	pjumpeq	.global	pjump	.global	pjumpne	.global	pjumpCarry	.global	pjumpnCarry	.global	pjumpZero	.global	pjumpnZero	.global	zflag	.global	cflag	.global	pcodeLSB	.global	pcodeMSB;	.bcomm	token, 1	.bcomm	pcodeOption, 1;;;***** Pcode status flags *****	.bitcomm zflag, 1		;Zero flag	.bitcomm cflag, 1		;Carry flag;	.comm	pcodeMSB, 1	.comm	pcodeLSB, 1;	.text;; *** PCALL *** Call ***; pcall	address;	R6R7pcall:	;mov	a,#'>'	;lcall	putchar	POP	DPH	;pop return address (Pcode0)	POP	DPL	PUSH	pcodeLSB	;push Pcode return address	PUSH	pcodeMSB	MOV	DPH,R6		;new Pcode pointer	MOV	DPL,R7	SJMP	Pcode00;; *** PRET *** Return ***; pretpret:	;mov	a,#'<'	;lcall	putchar	POP	DPH	;pop return address (Pcode0)	POP	DPL	POP	DPH	;pop Pcode return address	POP	DPL	SJMP	Pcode00;; *** PJUMPEQ *** Jump if zflag is set ***; *** PJUMPZERO *** Jump if zflag is set ***; pjumpeq	address;	R6R7pjumpZero:pjumpeq:JNB	zflag,NoJump;; *** PJUMP *** Jump ***; pjump	address;	R6R7pjump:Jump:	POP	DPH	;pop return address	POP	DPL	MOV	pcodeMSB,R6	;new Pcode pointer	MOV	pcodeLSB,R7	SJMP	Pcode0; *** PJUMPNE *** Jump if zflag is not set ***; *** PJUMPNZERO *** Jump if zflag is not set ***; pjumpne	address;	R6R7pjumpnZero:pjumpne:JNB	zflag,JumpNoJump:	RET;; *** PJUMPCARRY *** Jump if Cflag is set ***pjumpCarry:	JB	cflag,Jump		RET;; *** PJUMPNCARRY *** Jump if Cflag is not set ***pjumpnCarry:	JNB	cflag,Jump		RETpcode:	pop	dph		;get token address	pop	dpl		;from stack;	push	pcodeLSB;	push	pcodeMSB	MOV	pcodeMSB,DPH	MOV	pcodeLSB,DPLPcode0:	MOV	DPH,pcodeMSB	MOV	DPL,pcodeLSBPcode00:CLR	A	MOVC	A,@A+DPTR  	;get token	CJNE	A,#0,Pcode1	;exec token	INC	DPTR		;end of token;	pop	pcodeMSB;	pop	pcodeLSB	push	dpl		;push return address on stack	push	dph	RET;Pcode1:	MOV	token,A		;save token MSB	MOV	A,#LOW(Pcode0)	;push return address	PUSH	Acc	MOV	A,#HIGH(Pcode0)	PUSH	Acc	INC	DPTR	CLR	A	MOV	R7,A	MOV	R6,A	MOV	R5,A	MOV	R4,A	MOV	R3,A	MOV	R2,A	MOVC	A,@A+DPTR  	;get token LSB	PUSH	Acc		;push LSB	MOV	A,token	ANL	A,#0b00011111	PUSH	Acc		;push MSB	INC	DPTR	CLR	A	MOVC	A,@A+DPTR  	;get option	MOV	pcodeOption,A	INC	DPTR	jnb	B2B(pcodeOption, 7), NoOpt7	CLR	A	MOVC	A,@A+DPTR  	;get par1 MSB	MOV	R6,A		;par1 - R6R7	INC	DPTRNoOpt7:	jnb	B2B(pcodeOption, 6), NoOpt6	CLR	A	MOVC	A,@A+DPTR  	;get par1 LSB	MOV	R7,A	INC	DPTRNoOpt6:	jnb	B2B(pcodeOption, 5), NoOpt5	CLR	A	MOVC	A,@A+DPTR  	;get par2 MSB	MOV	R4,A		;par2 - R4R5	INC	DPTRNoOpt5:	jnb	B2B(pcodeOption, 4), NoOpt4	CLR	A	MOVC	A,@A+DPTR  	;get par2 LSB	MOV	R5,A	INC	DPTRNoOpt4:	jnb	B2B(pcodeOption, 3), NoOpt3	CLR	A	MOVC	A,@A+DPTR  	;get par3 MSB	MOV	R2,A		;par3 - R2R3	INC	DPTRNoOpt3:	jnb	B2B(pcodeOption, 2), NoOpt2	CLR	A	MOVC	A,@A+DPTR  	;get par3 LSB	MOV	R3,A	INC	DPTRNoOpt2:	JNB	B2B(token, 7), noI1	MOV	A,R7	MOV	R0,A	MOV	A,@R0	MOV	R6,A	INC	R0	MOV	A,@R0	MOV	R7,AnoI1:	JNB	B2B(token, 6), noI2	MOV	A,R5	MOV	R0,A	MOV	A,@R0	MOV	R4,A	INC	R0	MOV	A,@R0	MOV	R5,AnoI2:	JNB	B2B(token, 5), noI3	MOV	A,R3	MOV	R0,A	MOV	A,@R0	MOV	R2,A	INC	R0	MOV	A,@R0	MOV	R3,AnoI3:	jnb	B2B(pcodeOption, 1), NoOpt1	MOV	A,R6	;swap1	XCH	A,R7	MOV	R6,A;	MOV	A,R4	;swap2;	XCH	A,R5;	MOV	R4,ANoOpt1:	jnb	B2B(pcodeOption, 0), NoOpt0	MOV	A,R2	;swap3	XCH	A,R3	MOV	R2,ANoOpt0:	MOV	pcodeMSB,DPH	MOV	pcodeLSB,DPL	RET			;and exec	;; END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -