匯編語言-環境搭建


虛擬機安裝MS-DOS環境

安裝Vmware,並下載MS-DOS鏡像。(AMD要啟用SVM)

安裝MS-DOS鏡像

一路Next,重裝完畢后會報錯

這是BIOS啟動設置的問題,按CTRL+ALT+INSERT重啟虛擬機,在vm出現logo時按F2(把握好時間,多試幾次),進入BIOS設置,向右鍵(→)切換到Boot欄,向下鍵(↓)選擇到CD-ROM Drive(變白即為選中),然后按SHIFT和加號(+),將其移動到最頂端。向右鍵(→)切換到Exit欄,選中“Exit Saving Changes”,按兩次回車,保存設置並重啟。

繼續一路Next,然后這一步不選擇“Install Add-Ons”(在選項上按空格即可取消選擇),“Next”

 

這一步選擇“Enable both UMB and EMS”

 

選擇“Load both”

選擇“Use default”

選擇“Continue”

然后會提示你是否重啟,在重啟之前,將連接改為使用物理驅動器,然后重啟,不然會一直重裝。

重啟成功

masm和link編譯文件

DOS本身並沒有自帶這兩個軟件,需要我們將masm這個文件夾放到DOS里面。先關閉DOS,然后右鍵進入設置,選擇“硬盤”,在右面的“硬盤實用工具中”,點擊“映射”。去掉“以只讀模式打開文件”的選擇,點擊確定。

這時會自動打開該磁盤(如果沒打開在我的電腦中可以找到該磁盤),把masm文件夾復制進去。

返回虛擬機,點擊“斷開連接”,確定。

使用dir命令可以看到

環境搭建完成。

WIN10下DOSBox安裝

環境

下載DOSBOX和debug.exe

微軟的masm5.0匯編編譯器,文件名為masm.exe

微軟的Overlay Linker3.60 連接器,文件名為link.exe

安裝DOSBOX,並在F盤下新建目錄TASM,把debug.exe、masm.exe、link.exe放入其中。

配置DOSBox

把DOSBOX安裝之后打開安裝文件夾,找到DOSBox 0.74 Options.bat,然后雙擊運行,找到conf文件最后最后一行,改成如下形式:

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
MOUNT C F:\TASM
C:
debug

運行

運行DOSBox,輸入-r查看。

Debug使用

Debug功能

Debug是DOS、Windows 都提供的實模式(8086 方式)程序的調試工具。使用它,可以查看CPU 各種寄存器中的內容、內存的情況和在機器碼級跟蹤程序的運行。

  • 用Debug 的R 命令查看、改變CPU 寄存器的內容;
  • 用Debug 的D 命令查看內存中的內容;
  • 用Debug 的E 命令改寫內存中的內容;
  • 用Debug 的U 命令將內存中的機器指令翻譯成匯編指令;
  • 用Debug 的T 命令執行一條機器指令;
  • 用Debug 的A 命令以匯編指令的格式在內存中寫入一條機器指令。

Debug 的命令比較多,共有20 多個,但這6 個命令是和匯編學習密切相關的。

進入Debug

進入dos,運行debug程序,輸入r查看所有寄存器的內容

R命令修改寄存器中的值

輸入“r ax" 后按Enter 鍵,將出現“:”作為輸入提示,在后面輸入要寫入的數據后按Enter 鍵,即完成了對AX中內容的修改。

修改cs/ip中的值

D命令查看內存中的內容

方式一:d 段地址:偏移地址。Debug將列出從指定內存單元開始的128 個內存單元的內容。例如:d 1000:0

方式二:d 段地址:起始偏移地址  結尾偏移地址。DEBUG從起始位置開始一直顯示到結束位置。例如:d 1000:0 9。

方式三:d 段地址:起始偏移地址 L長度,長度以L參數為標識。DEBUG從起始位置開始顯示指定長度的內容。例如:d 1000:0 L9。

E命令改寫內存

e 段地址:偏移地址 數據 數據 數據……

 輸入e 1000:10, 按Enter 鍵。

e 段地址:偏移地址,逐個修改

Debug 顯示起始地址1000:0010, 和第一單元(即1000:0010 單元)的原始內容,然后光標停在“.”的后面提示輸入想要寫入的數據,此時可以有兩個選擇: 其一為輸入數據, 然后按空格鍵,即用輸入的數據改寫當前的內存單元; 其二為不輸入數據,直接按空格鍵,則不對當前內存單元進行改寫。
當前單元處理完成后(不論是改寫或沒有改寫,只要按了空格鍵,就表示處理完成), Debug 將接着顯示下一個內存單元的原始內容,並提示進行修改,讀者可以用同樣的方法處理。所有希望改寫的內存單元改寫完畢后,按Enter 鍵, E 命令操作結束。

用E命令寫入字符

用E命令從內存1000:0 開始寫入數值1、字符“a"、數值2、字符"b"、數值3、字符“C"'。字符“a"、“b"、"C"的ASCII碼十六進制值:61H、62H、63H。

用E命令將機器碼寫入內存

機器碼也是數據,可以用E命令將機器碼寫入內存。

U命令將內存單元中的內容翻譯為匯編指令

T命令執行CS:IP指向的指令

首先6個存儲單元的機器碼寫入內存1000:0000,並查看機器碼對應的匯編指令。

修改cs和ip中存儲的段地址和偏移量,並查看CS、IP寄存器中的地址。以及AX、CX寄存器中的值。

T指令運行CS:IP指向的指令數據,執行完后IP偏移量會自動移動到下一個。

A命令以匯編指令的形式在內存中寫入機器指令

debug指令總結

    • 查看、修改CPU 中寄存器的內容: R 命令
    • 查看內存中的內容: D 命令
    • 修改內存中的內容: E 命令(可以寫入數據、指令,在內存中,它們實際上沒有區別)
    • 將內存中的內容解釋為機器指令和對應的匯編指令: U 命令
    • 執行CS:IP 指向的內存單元處的指令: T 命令
    • 以匯編指令的形式向內存中寫入指令: A 命令

參考鏈接:

https://www.cnblogs.com/bestsheng/p/5659932.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM