分享一下自己的資源。。。
連結:https://pan.baidu.com/s/1z6zdi-szqWLFgzBhnPYXoQ 密碼:638v
必備的知識儲備
debug.exe只是調試工具,不是彙編工具,不能將a.asm彙編串連產生可執行程式。
debug.exe帶有內建的彙編功能,但功能極弱,僅僅只能支援指令的彙編,不支援大多數常用偽指令的彙編。比如,它不支援變數名和語句標號的使用。它只能在進入debug後用a命令逐指令彙編。
要將一個a.asm這樣的組合語言來源程式彙編成可執行檔,你必須要另外使用彙編和串連程式。常用的彙編串連工具有兩種,一種是MASM,另一種是TASM。(上面的連結都有,其中TASM的下載費了我兩塊大洋呢。。。)
MASM需要至少兩個檔案:masm.exe和link.exe 版本可以用5.0以上的。
TASM需要tasm.exe和tlink.exe,還有一些輔助檔案。版本可以用3.0或5.0 。
網上有一些建議使用TASM,說它最大的優點是它配套的偵錯工具Turbo Debugger功能比debug強大很多、很多、很多倍,視窗介面,滑鼠操作。。。。
強不強,現在初入彙編的我不敢妄言,等都使用過再來做定論。
關於MASM整合式開發環境
當然我還下載了一款整合IDE,MASM for windows 2012 ,看著還挺不錯的,不過部分功能需要註冊才能使用,但是作為初學者,免費的功能全會了應該也就差不多入門了呢。
emmm,,,其中我比較看好的是關於它調試的兩種工具 工具->選項
怎麼好了,我也說不上了,直覺。。。
Hello World編寫
一門新的語言,依舊還是從我們的hello word開始吧,hello world的重要意義遠不止表面。
;完整段的Hello World程式DATAS SEGMENT STRING DB 'Hello World!',13,10,'$'DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21HCODES ENDS END START
注意了,字串的名字本來起的是STR,然後死活不通過,突然發現STR是彙編的一個關鍵字。。。。
1.SEGMENT:表示段,段定義偽指令。
彙編中有資料區段、程式碼片段、堆棧段以及附加段
格式為: 段名 SEGMENT [定位類型][組合類別型][類別名]
段名 ENDS
功能:把程式分段,實現儲存空間的分段管理
該程式由DATAS資料區段和CODES的程式碼片段兩部分組成
2.STRING DB 13,10,‘Hello World!’,13,10,’$’
13和10分別表示斷行符號符和分行符號的ASCII碼,執行結果是斷行符號換行
’$’是結束標誌,否則不加’$’會出現亂碼。
這句話相當於C的(char*)STRING=”\nHello World!\n”;
3.INT 21H是DOS中斷功能調用的中斷號;MOV AH,4CH功能是讓你退出程式
其中
MOV AH,4CH
INT 21H
是程式結束時使用的模板,使用AH來選擇功能,其中4CH號功能是退出程式的意思。這個中斷告訴程式執行完畢後返回DOS。
更多關於DOS功能號的看<這裡>.
4.MOV AH,9中9是列印字串的命令號(09H對應的是顯示字串)
注意:課堂與許多教材中的第一個彙編執行個體:“123+456=sum”的例子,都是沒有輸出語句的,必須使用debug調試來顯示程式的結果。
5. 將資料放入DS中
MOV AX , DATAS
MOV DS , AX
把資料區段的起始地址裝到DS中,DATAS是立即數,所以不能直接放入DS這個段寄存器,需要藉助通用寄存器。
6.
LEA DX , STRING ;字串位移起始DX
LEA :Loadeffective address
執行程式
還是上一節的老辦法
masm下如何進入偵錯模式呢。
如果輸入td 2.exe,在masm下是不行的,
只能debug 2.exe
但是如果在tasm環境下,td是可以的。。。
注意操作略有不一樣。。。
這一篇暫時先到這裡吧,寢室要門禁了,我要飛奔回去了。。。
2018年4月26日23:49:15