//boot.c
基址 0x7C00
位数 16
高一 等于 0
低一 等于 6
中断 16
设置640*480、16色彩色分辨率
存三 等于 100
存二 等于 100
标记 开头
高一 等于 0x0C
中断 16
自加 存二
跳转 不等 开头
填充 -510
写入 2 0xAA55

引导.c
基址 0x7C00
位数 16
跳转 跳到 入口
文本 提示 Booting System Please Waite ..............``
字节 驱动器 0
整形 模块 0x910
程序 显信息
取出 存六
取出 存七
标记 开头
高一 等于 0x0E 设置显示模式
低一 等于 #短七
低一 比较 0
跳转 相等 结尾
中断 0x10
自加 存七
跳转 跳到 开头
标记 结尾
存七 异或 存七
压入 存六
返回

程序段结束

标记 入口
存一 等于 0x0600 清屏
存二 等于 0 左上角:(0, 0)
存三 等于 0x184f 右下角:(80,25),
存四 等于 0x0300 文字颜色
中断 0x10

设置640*480、16色彩色分辨率

存一 等于 提示
压入 存一
调用 显信息

标记 死循环
休止
跳转 跳到 死循环
填充 -510

填充指定长度的数值,默认为0,长度为负数是一直填充到510为止

写入 2 0xAA55

//语法规范.txt
每行一条指令,不使用递归解析

每行可分为:功能,参数,内容这三个部分,用制表符隔开

可以在第三内容后面加制表和注释内容,小于三项不可以加注释

每行开头加上制表或者空格时,这一行就是注释

指令可以只有功能,或者功能和参数,或者三种都有

有三部分的汇编常规写法是功能 参数1 参数2,如: add al,100

为了更符合中文表达的习惯,把功能和参数对调,如: 低一 加 100

也就是中间是功能,左右两边都是参数,参数又分很多种情况

如寄存器低8位,通过第一个汉字"低"来识别

寄存器高8位,通过第一个汉字"高"来识别

寄存器低8加上高8的16位,通过第一个汉字"合"来识别

寄存器的32位,通过第一个汉字"存"来识别

寄存器的64位,通过第一个汉字"共"来识别

段选寄存器,通过第一个汉字"段"来识别

功能指令汉字都是在配置文件里可修改的

第一个字用来区分寄存器,尽量只改第二字

若一定要改第一个字,可以换成同声母的汉字

若同声母汉字还不能达到满意,那就要改源码了

第一个字是数字,或者负数的-号,即识别为数字

其它名称只要不是配置文件里定义过的,都视为变量

申请变量语法是 文本 名称 内容;整数 名字 30

变量名不能和配置文件里定义的名称相同

以上识别还远远不够,所以还需要加一些符号来区分

很多人反对中文编程就是因为要反复切换输入法

而中文标点实在太少,且很多输入法打不出来,不够规范

为了避免切换输入法,就只采用符号不用标点,中文状态打出来也一样的符号

开头加#符号,代表从后面寄存器组合的指针处,取1字节数据

开头加%符号,代表从后面寄存器组合的指针处,取2字节数据

开头加&符号,代表从后面寄存器组合的指针处,取4字节数据

寄存器组合有:1:8种寄存器任选一种。2:8种寄存任选一 + 7种寄存器任意选一

3:8种寄存器任选一 + 数字,数值可分为1字节数和4字节整数

4:8种寄存器任选一 + 7种寄存器任选一 1 或者2 或者4 或者8

5:8种寄存器任选一 + 8种寄存器任选一 * 1、2、4、8 + 操作数

%&+*-这几种用到的符号,都是中英文状态下输入结果都一样的

汇编指令实在是有点多,预计最多不超过42亿乘42亿条指令

高级语言只需要十几条指令,能处理变量就可以了

但是汇编就需要处理寄存器,IO端口,中断等各种硬件层

需要用到的指令就特别多,本编程的指令是可以在配置文件里任意指定的。

对不同的硬件换用不同的指令集,可以满足各种芯片的底层驱动和系统开发。

中文编程.ini
[型号]
8086=x86
8051=C51
STM32=ARM
STC32=宏晶2
GD32F=兆易
GD32V=兆易V
[8086]
存一=0;EAX累加器,保存运算结果和返回值
存二=1;ECX计数寄存器
存三=2:EDX数据寄存器
存四=3:EBX基址寄存器
存五=4:ESP堆栈指针寄存器
存六=5:EBP基址指针寄存器(用于局部变量)
存七=6:ESI源变址寄存器
存八=7:EDI目的变址寄存器
低一=0:累加器低八位AL
低二=1:计数器低八位CL
低三=2:数据寄存器低八位DL
低四=3:基址寄存器低八位BL
高一=4:累加器高八位AH
高二=5:计数器高八位CH
高三=6:数据寄存器高八位DH
高四=7:基址寄存器高八位BH
加=0:+加法运算add
或=8:|或运算or
进加=16:进位加法adc
借减=24:借位减法sbb
与=32:&与运算and
减=40:-减法运算sub
异或=48:^异或运算xor
比较=56:比较运算cmp
段一=0:附加段ES
段二=8:代码段CS
段三=16:堆栈段SS
段四=24:数据段DS
段五=32:FS无翻译
段六=40:GS无翻译
段七=48:seg?没名称
段八=56:seg?没名字
四七=0:[bx+si]短寻址,低16位寄存器4加7的组合
四八=1:[bx+di]短寻址,低16位寄存器4加8的组合
六七=2:[bp+si]短寻址,低16位寄存器6加7的组合
六八=3:[bp+di]短寻址,低16位寄存器6加8的组合
短七=4:[si]短寻址,低16位7号寄存器的指针地址
短八=5:[di]短寻址,低16位8号寄存器的指针地址
短六=6:[bp+n]短寻址,低16位6号寄存器+短数
短四=7:[bx]短寻址,低16位7号寄存器的指针地址
自加=64:对寄存器进行加1操作
自减=72:对寄存器进行减1操作
压入=80:Push把寄存器数据压入堆栈空间
取出=88:Pop从堆栈空间取出数据到寄存器
溢出=112:JO若溢出则转移到标记
不溢=113:JNO不溢出则转移到标记
低于=114:JB/JNAE/JC小于则转移(无符号)进位为1
高等=115:JAE/JNB/JNC大于或等于则转移(无符号)进位为0
相等=116:JE/JZ相等则转移到标记
不等=117:JNE/JNZ不等则转移到标记
不高=118:JBE/JNA小于或等于则转移(无符号)
高于=119:JA/JNBE大于则转移(无符号)
为负=120:JS结果为负则转移到标记
为正=121:JNS结果为正则转移到标记
偶数=122:JP/JPE奇偶位为偶则转移到标记
奇数=123:JNP/IPO奇偶位为奇则转移到标记
小于=124:JL/JNGE:小于则转移(带符号)
大等=125:JGE/JNL大于或等于则转移(带符号)
小等=126:JLE/JNG小于或等于(带符号)
大于=127:JG/JNLE大于则转移(带符号数)
等于=136:MOV赋值操作,把右边数据传送到左边
短址=138:Mov 低,@
选段=140:段选Mov 寄,段
段选=142:段选Mov 段,寄
短数=176:MOV al,10
传值=184:MOV把右边数值
寄存=192:寄存器运算标志位
回收=194:返回且回收压入堆栈的长度
返回=195:返回到调用处继续执行
异断=204:int3异常软中断
中断=205:int:指定中断号
为零=227:JCXZ/JECXZ到CX/ECX为零则转移
调用=232:call调用某程序段
跳到=235:JMP:直接跳转到标记处,短地址跳转
休止=244:HLT让CPU暂停的指令
[8051]
存一=B8
存二=B9
存三=BA
存四=BB
存五=BC
存六=BD
存七=BE
存八=BF
[c51]
89C51=1
89C52=1
C2052=1
[STC32]
段es,ax=C08E
段cs,cx=C88E
段ss,ax=D08E
段ds,ax=D88E
段fs,ax=E08E
段gs,ax=E88E
[宏晶2]
STC32G=4
STC8系列=1
STC15系列=1
STC12系列=1


费先生
1 声望0 粉丝