Win10下C語言轉8086匯編
簡介
最近學習《王爽匯編》,然后突發奇想,想一邊寫C語言用編譯器將其翻譯成匯編代碼,然后對照着學習高級代碼轉換低級代碼的過程,經過一番搜索后發現個不錯的方案:DOSBOX + Turbo C。
開始
直接下網上大佬集成好的帶TC版的DOSBOX,我從CSDN上下的挺坑要積分,我這里上傳到百度雲給各位大佬下載傳送下載 提取碼:6ara 。
寫C代碼
雙擊啟動TC2.0.exe
,打開了Trubo C編寫C語言代碼。
選中File->New
,然后寫個HelloWord
的代碼。
接着按F10
,然后繼續選中File
,接着選中Save
,保存為HelloWorld.C
然后編譯鏈接看看,直接按F9,編譯通過沒有報錯,並且目錄下生成了EXE。
直接ctrl+f9
運行程序,並按alt+f5
切換到DOS界面,就能看到HelloWorld了。
漂亮!終於用C寫了個DOS版的Hello,World 之前都是用匯編寫的。
轉換成匯編代碼
先切換到DOS的shell。
然后執行如下命令tcc -S -ml -I./include -L./lib HelloWorld.c
成功后多出一個HelloWorld.asm
文件,匯編代碼如下。
ifndef ??version
?debug macro
endm
endif
?debug S "hellowor.c"
HELLOWOR_TEXT segment byte public 'CODE'
DGROUP group _DATA,_BSS
assume cs:HELLOWOR_TEXT,ds:DGROUP
HELLOWOR_TEXT ends
_DATA segment word public 'DATA'
d@ label byte
d@w label word
_DATA ends
_BSS segment word public 'BSS'
b@ label byte
b@w label word
?debug C E99A8D2D530A68656C6C6F776F722E63
?debug C E937892D53112E2F696E636C7564655C737464696F2E68
?debug C E900501D11122E2F696E636C7564655C7374646172672E68
_BSS ends
HELLOWOR_TEXT segment byte public 'CODE'
; ?debug L 2
_main proc far
; ?debug L 4
push ds
mov ax,offset DGROUP:s@
push ax
call far ptr _printf
pop cx
pop cx
; ?debug L 5
xor ax,ax
jmp short @1
@1:
; ?debug L 6
ret
_main endp
HELLOWOR_TEXT ends
?debug C E9
_DATA segment word public 'DATA'
s@ label byte
db 72
db 101
db 108
db 108
db 111
db 44
db 87
db 111
db 114
db 108
db 100
db 33
db 13
db 10
db 0
_DATA ends
extrn _printf:far
HELLOWOR_TEXT segment byte public 'CODE'
HELLOWOR_TEXT ends
public _main
end