欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

第6章 動手操作-DEBUG的使用2(X86匯編教程)

作者:51hei   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月23日   【字體:

本教程目錄 http://m.raoushi.com/mcu/2619.html

      本章將真正開始教你一些匯編指令,也許你早就期待著了.好,首先說匯編指令的格式(看不懂的話不要糾結(jié)在這里,繼續(xù)看,后邊會進(jìn)行講解!):
[代碼標(biāo)號][:]<指令名>[空格][操作數(shù)1][,][操作數(shù)2]
        打了尖括號的是每行匯編代碼都必須有的,打方括號的是看情況決定有沒有的,詳解:

 
標(biāo)號(這個(gè)暫時(shí)不用理解,先大概看看,以后講到了再理解.):
        之前說過,匯編代碼是在內(nèi)存中的,所以,每行代碼都會在內(nèi)存中占用一定字節(jié),當(dāng)然,也就有了個(gè)地址.有的時(shí)候我們可能會需要用到某行代碼的地址,代碼將會被放到內(nèi)存的什么地方,一般在代碼編譯出來就會計(jì)算好.所以在代碼中可以直接輸入那行代碼在內(nèi)存中的地址.但是呢.假如修改了代碼,那內(nèi)存地址不就變了嗎? 所以人們想了這么個(gè)辦法:用一句文本代替數(shù)字地址,等編譯器編譯的時(shí)候計(jì)算出那行文本所代表的代碼的地址再自動填寫進(jìn)引用到那句文本的地方.
 
":":
        這個(gè)是跟在標(biāo)號后邊的,把標(biāo)號和指令名區(qū)分開來(就算特殊情況標(biāo)號后邊沒有任何東西也必須加":").
指令名:
        匯編代碼的指令,CPU根據(jù)指令知道要做什么事.
 
空格:
        把指令和操作數(shù)區(qū)分開來.
 
",":
        把2個(gè)操作數(shù)區(qū)分開來
 
操作數(shù):
        執(zhí)行指令所需要的數(shù)據(jù),比如我們在數(shù)學(xué)中要進(jìn)行除法運(yùn)算,需要被除數(shù)和除數(shù)這2個(gè)"操作數(shù)",在匯編里,匯編指令也需要相應(yīng)的操作數(shù)才能進(jìn)行計(jì)算,需要多少個(gè)操作數(shù)由指令決定,有些指令不需要操作數(shù),有些需要1個(gè),有些需要2個(gè))
 

 
第一個(gè)指令
        相信你已經(jīng)從前邊的內(nèi)容中學(xué)會了匯編的語法格式.現(xiàn)在將教你1個(gè)指令,并教你在Debug中輸入它進(jìn)行測試.指令資料:

 

指令名                           :MOV 
操作數(shù)數(shù)量                    :2
操作數(shù)用途                    :目標(biāo)操作數(shù),源操作數(shù)
指令用途                        :把一個(gè)數(shù)據(jù)從源操作數(shù)復(fù)制到目標(biāo)操作數(shù)

        我希望你能寫一個(gè)筆記,把將來教的各種指令記錄下來.這對學(xué)習(xí)有好處,指令手冊什么的,只有手冊作者的理解,無法寫入你自己的理解.人家寫的你不一定看的懂.

        好了,接下來,在Debug里面試一下這個(gè)指令吧.打開DeBug,用A指令進(jìn)入[匯編代碼編輯模式](不要急著輸入代碼,先看講解!!!)

 

 
匯編代碼編輯模式講解
 
        根據(jù)上圖,你會看到右邊顯示一個(gè)內(nèi)存地址,你輸入的代碼將被轉(zhuǎn)換成機(jī)器碼放到這個(gè)地址.旁邊有一個(gè)光標(biāo),這就是你輸入?yún)R編代碼的地方了.在這里輸入代碼,按下回車,就會直接將該行代碼轉(zhuǎn)換成機(jī)器碼,并計(jì)算出長度.如果輸入的代碼有錯(cuò)誤,DeBug會在錯(cuò)誤處下面顯示:"Error"

        DeBug并不是匯編編譯器,所以對匯編代碼是有限支持,標(biāo)號是不給用的,只支持十六進(jìn)制,至于二進(jìn)制和十進(jìn)制,反正我是沒在這里用到過.
 

好了,來試試MOV指令吧,用MOV往寄存器AX里寫入數(shù)據(jù)1234H.

        把1234H寫入AX,那么1234H就是"源操作數(shù)"了,AX就是"目標(biāo)操作數(shù)"了,代碼這么寫(注意指令名和第一個(gè)操作數(shù)之間的空格,不要漏了!):

MOV AX,1234

輸入指令后回車,你會看到DeBug還在代碼編輯模式.在么退出代碼編輯模式呢?直接空代碼回車即可:


 

代碼編輯成功,如何執(zhí)行剛才輸入的代碼呢?不急,先看看寄存器內(nèi)容吧,R指令:


 


 

首先看,AX寄存器.內(nèi)容是0000,接著看內(nèi)容的最下方.之前看不懂的一行.現(xiàn)在已經(jīng)基本能看懂了.這里顯示的是即將執(zhí)行的代碼(地址為:CS段寄存器:IP偏移寄存器)格式如下:

內(nèi)存地址(段:偏移) 機(jī)器碼(數(shù)字代碼) 反匯編(匯編代碼轉(zhuǎn)機(jī)器碼了,機(jī)器碼轉(zhuǎn)回匯編代碼叫反匯編)

        由上可見MOV AX,1234的機(jī)器碼是B8 34 12(這個(gè)34 12就是第2個(gè)操作數(shù)了,至于為啥會反過來,這是高位低位排序原因,請自行翻閱之前的章節(jié))好了,來執(zhí)行代碼看看吧(終于執(zhí)行代碼了TAT),在 DeBug中,用T指令可以執(zhí)行一行代碼.執(zhí)行看看:

T   回車

好了執(zhí)行完畢.看看AX寄存器的內(nèi)容:


 

         成功了,我們用匯編指令把一個(gè)數(shù)字寫入到了AX寄存器里.

這一章就講到這里,給個(gè)小作業(yè),試試看把1234H寫入BX寄存器,然后把BX寄存器的內(nèi)容復(fù)制到AX寄存器,成功后把代碼回復(fù)上來~

 

關(guān)閉窗口

相關(guān)文章