版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
匯編語言簡介董千里Email:Olin.Dung@軟件與微電子學(xué)院科協(xié)C\C++小組
講課之前History機(jī)器語言
機(jī)器指令集合
一系列0、1二進(jìn)制組合,轉(zhuǎn)換為高低
電平,驅(qū)動(dòng)計(jì)算機(jī)電子器件進(jìn)行運(yùn)算有什么優(yōu)點(diǎn)、有什么缺點(diǎn)?難于記憶、編寫、查錯(cuò)為什么學(xué)習(xí)匯編?Typicaluse操作系統(tǒng)bootloader、driver逆向工程游戲、多媒體使用IntelMMX、SSEseries指令集、AMD3DNOWFFMpeg中內(nèi)聯(lián)匯編使用MMX指令將機(jī)器碼映射為助記符
將機(jī)器碼映射為助記符
Assembler計(jì)算機(jī)體系結(jié)構(gòu)RegisterALUCUBUSRAMADDBUSControlBUSDataBUS對寄存器操作內(nèi)存訪問算術(shù)、邏輯運(yùn)算條件控制寄存器RegisterCPU內(nèi)可存放數(shù)據(jù)Intel8086RegisterIntel8086Register(cont.)14個(gè)太多!寄存器Register(cont.)我們先關(guān)注MainReg(通用寄存器)16bitMainRegister可分為兩個(gè)8bitRegX86中8bit=1byte(字節(jié))2bytes=1word(字)4bytes=1dword(雙字)
寄存器Register(cont.)寄存器賦值操作 movax,1 ax=1 movbx,ax bx=ax算術(shù)操作 addax,bx ax+=bx subax,bx ax-=bx現(xiàn)在我們可以寫一些簡單的計(jì)算程序Debug.exe在“開始->運(yùn)行”中啟動(dòng)debugDebug.exe(cont.)一些debug命令A(yù)以匯編形式將機(jī)器指令寫入內(nèi)存T單步執(zhí)行U反匯編內(nèi)存D查看內(nèi)存內(nèi)容R查改寄存器E改寫內(nèi)存Debug.exe(cont.)使用a輸入指令并執(zhí)行內(nèi)存訪問8086地址線20bit可編址范圍0-0xFFFFF寄存器16bit如何使用16bit寄存器表示20bit地址?內(nèi)存訪問(cont.)分段使用一個(gè)寄存器存儲(chǔ)基地址,一個(gè)寄存器存儲(chǔ)偏移地址8086約定的段寄存器表示的基地址Base=segreg*16段寄存器SegmentReg0000內(nèi)存訪問(cont.)SegmentRegistersDS、ES我們可以用來訪存CS、SS分別用作代碼段、堆棧段內(nèi)存訪問(cont.)使用DS訪問內(nèi)存ds:[add]Ds*16+addMovax,ds:[10]ds=B800h將位于B800h*16+10=0xB800A處16bit數(shù)據(jù)讀入ax改變ds值movax,0b800hmovds,axIBMPCVGAVideoMode Themostused VGAvideomode foratextUIistextmode,ormode0.Thisisthemostcommonlyused,asitallowsdirectmemoryaccesstoalinearaddresscontainingeachcharacterandit'sassociatedattributes.Textmode0providesatextinterface80characterswideand25characterslinesperscreen.IBMPCVGA(cont.)VideoMemory Intextmode0,thelineartextbufferislocatedinphysicalat0xB8000.Readingandwritingtoandfromthisaddresswillprovidedirectmanipulationofonscreentext.ToaccessaparticularcharacteronthescreenfromXandYcoordinatesissimpleusingthefollowingformula:
position=(y_position*characters_per_line)+x_position;
Eachcharactertakesuptwobytesofspaceinmemory.Thefirstbyteissplitintotwosegments,theforecolour,andthebackcolour.Thesecondbyteisan8-bitASCIIvalueofthecharactertoprint.IBMPCVGA(cont.)Colours現(xiàn)在我們往屏幕打印文字!Hello,World!assumecs:code,ds:datadatasegment;datagoesheredataendscodesegmentstart:
;codegoeshere
;exit0 movax,4c00h int21hcodeendsendstartassumecs:code,ds:datacodesegmentstart: movax,0b800h movds,ax moval,'H' movds:[160],al movax,4c00h int21hcodeendsendstart程序總體思路將文字ASCII寫入0xB8000h區(qū)域使用哪些寄存器,如何訪存?Hello,World!(cont.)MASM(MicrosoftAssembler)C:\>masmhello.asm; C:\>linkhello.obj; C:\>hello.exe分號(hào)(;)使用默認(rèn)名稱Hello,World!(cont.)改進(jìn)版本將字符串復(fù)制
charmsg[]=“Hello,World”;inti=0;while(msg[i])//匯編語言如何實(shí)現(xiàn)循環(huán)?{ //movmsg[i]tovideobuffer
i++;}Hello,World!(cont.)C語言的幾種條件、分支if(exp)action;while(exp)action;for(exp1;exp2;exp3)action;Hello,World!(cont.)cmp指令
比較兩個(gè)操作數(shù)的值=>flags條件跳轉(zhuǎn)根據(jù)cmp比較結(jié)果進(jìn)行跳轉(zhuǎn)je(jmpequal)ja(jmpabove)jna(jmpnotabove)…
moval,‘H’movbl,0cmpal,bljneL1;;;;;L1:;;;;;Hello,World!(cont.)無條件跳轉(zhuǎn)jmp
moval,‘H’jmpL1movbl,0;;斜體部分不執(zhí)行cmpal,bljneL1
;;;;;L1:;;;;;Hello,World!(cont.)循環(huán)如何使用條件分支實(shí)現(xiàn)循環(huán)???看看編譯器是怎么翻譯的。。。loopmovcx,5L1:subcx,1;;actioncmpcx,0jneL1;;;;;;;;endloopHello,World!(cont.)Reversedversionassumecs:code,ds:datadatasegmentmsg“Hello,World!”,0dataendscodesegmentstart:
;codegoeshere
;exit0 movax,4c00h int21hcodeendsendstart13DF:0Hello…B800:0‘H’‘e’‘l’000B800:0B800:1B800:2B800:3B800:4B800:5Hello,World!(cont.)每次打印字符串都需要自己寫顯存,過于繁瑣像Cruntime提供puts(),我們能否實(shí)現(xiàn)一個(gè)函數(shù)voidputs(intposx,intposy,constchar*)函數(shù)調(diào)用在程序運(yùn)行中,CPU需要知道指令執(zhí)行的位置函數(shù)調(diào)用就是改變指令執(zhí)行位置,實(shí)現(xiàn)跳轉(zhuǎn)函數(shù)調(diào)用(cont.)如何跳轉(zhuǎn)?我們有jmp可以使用寄存器傳遞我們的參數(shù)
;puts(x,y,str) ;action1 jmpputsputs: ;;action函數(shù)調(diào)用(cont.);ax-pos,ds:si-strputs: movdi,ax movax,0B800h moves,axL1: movbyteptrbl,ds:[si] cmpbl,0 jeL2 movbyteptres:[di],bl incsi adddi,2 jmpL1L2: jmpbef
datasegmentmsgdb‘Hello,World’,0dataendscodesegmentstart: movax,data movds,ax movax,160 movsi,0 jmpputsbef:
;exit0 movax,4c00h int21hcodeendsendstart
ANYBugs?函數(shù)調(diào)用(cont.)stackX86體系使用stack提供對函數(shù)調(diào)用支持ss:sp將內(nèi)存用作stack,用來保存參數(shù)、函數(shù)地址等信息ref:USTC_1.pptpushpop函數(shù)調(diào)用(cont.)call當(dāng)call指令發(fā)生時(shí),cpu保存當(dāng)前執(zhí)行指令位置,跳轉(zhuǎn)到指定地點(diǎn)callfunc相當(dāng)于 pushcs:ip jmpfunc函數(shù)調(diào)用(cont.)ret用于函數(shù)返回。CPU從stack取出cs:ip完成返回改進(jìn)Hello,World函數(shù)調(diào)用(cont.)參數(shù)傳遞使用stack進(jìn)行參數(shù)傳遞ref:USTC_1.pptHello,World!(cont.)ReverseusingstackandcallENDofthisSection我們完成了一個(gè)簡單的匯編HelloWorld請大家自行閱讀王爽《匯編語言》吐血推薦!號(hào)外:AT&T匯編AT&T匯編語言和Intel匯編語言AT&T匯編語言中指令的操作數(shù)順序與Intel相反AT&Topcode
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 不可能把熱從低溫物體傳到高溫物體而不引起其它變化
- 2024年綠色減碳環(huán)保知識(shí)答題(試題及答案)
- 八年級(jí)物理上學(xué)期期中檢測卷(1-3章基礎(chǔ))-2024-2025學(xué)年八年級(jí)物理上冊同步分層練習(xí)(湖南專用人教版2024)(含解析)
- 高中語文第14課一名物理學(xué)家的教育歷程課件4新人教版必修
- 2024至2030年中國普通輪胎翻新硫化機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2013-2014年中國集成電路產(chǎn)業(yè)發(fā)展研究年度總報(bào)告
- 2024至2030年中國圓圈D扣狗扣行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國動(dòng)力轉(zhuǎn)向器PTFE密封件數(shù)據(jù)監(jiān)測研究報(bào)告
- 2024年中國花椒精油市場調(diào)查研究報(bào)告
- 2024年中國石烤盤市場調(diào)查研究報(bào)告
- 《義務(wù)教育體育與健康課程標(biāo)準(zhǔn)(2022年版)》解讀
- 部編版三年級(jí)上冊語文第七單元大單元教學(xué)設(shè)計(jì)
- NB-T 10435-2020 電動(dòng)汽車快速更換電池箱鎖止機(jī)構(gòu)通.用技術(shù)要求
- 03SG610-1建筑結(jié)構(gòu)隔震構(gòu)造詳圖
- 高考日語 核心考點(diǎn)總結(jié)
- 遼寧省沈陽市沈北新區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期中地理生物試題
- JTGT D31-05-2017 黃土地區(qū)公路路基設(shè)計(jì)與施工技術(shù)規(guī)范
- 軟木底生產(chǎn)工藝流程
- 人教版八年級(jí)上冊英語期中作文押題訓(xùn)練
- 高邊坡專項(xiàng)施工方案專家已評審
- 氧氣吸入操作評分標(biāo)準(zhǔn)(中心供氧)
評論
0/150
提交評論