龙芯开源社区

 找回密码
 注册新用户(newuser)
12
返回列表 发新帖
楼主: 惜墨

元編譯器完成

  [复制链接]
发表于 2011-2-17 14:13:09 | 显示全部楼层
小东西很好做,也很容易做好,做大了绝大多数都不怎么样
 楼主| 发表于 2011-2-18 19:23:17 | 显示全部楼层
/////////////////////////////////////////////////
//##使用 元編譯器 編譯##/////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
   
#編譯器名  = 漢河語言編譯器
#主規則  = 高級程序

#引用規則 元編譯器.可視字符
#引用規則 元編譯器.可選空白
#引用規則 元編譯器.行尾
#引用規則 元編譯器.可選空行

#引用規則 元編譯器.標識符
#引用規則 元編譯器.含空標識符

#引用規則 元編譯器.字符
#引用規則 元編譯器.字符串
#引用規則 元編譯器.含空字符串

#引用規則 元編譯器.數字字符16
#引用規則 元編譯器.UniCode表示

#引用規則 述物語言編譯器.述物語言文件
#引用規則 述物語言編譯器.對象描述
#引用規則 述物語言編譯器.對象值

高級程序 = 工程文件 | 程序文件
.............
//普通移位 = << | >>
//符號移位 = !<< | !>>
//循環移位 = ><< | >><
//進位循环移位 = !><< | !>><

或 = "或" | "||" | "又或"//"又或"不短路
異或 = "不同時" | "^^"
與 =  "且" | "&&" | "又且"//"又且"不短路
機理 =  或 | 異或 | 與 //短路機理運算符 = "&&" | "||"
相等比較 = "=" | "<>" | "是" | "不是" //對象運算符 = "是" | "不是"
大小比較 = ">" | "<" | ">=" | "<="
比較 = 大小比較 | 相等比較
位或 = "位或" | "!|"
位異或 = "位異或"| "!^"
位與 = "位與" | "!&"
位機理 = 位或 | 位異或 | 位與
移位 = "<<" | ">>" | "!<<" | "!>>" |  "><<" | ">><" | "!><<" | "!>><"
聯合移位 = "<<<" | ">>>"
加減 = "&" | "+" | "-" //包括數字加法和字符串加法
乘除 = "*" | "/" | "\\" | "%"
乘方 = "^"
相反數 = "-"

.............

/////////////////////////////////////////////////////////////
【編譯器選擇器】【編譯成功!】【用時】:0秒
【創建新編譯器】:元編譯器
【元編譯器】【編譯成功!】【用時】:0.078125秒
元編譯器規則數:94

【編譯器選擇器】【編譯成功!】【用時】:0秒
【創建新編譯器】:述物語言編譯器
【元編譯器】【編譯成功!】【用時】:0.03125秒
述物語言編譯器規則數:41

【編譯器選擇器】【編譯成功!】【用時】:0秒
【創建新編譯器】:漢河語言編譯器
【警告】:規則"含空字符串"未使用!
【元編譯器】【編譯成功!】【用時】:0.3125秒
漢河語言編譯器規則數:501
 楼主| 发表于 2011-2-18 19:24:25 | 显示全部楼层
發點代碼- -
 楼主| 发表于 2011-3-2 00:02:07 | 显示全部楼层
Public Enum x86_16_精簡
        x86_16_精簡_無效 = 0

        '
        '前綴   
        前綴_鎖總線   '1111 0000 'F0   F0H—LOCK.

        前綴_重複非零     'F2H—REPNE/REPNZ (used only with string instructions).  
        前綴_重複不等   '1111 0010  'F2H—REPNE/REPNZ (used only with string instructions).

        前綴_重複零      'F3H—REPE/REPZ (use only with string instructions).
        前綴_重複相等   '1111 0011'F3H—REPE/REPZ (use only with string instructions). cmps串比較

        'REPNE/REPNZ prefix is encoded using F2H. Repeat-Not-Zero prefix
        'applies only to string and input/output instructions. (F2H is also used as a
        'mandatory prefix for some instructions)
        ' 前綴_重複不等 用於串比較,串比較讀取,串寫入,輸入輸出串。   (MOVS, CMPS, SCAS, LODS, STOS, INS, and OUTS)

        前綴_重複       '1111 0011'F3H—REP (use only with string instructions).  movs串賦值

        'REP or REPE/REPZ is encoded using F3H. Repeat prefix applies only to
        'string and input/output instructions.(F3H is also used as a mandatory
        'prefix for some instructions)

        'Some instructions may use F2H,F3H as a mandatory prefix to express distinct func-
        'tionality. A mandatory prefix generally should be placed after other optional prefixes
        '(exception to this is discussed in Section 2.2.1, “REX Prefixes”)  

        前綴_尋址以_代碼段 '0010 1110'2EH—CS segment override (use with any branch instruction is reserved).
        前綴_尋址以_數據段 '3EH—DS segment override prefix (use with any branch instruction is reserved).

        前綴_尋址以_的址段 '26H—ES segment override prefix (use with any branch instruction is reserved).
        前綴_尋址以_堆棧段 '36H—SS segment override prefix (use with any branch instruction is reserved).

        前綴_尋址以_FS段 '64H—FS segment override prefix (use with any branch instruction is reserved).
        前綴_尋址以_GS段 '65H—GS segment override prefix (use with any branch instruction is reserved).
        前綴_Branch_not_taken  '2EH—Branch not taken (used only with Jcc instructions).
        前綴_Branch_taken  '3EH—Branch taken (used only with Jcc instructions).
        '64位模式中cs,ds,es,ss禁用全部清零。fs gs例外、

        前綴_更改_數據長度  '66H—Operand-size override prefix. '改為 非默認長度,32位機非默認長度是16位
        'Operand-size override prefix is encoded using 66H (66H is also used as a
        'mandatory prefix for some instructions).
        前綴_更改_尋址長度  '67H—Address-size override prefix. '32位指令

        前綴_64位擴展   '40--4f  0100wrxb

        十調_字符加後 '37 無前綴 AAA A (64-bit Mode Invalid) Valid ASCII adjust AL after addition
        '              AF and CF ,  #UD If the LOCK prefix is used.   ‘ #UD If in 64-bit mode.

        十調_字符除前 'D5 0A 無前綴 AAD A Invalid Valid ASCII adjust AX before division
        '             D5 ib (No mnemonic) A Invalid Valid Adjust AX before division to number base imm8.
        '             The SF, ZF, and PF flags are set according to the resulting binary value in the AL
        '             register; the OF, AF, and CF flags are undefined.
        十調_字符乘後 '  D4 0A 無前綴 AAM A Invalid Valid ASCII adjust AX after multiply.

        十調_字符減前 '3F 無前綴 AAS A Invalid Valid ASCII adjust AL after subtraction.

        數學_加進      ' 前綴lock ADC—Add with Carry
        數學_加        '04
        '數學_加組合64x2   'SSE2 '66 0F 58 /r ADDPD xmm1, xmm2/m128 Add packed double-precision floating-point values from xmm2/m128 to xmm1.
        '數學_加組合32x4   'SSE '0F 58

        數學_與        'AND

        提升特權級     '63 /r ARPL r/m16, r16 AN. E. Valid Adjust RPL of r/m16 to not less than RPL of r16.

        邊界         '62 /r BOUND r16, m16&16 Check if r16 (array index) is within bounds specified bym16&16
        '             62 /r BOUND r32, m32&32 Check if r32 (array index) is within bounds specified bym16&16

        數位掃描右起 '0F BC BSF r16,r/m16 Bit scan forward on r/m16
        '         0F BC BSF r32,r/m32 Bit scan forward on r/m32
        數位掃描左起  '0F BD BSR r16,r/m16 Bit scan reverse on r/m16
        翻轉字節序      '0F C8+rd BSWAP r32 Reverses the byte order of a 32-bit register.

        數位測試    '基地址,偏移量  '0F A3 BT r/m16,r16 Store selected bit in CF flag
        '          0F A3 BT r/m32,r32 Store selected bit in CF flag                                                   
        '          0F BA /4 ib BT r/m16,imm8 Store selected bit in CF flag
        '          0F BA /4 ib BT r/m32,imm8 Store selected bit in CF flag
        數位取反
        '0F BB BTC r/m16,r16 Store selected bit in CF flag and complement
        '0F BB BTC r/m32,r32 Store selected bit in CF flag and complement
        '0F BA /7 ib BTC r/m16,imm8 Store selected bit in CF flag and complement
        '0F BA /7 ib BTC r/m32,imm8 Store selected bit in CF flag and complement

        數位清零
        '0F B3 BTR r/m16,r16 Store selected bit in CF flag and clear
        '0F B3 BTR r/m32,r32 Store selected bit in CF flag and clear
        '0F BA /6 ib BTR r/m16,imm8 Store selected bit in CF flag and clear
        '0F BA /6 ib BTR r/m32,imm8 Store selected bit in CF flag and clear
        數位置一
        '0F AB BTS r/m16,r16 Store selected bit in CF flag and set
        '0F AB BTS r/m32,r32 Store selected bit in CF flag and set
        '0F BA /5 ib BTS r/m16,imm8 Store selected bit in CF flag and set
        '0F BA /5 ib BTS r/m32,imm8 Store selected bit in CF flag and set
        調用_相對
        'E8 cw CALL rel16 Call near, relative, displacement relative to next instruction
        'E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
        調用_絕對
        'FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16
        'FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
        調用_遠程
        '9A cd CALL ptr16:16 Call far, absolute, address given in operand
        '9A cp CALL ptr16:32 Call far, absolute, address given in operand
        'FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16
        'FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32

        符擴8為16
        '98 CBW AX ← sign-extend of AL
        符擴16為32
        '98 CWDE EAX ← sign-extend of AX
        符擴32為64

        標誌_進借位_清零
        'F8 CLC Clear CF flag
        標誌_方向_正方向
        'FC CLD Clear DF flag

        系統_使緩存無效
        '0F  AE /7 CLFLUSH m8 Flushes cache line containing m8.

        系統_禁止中斷
        'FA CLI Clear interrupt flag; interrupts disabled when interrupt flag cleared

        系統_協上下文_不需保存
        '0F 06 CLTS Clears TS flag in CR0

        標誌_進位_取反
        'F5 CMC Complement CF flag

        條件賦值   'x86標誌條件

        比較

        串比較8   'a6
        串比較16  'a7
        串比較32

        比較交換 'CMPXCHG     al,rm,r 若al=rm則rm:=r(讓他不等), 若al<>rm則al:=rm(讓他相等)               
        比較交換組合 'CMPXCHG8B  'CMPXCHG  EDX:EAX,rm,ECX:EBX

        x86_16_精簡_上限
    End Enum
 楼主| 发表于 2011-3-2 00:03:15 | 显示全部楼层
研究半個多月,基本搞清了x86指令格式。
 楼主| 发表于 2011-5-23 17:40:24 | 显示全部楼层

本版积分规则

Archiver|手机版|小黑屋|Lemote Inc.

GMT+8, 2021-1-19 16:56 , Processed in 0.122846 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表