本教程目錄 http://www.zg4o1577.cn/mcu/2619.html
本章將真正開始教你一些匯編指令,也許你早就期待著了.好,首先說匯編指令的格式(看不懂的話不要糾結在這里,繼續看,后邊會進行講解!):
[代碼標號][:]<指令名>[空格][操作數1][,][操作數2]
打了尖括號的是每行匯編代碼都必須有的,打方括號的是看情況決定有沒有的,詳解:
標號(這個暫時不用理解,先大概看看,以后講到了再理解.):
之前說過,匯編代碼是在內存中的,所以,每行代碼都會在內存中占用一定字節,當然,也就有了個地址.有的時候我們可能會需要用到某行代碼的地址,代碼將會被放到內存的什么地方,一般在代碼編譯出來就會計算好.所以在代碼中可以直接輸入那行代碼在內存中的地址.但是呢.假如修改了代碼,那內存地址不就變了嗎? 所以人們想了這么個辦法:用一句文本代替數字地址,等編譯器編譯的時候計算出那行文本所代表的代碼的地址再自動填寫進引用到那句文本的地方.
":":
這個是跟在標號后邊的,把標號和指令名區分開來(就算特殊情況標號后邊沒有任何東西也必須加":").
指令名:
匯編代碼的指令,CPU根據指令知道要做什么事.
空格:
把指令和操作數區分開來.
",":
把2個操作數區分開來
操作數:
執行指令所需要的數據,比如我們在數學中要進行除法運算,需要被除數和除數這2個"操作數",在匯編里,匯編指令也需要相應的操作數才能進行計算,需要多少個操作數由指令決定,有些指令不需要操作數,有些需要1個,有些需要2個)
第一個指令
相信你已經從前邊的內容中學會了匯編的語法格式.現在將教你1個指令,并教你在Debug中輸入它進行測試.指令資料:
指令名 :MOV
操作數數量 :2
操作數用途 :目標操作數,源操作數
指令用途 :把一個數據從源操作數復制到目標操作數
我希望你能寫一個筆記,把將來教的各種指令記錄下來.這對學習有好處,指令手冊什么的,只有手冊作者的理解,無法寫入你自己的理解.人家寫的你不一定看的懂.
好了,接下來,在Debug里面試一下這個指令吧.打開DeBug,用A指令進入[匯編代碼編輯模式](不要急著輸入代碼,先看講解!!!)
匯編代碼編輯模式講解
根據上圖,你會看到右邊顯示一個內存地址,你輸入的代碼將被轉換成機器碼放到這個地址.旁邊有一個光標,這就是你輸入匯編代碼的地方了.在這里輸入代碼,按下回車,就會直接將該行代碼轉換成機器碼,并計算出長度.如果輸入的代碼有錯誤,DeBug會在錯誤處下面顯示:"Error"
DeBug并不是匯編編譯器,所以對匯編代碼是有限支持,標號是不給用的,只支持十六進制,至于二進制和十進制,反正我是沒在這里用到過.
好了,來試試MOV指令吧,用MOV往寄存器AX里寫入數據1234H.
把1234H寫入AX,那么1234H就是"源操作數"了,AX就是"目標操作數"了,代碼這么寫(注意指令名和第一個操作數之間的空格,不要漏了!):
MOV AX,1234
輸入指令后回車,你會看到DeBug還在代碼編輯模式.在么退出代碼編輯模式呢?直接空代碼回車即可:
.png)
代碼編輯成功,如何執行剛才輸入的代碼呢?不急,先看看寄存器內容吧,R指令:
.png)
首先看,AX寄存器.內容是0000,接著看內容的最下方.之前看不懂的一行.現在已經基本能看懂了.這里顯示的是即將執行的代碼(地址為:CS段寄存器:IP偏移寄存器)格式如下:
內存地址(段:偏移) 機器碼(數字代碼) 反匯編(匯編代碼轉機器碼了,機器碼轉回匯編代碼叫反匯編)
由上可見MOV AX,1234的機器碼是B8 34 12(這個34 12就是第2個操作數了,至于為啥會反過來,這是高位低位排序原因,請自行翻閱之前的章節)好了,來執行代碼看看吧(終于執行代碼了TAT),在 DeBug中,用T指令可以執行一行代碼.執行看看:
T 回車
好了執行完畢.看看AX寄存器的內容:
.png)
成功了,我們用匯編指令把一個數字寫入到了AX寄存器里.
這一章就講到這里,給個小作業,試試看把1234H寫入BX寄存器,然后把BX寄存器的內容復制到AX寄存器,成功后把代碼回復上來~