编写个8086的简单编译器
要求:
1.能做四则运算即可
2.文本框里输入2+3,输出5(这是例子,实际是可变的)
3.要求输出8086的汇编代码
4.要求输出编译后的可执行文件
分不够可以再加
[解决办法]
这个叫汇编程序。
首先lz要搞明白一点:汇编程序是不能生成可执行文件的。
汇编程序生成的机器码是目标文件,不同的OS下,可执行文件除了机器码以外,还需要附加的信息(比如可执行文件的环境、执行头、入口点、外部库描述表、数据段、版本信息等等),这些信息需要链接程序完成。
最简单的,可以另外编写一个汇编的框架程序。将你的“程序”用逆波兰式,转换为一小段汇编,嵌入这个框架,再调用汇编程序、链接程序,最后得到可执行文件。
[解决办法]
0F 87 JNBE
0F 88 JS
0F 89 JNS
0F 8A JP
0F 8A JPE
0F 8B JNP
0F 8B JPO
0F 8C JL
0F 8C JNGE
0F 8D JGE
0F 8D JNL
0F 8E JLE
0F 8E JNG
0F 8F JG
0F 8F JNLE
0F 90 SETO
0F 91 SETNO
0F 92 SETB
0F 92 SETC
0F 92 SETNAE
0F 93 SETAE
0F 93 SETNB
0F 93 SETNC
0F 94 SETE
0F 94 SETZ
0F 95 SETNE
0F 95 SETNZ
0F 96 SETBE
0F 96 SETNA
0F 97 SETA
0F 97 SETNBE
0F 98 SETS
0F 99 SETNS
0F 9A SETP
0F 9A SETPE
0F 9B SETNP
0F 9B SETPO
0F 9C SETL
0F 9C SETNGE
0F 9D SETGE
0F 9D SETNL
0F 9E SETLE
0F 9E SETNG
0F 9F SETG
0F 9F SETNLE
0F A0 PUSH
0F A1 POP
0F A3 BT
0F A4 SHLD
0F A5 SHLD
0F A8 PUSH
0F A9 POP
0F AA RSM
0F AB BTS
0F AC SHRD
0F AD SHRD
0F AF IMUL
0F B0 CMPXCHG
0F B1 CMPXCHG
0F B2 LSS
0F B3 BTR
0F B4 LFS
0F B5 LGS
0F B6 MOVZX
0F B7 MOVZX
0F BA BT
0F BA BTC
0F BA BTR
0F BA BTS
0F BB BTC
0F BC BSF
0F BD BSR
0F BE MOVSX
0F BF MOVSX
0F C0 XADD
0F C1 XADD
0F C7 CMPXCHG8B
0F C8 BSWAP
0F D1 PSRLW
0F D2 PSRLD
0F D3 PSRLQ
0F D8 PSUBUSB
0F D9 PSUBUSW
0F DB PAND
0F DC PADDUSB
0F DD PADDUSW
0F DF PANDN
0F E1 PSRAW
0F E2 PSRAD
0F E5 PMULHW
0F E8 PSUBSB
0F E9 PSUBSW
0F EB POR
0F EC PADDSB
0F ED PADDSW
0F EF PXOR
0F F1 PSLLW
0F F2 PSLLD
0F F3 PSLLQ
0F F5 PMADDWD
0F F8 PSUBB
0F F9 PSUBW
0F FA PSUBD
0F FC PADDB
0F FD PADDW
0F FE PADDD
10 ADC
11 ADC
12 ADC
13 ADC
14 ADC
15 ADC
16 PUSH
17 POP
18 SBB
19 SBB
1A SBB
1B SBB
1C SBB
1D SBB
1E PUSH
1F POP
20 AND
21 AND
22 AND
23 AND
24 AND
25 AND
27 DAA
28 SUB
29 SUB
2A SUB
2B SUB
2C SUB
2D SUB
2F DAS
30 XOR
31 XOR
32 XOR
33 XOR
34 XOR
35 XOR
37 AAA
38 CMP
39 CMP
3A CMP
3B CMP
3C CMP
3D CMP
3F AAS
40 INC
48 DEC
50 PUSH
58 POP
60 PUSHA
60 PUSHAD
61 POPA
61 POPAD
62 BOUND
63 ARPL
68 PUSH
69 IMUL
6A PUSH
6B IMUL
6C INS
6C INSB
6D INS
6D INSD
6D INSW
6E OUTS
6E OUTSB
6F OUTS
6F OUTSD
6F OUTSW
70 JO
71 JNO
72 JB
72 JC
72 JNAE
73 JAE
73 JNB
73 JNC
74 JE
74 JZ
75 JNE
75 JNZ
76 JBE
76 JNA
77 JA
77 JNBE
78 JS
79 JNS
7A JP
7A JPE
7B JNP
7B JPO
7C JL
7C JNGE
7D JGE
7D JNL
7E JLE
7E JNG
7F JG
7F JNLE
80 ADC
80 ADD
80 AND
80 CMP
80 OR
80 SBB
80 SUB
80 XOR
81 ADC
81 ADD
81 AND
81 CMP
81 OR
81 SBB
81 SUB
81 XOR
83 ADC
83 ADD
83 AND
83 CMP
83 OR
83 SBB
83 SUB
83 XOR
84 TEST
85 TEST
86 XCHG
87 XCHG
88 MOV
89 MOV
8A MOV
8B MOV
8B MOV
8C MOV
8D LEA
8E MOV
8F POP
90 NOP
90 XCHG
98 CBW
98 CWDE
99 CDQ
99 CWD
9A CALL
9A CALL
9B D9 FSTCW
9B D9 FSTENV
9B DB E2 FCLEX
9B DB E3 FINIT
9B DD FSAVE
9B DD FSTSW
9B DF E0 FSTSW
9B FWAIT
9B WAIT
9C PUSHF
9C PUSHFD
9D POPF
9D POPFD
9E SAHF
9F LAHF
[解决办法]
这个问题,我只能帮顶。。。。仰慕楼主的思想!