window10下搭建彙編環境(軟件+資料)

window10下搭建彙編環境


0x00 軟件和資料

軟件包含:

  • dosbox
  • debug
  • masm
  • link
  • exe2bin(這個暫時可以忽略)

資料包含:

  • 王爽老師的《彙編語言》第二版
  • 《彙編語言》第二版 中的習題答案
  • 彙編語言編程藝術(清晰版)

下載地址:

鏈接:https://pan.baidu.com/s/17QfCsbvYNwLnUCHIzsluDQ
提取碼:i27u

0x01 環境搭建

把軟件放在同一個文件夾下,
我的放在D/Debug
在這裏插入圖片描述

  1. 安裝dosbox

選擇安裝目錄(最好是自己選擇一個目錄,方便後面查找
在這裏插入圖片描述
我在D盤創建了一個dosbox文件夾,把它安裝在D盤的dosbox下,選擇好安裝目錄後,點擊安裝即可。
在這裏插入圖片描述
2. 修改dosbox配置文件

安裝好dosbox後,
我們相當於有了一個可以運行debug,masm等(我們寫的彙編程序也是用這個終端來運行)程序的終端程序(cmd,windows10自帶的cmd是運行不了debug,masm。。程序的)。
在這裏插入圖片描述
現在有了可以運行這些程序的cmd,
現在去嘗試運行一下debug,
我們要先轉到debug程序所在的目錄下,
(我的debug程序放在了D/Debug)
在dosbox中輸入:

mount D D:/Debug

(mount命令是掛載硬盤或鏡像的命令,這條指令我的的理解是:把D/Debug文件夾裏的東西在D盤上創建了一個鏡像)

回車之後再輸入D:
然後回車,就轉到了所在目錄
在這裏插入圖片描述
再輸入debug即可運行debug程序(運行其他程序同理,因爲之前我們就把它們放在了同一個目錄下):
在這裏插入圖片描述
debug常用命令(不區分大小寫)有:

r: 查看,修改 cpu寄存器中的內容;
d:查看內存中的內容
e:改寫內存中的內容
u:將機器指令翻譯成彙編指令
t:執行下一條彙編指令
a:以彙編的格式在內存中寫入一條機器指令(寫彙編指令)

在這裏插入圖片描述
其他指令請自行嘗試,大膽嘗試!(這裏並不會損害我們自己的電腦)

這裏有一個問題:每次我們打開dosbox,都需要寫命令轉到需要運行的程序的文件夾然後才能運行程序,很不方便。

我想要的是直接打開dosbox,直接輸入程序名即可運行

所以我們就需要修改一下dosbox的配置,
在dosbox安裝目錄中,找到如下圖選中的這個文件
在這裏插入圖片描述
用記事本打開這個文件(雙擊會默認用記事本打開),
在文件結尾寫入並保存

MOUNT D D:\Debug
D:

在這裏插入圖片描述
現在打開dosbox,直接輸入程序名就可以運行程序了。
在這裏插入圖片描述
3. 其他
debug:調試程序(數據默認就是十六進制,不需要加h)

masm:編譯程序

link:鏈接程序

dosbox:終端運行程序

對於debug和masm,link這三個程序的切換,
在運行debug的時候,輸入quitq可退出運行debug,
從而可以輸入其他程序名來運行其他程序.
但是對於masm和link要退出,目前我不知道有什麼退出命令,
我的做法是,隨便輸入一個字母,按幾下下回車即可。(或者關閉重新打開dosbox,再輸入其他程序名)

在這裏插入圖片描述

0x03 寫彙編程序實例

1. 小型彙編程序:

可以用debug寫。
(但是一般還是用記事本或Notepad++等編輯軟件寫好,然後在dosbox下編譯鏈接運行。debug一般都是用來調試的。)

下面用debug寫一個簡單的程序:

在這裏插入圖片描述
輸入u可以查看彙編指令
在這裏插入圖片描述
輸入t 即可執行一條彙編指令,然後可以觀察寄存器的變化

在這裏插入圖片描述
在這裏插入圖片描述
執行完可以看到AX = 6

2. 比較大型的彙編程序:

用記事本或Notepad++寫好,然後在dosbox下編譯鏈接運行.
比如寫一個:計算2^8的程序:
在debug,masm,link…所在目錄下(這樣編譯運行的時候就直接可以寫文件名,而不用寫具體路徑)新建文件2_8.asm,
用記事本打開,寫入:

	assume cs:code
	code segment
	mov ax,2
	mov cx,8
	s: add ax,ax
	   loop s
	mov ax,4c00h
	int 21h
	code ends
	end

在這裏插入圖片描述

保存。
然後打開dosbox。
編譯,輸入:

masm 2_8.ASM

(這裏是標準的文件,.ASM可以不加文件類型後綴,如果是txt,則需要加上文件類型後綴.txt)
如果要給編譯得到的文件重命名則在Object fileName後輸入文件名,
否則直接回車,一路回車。

編譯後會得到一個.OBJ文件:
在這裏插入圖片描述
鏈接,輸入:

link 2_8

一路回車。。
在這裏插入圖片描述
最終得到了一個可執行文件:2_8.EXE

直接在dosbox中輸入:
2_8.EXE執行,執行完成,屏幕並不會顯示什麼,因爲並沒有寫輸出相關的指令(彙編輸出有點麻煩,要把16進制結果進行轉換,現在就是熟悉一下編程環境)。

在這裏插入圖片描述
現在只能使用debug來追蹤程序指令的執行。
輸入:

debug 2_8.EXE

輸入r,可以查看當前寄存器的情況,
輸入u,可以看到我們的彙編指令已經加載入了內存中。
然後就是t,單步執行指令了。
在這裏插入圖片描述
可以使用:g 偏移地址來一跳過我們不想追蹤的部分,如下圖,
0006之前的已經執行完了,即0006以前的指令看上去“一步就執行完了”.
我們繼續輸入t,就可以追蹤循環部分。
在這裏插入圖片描述
在這裏插入圖片描述

0x04

…彙編輸出真TM麻煩(不過,爲了 代碼瞭解底層實現 還是需要好好學。。)

來一個簡單的“Hello world!”輸出吧:

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
不解釋,多看書~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章