版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語言簡(jiǎn)介董千里Email:軟件與微電子學(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對(duì)存放器操作內(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)在我們可以寫一些簡(jiǎ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地址??jī)?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提供對(duì)函數(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è)簡(jiǎn)單的匯編HelloWorld請(qǐng)大家自行閱讀王爽《匯編語言》吐血推薦!號(hào)外:AT&T匯編AT&T匯編語言和Intel匯編語言AT&T匯編語言中指令的操作數(shù)順序與Intel相反AT&T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版二手飛機(jī)維修保養(yǎng)合同示范文本3篇
- 2024首付款支付與房地產(chǎn)開發(fā)項(xiàng)目合作協(xié)議3篇
- 2025年度留置車輛交易傭金借款合同模板4篇
- 2024項(xiàng)目專業(yè)技術(shù)咨詢服務(wù)合同書
- 二零二五年度羽絨服產(chǎn)品線上營(yíng)銷推廣合同規(guī)范3篇
- 2025年電商物流運(yùn)輸長(zhǎng)期服務(wù)合同2篇
- 二零二四年塔吊信號(hào)工施工現(xiàn)場(chǎng)安全巡查聘用合同3篇
- 二零二四年土工布材料研發(fā)與生產(chǎn)采購合同3篇
- 2024版銷售合同模板英文
- 二零二五年度籃球館贊助商合同3篇
- 2024年黑河嫩江市招聘社區(qū)工作者考試真題
- 第22單元(二次函數(shù))-單元測(cè)試卷(2)-2024-2025學(xué)年數(shù)學(xué)人教版九年級(jí)上冊(cè)(含答案解析)
- 藍(lán)色3D風(fēng)工作總結(jié)匯報(bào)模板
- 安全常識(shí)課件
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末聯(lián)考化學(xué)試題(含答案)
- 2024年江蘇省導(dǎo)游服務(wù)技能大賽理論考試題庫(含答案)
- 2024年中考英語閱讀理解表格型解題技巧講解(含練習(xí)題及答案)
- 新版中國(guó)食物成分表
- 浙江省溫州市溫州中學(xué)2025屆數(shù)學(xué)高二上期末綜合測(cè)試試題含解析
- 2024年山東省青島市中考生物試題(含答案)
- 保安公司市場(chǎng)拓展方案-保安拓展工作方案
評(píng)論
0/150
提交評(píng)論