在去年寫過如何bc3.1編譯ucos,不過現在很少去用到,但是那是用dosbox也是懵懵懂懂的,參見https://blog.csdn.net/liming0931/article/details/82320088
隨着c語言使用的不斷熟悉,偶爾看到一篇pdf,是姚新顏寫的《c語言的標准和實現》,里面有提到如果要深入學習c語言,要懂點x86的匯編,之前我增加學過51的匯編,多多少少有點理解,就是x86的很多寄存器和51的不一樣,自然界聯想到了王爽的《匯編語言》第三版,那么學習之前要有匯編的編譯環境,網上有虛擬機+dos的方案,但是我用過dosbox,那么不用費盡安裝虛擬機,因為我的老電腦已經帶不動了,但是dosbox肯定沒問題的,所以就使用了這個方案。
網上下載的masm5.0和debug.exe,dosbox下載最新版,和之前不會沖突,這樣我之前的配置文件依然有效,會有兩個conf文件,這樣我0.74.3用學習匯編,0.74.2學習ucos,互不干擾。
在C:\Users\Administrator\AppData\Local\DOSBox下會有dosbox-0.74-3.conf文件。很不錯哦~~
末尾添加如下:
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
mount c d:\masm5.0
set PATH=%PATH;
c:
這樣就把我的編譯器加載進來了。
實例:
參考https://www.cnblogs.com/liuzeyu12a/p/10285384.html
https://www.cnblogs.com/lihaiyan/p/4274475.html
https://blog.csdn.net/zdwzzu2006/article/details/3990152?locationNum=11&fps=1
DATA SEGMENT
BUF DB 'HELLO WORLD! THIS IS MY FIRST ASM FILE! $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,BUF
MOV AH,09
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
保存hello.asm
1、開啟dosbox:
2、編譯asm文件
這樣會生成hello.obj文件。后面兩個是不會生成的。
3、link鏈接 obj文件
同樣,后面兩個文件不生成,最后生成了hello.exe。
執行后就打印了字符串的信息。
匯編的語法還需要繼續學習,尤其是指針的操作
lea是“load effective address”的縮寫,簡單的說,lea指令可以用來將一個內存地址直接賦給目的操作數,例如:
lea eax,[ebx+8]就是將ebx+8這個值直接賦給eax,而不是把ebx+8處的內存地址里的數據賦給eax。
mov eax,[ebx+8]則是把內存地址為ebx+8處的數據賦給eax。