分享
 
 
 

LAVA的伪指令- -

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

虚拟指令意义 (括号内代码为注释。名称下的为同义代码,有相同的意思,主要是为了wqx里书写方便)

名称 寻址方式 字节码 代码格式 伪代码表示

1.ph1 立即 ph1 #NUM [SP]<-NUM,0,0,0; SP+=4; (栈单元大小为4bytes,不够的部分用0补齐,下同)

(phs) 直接 ph1 ADDR [SP]<-{ADDR},0,0,0; SP+=4;

环境 ph1 oADDR [SP]<-{ADDR+EP},0,0,0; SP+=4;

2.ph2 立即 ph2 #NUM [SP]<-NUM,0,0; SP+=4;

(phd) 直接 ph2 ADDR [SP]<-{ADDR},{ADDR+1},0,0; SP+=4;

环境 ph2 oADDR [SP]<-{ADDR+EP},{ADDR+EP+1},0,0; SP+=4;

3.ph4 立即 ph4 #NUM [SP]<-NUM; SP+=4;

(phq) 直接 ph4 ADDR [SP]<-{ADDR},{ADDR+1},{ADDR+2},{ADDR+3}; SP+=4;

环境 ph4 oADDR [SP]<-{ADDR+EP},{ADDR+EP+1},{ADDR+EP+2},{ADDR+EP+3}; SP+=4;

4.ph1i 直接 ph1i ADDR [SP-4]<-{[SP-4]+ADDR},0,0,0;

(phsi) 环境 ph1i oADDR [SP-4]<-{[SP-4]+ADDR+EP},0,0,0;

5.ph2i 直接 ph2i ADDR [SP-4]<-{[SP-4]+ADDR},{[SP-4]+ADDR+1},0,0;

(phdi) 环境 ph2i oADDR [SP-4]<-{[SP-4]+ADDR+EP},{[SP-4]+ADDR+EP+1},0,0;

6.ph4i 直接 ph4i ADDR [SP-4]<-{[SP-4]+ADDR},{[SP-4]+ADDR+1},{[SP-4]+ADDR+2},{[SP-4]+ADDR+3};

(phqi) 环境 ph4i oADDR [SP-4]<-{[SP-4]+ADDR+EP},{[SP-4]+ADDR+EP+1},{[SP-4]+ADDR+EP+2},{[SP-4]+ADDR+EP+3};

7.ah1 直接 ah1 ADDR [SP-4]<-[SP-4]+ADDR(2bytes),01,0;

(ahs) 环境 ah1 oADDR [SP-4]<-[SP-4]+ADDR(2bytes),81,0;

8.ah2 直接 ah2 ADDR [SP-4]<-[SP-4]+ADDR(2bytes),02,0;

(ahs) 环境 ah2 oADDR [SP-4]<-[SP-4]+ADDR(2bytes),82,0;

9.ah4 直接 ah4 ADDR [SP-4]<-[SP-4]+ADDR(2bytes),04,0;

(ahs) 环境 ah4 oADDR [SP-4]<-[SP-4]+ADDR(2bytes),84,0;

10.ada 直接 ada ADDR [SP-4]<-[SP-4]+ADDR(2bytes),0,0;

11.?

12.tabs 环境 tabs oADDR [SP-4]<-[SP-4]+EP(2bytes),0,0;

13.add 隐含 add [SP-8]<-[SP-8]+[SP-4]; SP-=4;

立即 add #NUM [SP-4]<-[SP-4]+NUM(4byte);

14.mns 隐含 add [SP-8]<-[SP-8]-[SP-4]; SP-=4;

立即 add #NUM [SP-4]<-[SP-4]-NUM(4byte);

15.mul 隐含 add [SP-8]<-[SP-8]*[SP-4]; SP-=4;

立即 add #NUM [SP-4]<-[SP-4]*NUM(4byte);

16.div 隐含 add [SP-8]<-[SP-8]\[SP-4]; SP-=4; ( "\"表示整除 )

立即 add #NUM [SP-4]<-[SP-4]\NUM(4byte);

17.mod 隐含 add [SP-8]<-[SP-8]%[SP-4]; SP-=4; ( "%"表示取余 )

立即 add #NUM [SP-4]<-[SP-4]%NUM(4byte);

18.band 隐含 band [SP-8]<-[SP-8]&[SP-4](4byte);SP-=4; ("&"表示位与)

19.bor 隐含 bor [SP-8]<-[SP-8]|[SP-4](4byte);SP-=4; ("|"表示位或)

20.bopp.? (不会用 )

21.bxor 隐含 bxor [SP-8]<-[SP-8]^[SP-4](4byte);SP-=4; ("^"表示位异或)

22.phn 立即 phn DATA [aPlace]<-DATA;[SP]<-aPlace(4bytes);SP+=4; ("aPlace"表示一个地方,具体在哪不知道")

23.and 隐含 and [SP-8]<-[SP-8]&&[SP-4](4bytes);SP-=4;

24.or 隐含 or [SP-8]<-[SP-8]||[SP-4](4bytes);SP-=4;

25.not 隐含 not [SP-4]<-![SP-4](4bytes);

26.more 立即 more #NUM [SP-4]<-[SP-4]>NUM(2bytes); (如果为真,是-1,假为0)

隐含 more [SP-8]<-[SP-8]>[SP-4](4bytes);SP-=4;

27.less 立即 less #NUM [SP-4]<-[SP-4]<NUM(2bytes);

隐含 less [SP-8]<-[SP-8]<[SP-4](4bytes);SP-=4;

28.equ 立即 equ #NUM [SP-4]<-[SP-4]==NUM(2bytes);

隐含 equ [SP-8]<-[SP-8]==[SP-4](4bytes);SP-=4;

29.neq 立即 neq #NUM [SP-4]<-[SP-4]!=NUM(2bytes);

隐含 neq [SP-8]<-[SP-8]!=[SP-4](4bytes);SP-=4;

30.nmor 立即 nmor #NUM [SP-4]<-[SP-4]<=NUM(2bytes);

隐含 nmor [SP-8]<-[SP-8]<=[SP-4](4bytes);SP-=4;

32.nles 立即 nles #NUM [SP-4]<-[SP-4]>=NUM(2bytes);

隐含 nles [SP-8]<-[SP-8]>=[SP-4](4bytes);SP-=4;

33.neg 隐含 neg [SP-4]<- -[SP-4];

33.mvl 立即 mvl #NUM [SP-4]<-[SP-4]<<NUM(2bytes);

隐含 mvl [SP-8]<-[SP-8]<<[SP-4](4bytes);SP-=4;

34.mvr 立即 mvr #NUM [SP-4]<-[SP-4]>>NUM(2bytes);

隐含 mvr [SP-8]<-[SP-8]>>[SP-4](4bytes);SP-=4;

35.base 直接 base ADDR EP=ADDR;

36.pop 隐含 pop SP-=4;

37.ret 隐含 ret NEP<-EP;PC<-{EP},{EP+1},{EP+2};EP<-{EP+3},{EP+4};

38.goto 直接 goto ADDR PC<- ADDR(3bytes) (此处的ADDR表示读lava文件的指针,为3bytes)

39.func 立即 func ADDR1(2byte),ADDR2(1byte) EQ<-NEQ;NEQ<-NEQ+ADDR1;把ADDR2个参数从栈中移到环境

40.call 直接 call ADDR {NEP}<-PC;PC<- ADDR(3bytes) (此处的ADDR表示读lava文件的指针,为3bytes)

44 =#loadall

45 XXYY =push4B #(pop4B+0x0000XXYY)

46 XXYY =push4B #(pop4B-0x0000XXYY)

47 XXYY =push4B #(pop4B*0x0000XXYY)

48 XXYY =push4B #(pop4B\0x0000XXYY)

49 XXYY =push4B #(pop4B%0x0000XXYY)

4A XXYY =push4B #(pop4B<<0x0000XXYY)

4B XXYY =push4B #(pop4B>>0x0000XXYY)

4C XXYY =push4B #(pop4B==XXXX)

4D XXYY =push4B #(pop4B!=XXXX)

4E XXYY =push4B #(pop4B>XXXX)

4F XXYY =push4B #(pop4B<XXXX)

50 XXYY =push4B #(pop4B>=XXXX)

51 XXYY =push4B #(pop4B<=XXXX)

80 =putchar

81 =getchar

82 =printf

83 =strcpy

84 =strlen

85 =SetScreen

86 =UpdateLCD

87 =Delay

88 =WriteBlock

89 =Refresh

8A =TextOut

8B =Block

8C =Rectangle

8D =exit();

8E =ClearScreen

8F =abs();

90 =rand();

91 =srand();

92 =Locate

93 =Inkey();

94 =Point

95 =GetPoint

96 =Line

97 =Box

98 =Circle

99 =Ellipse

9A =Beep();

9B =isalnum

9C =isalpha

9D =iscntrl

9E =isdigit

9F =isgraph

A0 =islower

A1 =isprint

A2 =ispunct

A3 =isspace

A4 =isupper

A5 =isxdigit

A6 =strcat

A7 =strchr

A8 =strcmp

A9 =strstr

AA =tolower

AB =toupper

AC =memset();

AD =memcpy();

AE =fopen

AF =fclose

B0 =fread

B1 =fwrite

B2 =fseek

B3 =ftell

B4 =feof

B5 =rewind

B6 =getc

B7 =putc

B8 =sprintf

B9 =MakeDir

BA =DeleteFile

BB =Getms

BC =CheckKey

BD =memmove

BE =Crc16

BF =Secret

C0 =ChDir

C1 =FileList

C2 =GetTime

C3 =SetTime

C4 =GetWord

C5 =XDraw

C6 =ReleaseKey

C7 =GetBlock

C8 =Sin

C9 =Cos

CA =FillArea

Lava虚拟机由以下结构组成:

1 寄存器

Pc寄存器:3bytes

S 堆栈指针寄存器 2bytes

E 环境寄存器

2 指令执行模块

3 堆栈 每个堆栈元素为4bytes固定不变

寻址方式

直接 Operand addr e.g. ph1 $200F

立即 Operand #opernum e.g. ph1 #$0F

环境 Operand oaddr e.g. ph1 o$0005

隐含(堆栈)Operand e.g. and

伪指令定义

phx 把x个字节放在堆栈中(x=1,2,4,n)

比如,2000:12 34 56 78 90 ab cd ef

Stack: XX XX XX 00 00 00 00 00 00 00 00 00 00...

^ (S指针)

1.在完成 ph1 $2000后.. Stack: XX XX XX 12 00 00 00 00 00 00 00 00 00...

^ (S指针)

2.在完成 ph2 $2000后.. Stack: XX XX XX 12 34 00 00 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

3.在完成 ph4 $2000后.. Stack: XX XX XX 12 34 56 78 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

4.在完成 ph1 #$AB后.. Stack: XX XX XX AB 00 00 00 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

5.在完成 ph2 #$ABCD后.. Stack: XX XX XX CD AB 00 00 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

6.在完成 ph4 #$ABCDEF01后.. Stack: XX XX XX 01 EF CD AB 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

7.在完成 phn #$12,#$23,#$00后.. Stack: XX XX XX 01 EF CD AB 00 00 00 00 00 00... (与上次不是连续的过程)

^ (S指针)

ret 返回上次调用点:这个不用解释吧?

goto 跳转:这个不用解释吧?

比如,goto $C10000, 就是跳转到.lav文件偏移0xC1的地方继续执行

call 调用子程序:这个不用解释吧?

比如,call $C10000, 就是调用.lav文件偏移0xC1的子程序

fsto 如果false goto(用法同goto)

add 加

比如,Stack: XX XX XX 12 00 00 00 23 00 00 00 00 00 ...

^(S指针)

1. 在完成add之后 Stack: XX XX XX 35 00 00 00 00 00 ...

.12+23=35 ^(S指针)

2. 在完成add #$0C01之后 Stack: XX XX XX 13 0C 00 00 00 00 00 ...

.C01+12=C13 ^(S指针)

mns 减(用法同加法)前4Bytes减后4Bytes, 或是前4Bytes减立即数

mul 乘(用法同加法)

div 整除(用法同加法)前4Bytes除以后4Bytes, 或是前4Bytes除以立即数

mod 求余(用法同加法)前4Bytes除以后4Bytes, 或是前4Bytes除以立即数

注意:以上资料均为sippey的成果

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有