本来是想认真再写编译器,但是.....
.....但是败在我不懂编程语言的词法分析、语法分析、语义分析的原理,也写不出啊。我是设计了汇编程序的模板,模拟我的全新编译器所生成的源文件。这个全新编译器本来是想读取现有C#源文件(仅接受ConsoleApp项目),然后转换成汇编(FASM)源文件,以便进一步生成Windows可执行文件,但是我败在不懂词法分析、语法分析、语义分析,不知道如何诠释C#语言啊(或任何其他编程语言)。
虽然如此,还是发布我的汇编程序模板在这里。
format PE console
include 'WIN32A.INC'
entry start
MAX_LEN equ 80
section '.code' code readable executable
start:
;HANDLE WINAPI GetStdHandle(
;_In_ DWORD nStdHandle
;);
invoke GetStdHandle, -10
mov dword , eax
invoke GetStdHandle, -11
mov dword , eax
;BOOL WINAPI ReadConsole(
;_In_ HANDLEhConsoleInput,
;_Out_ LPVOIDlpBuffer,
;_In_ DWORD nNumberOfCharsToRead,
;_Out_ LPDWORD lpNumberOfCharsRead,
;_In_opt_ LPVOIDpInputControl
;);
invoke ReadConsole, dword , _msg, MAX_LEN, _dummy, 0
;BOOL WINAPI WriteConsole(
;_In_ HANDLEhConsoleOutput,
;_In_ const VOID *lpBuffer,
;_In_ DWORD nNumberOfCharsToWrite,
;_Out_opt_ LPDWORD lpNumberOfCharsWritten,
;_Reserved_ LPVOIDlpReserved
;);
invoke WriteConsole, dword , _msg, MAX_LEN, _dummy, 0
invoke WriteConsole, dword , _crlf, 2, _dummy, 0
;add
mov eax, dword
mov dword , eax
mov eax, dword
add dword , eax
call wsprint
;subtract
mov eax, dword
mov dword , eax
mov eax, dword
sub dword , eax
call wsprint
;multiply
cdq
mov eax, dword
mov ebx, dword
imul ebx
mov dword , eax
call wsprint
;divide
cdq
mov eax, dword
mov ebx, dword
idiv ebx
mov dword , eax
call wsprint
;void ExitProcess(
; UINT uExitCode
;);
invoke ExitProcess, 0
wsprint:
;int WINAPIV wsprintfA(
; LPSTRunnamedParam1,
;LPCSTR unnamedParam2,
; ...
;);
cinvoke wsprintfA, _buf, _fmt, dword
mov dword , eax
invoke WriteConsole, dword , _buf, dword , _dummy, 0
invoke WriteConsole, dword , _crlf, 2, _dummy, 0
ret
section '.data' data readable writeable
_buf rb 10;MAX =4294967295
_fmt db '%d'
_len dd ?
_dummy dd ?
_msg rb MAX_LEN
_crlf db 13,10,0
_stdin dd ?
_stdoutdd ?
_var_1 dd 1234
_var_2 dd 2
_var_0 dd ?
section '.idata' import data readable writeable
library kernel32, 'kernel32.dll',\
user32, 'user32.dll'
include 'API/KERNEL32.INC'
include 'API/USER32.INC' 不太精通的地方可以慢慢学,现在信息的来源很多,你已经很厉害了。
而且现在事物的变化都是日新月异,人们都是需要知识的更新换代,活到老学到老,很正常。
不必纠结,享受学习的过程就好了,即使是一些高手,也有知识的盲区,都是需要不断学习的,加油哦 蓝莓糖 发表于 2022-12-2 20:26
不太精通的地方可以慢慢学,现在信息的来源很多,你已经很厉害了。
而且现在事物的变化都是日新月异,人们 ...
谢谢蓝莓糖的鼓励,想不到回复的不是同行人,而是一位勤奋有爱心的女生。
我在本地论坛也发了大概同样的帖子,只得到一个同行人的冷冷回应,仅随意丢下一个链接而已,令我大失所望。
你的这番话弥补了我的缺憾。
即使是一些高手,也有知识的盲区,都是需要不断学习的
真希望是这样,那些高手给我的感觉总是什么都会,什么都精通,没有弱点。
再次谢谢蓝莓糖! 孤星11 发表于 2022-12-2 21:07
谢谢蓝莓糖的鼓励,想不到回复的不是同行人,而是一位勤奋有爱心的女生。
我在本地论坛也发了大概同样的 ...
不客气的 本人对底层不是很熟悉,所以不好发表意见!
编译器好高深呀! legs+ 发表于 2022-12-2 22:30
本人对底层不是很熟悉,所以不好发表意见!
编译器好高深呀!
因为我总觉得自己很差劲,别人比我优越得多,所以才那样说话,特别是被本地论坛那位程序员气到,才在这里发表感想。谢谢legs+一直给我和大家带来新知,给我题材。
页:
[1]