![匯編語言實驗2_第1頁](http://file4.renrendoc.com/view/e82e202030b21d9f06368c34d6d4d64f/e82e202030b21d9f06368c34d6d4d64f1.gif)
![匯編語言實驗2_第2頁](http://file4.renrendoc.com/view/e82e202030b21d9f06368c34d6d4d64f/e82e202030b21d9f06368c34d6d4d64f2.gif)
![匯編語言實驗2_第3頁](http://file4.renrendoc.com/view/e82e202030b21d9f06368c34d6d4d64f/e82e202030b21d9f06368c34d6d4d64f3.gif)
![匯編語言實驗2_第4頁](http://file4.renrendoc.com/view/e82e202030b21d9f06368c34d6d4d64f/e82e202030b21d9f06368c34d6d4d64f4.gif)
![匯編語言實驗2_第5頁](http://file4.renrendoc.com/view/e82e202030b21d9f06368c34d6d4d64f/e82e202030b21d9f06368c34d6d4d64f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語言程序設(shè)計實驗二MASM 匯編器使用學(xué)號:姓名:1. 使用 MASM 為 DOS 和 Windows 編程:a) DOS 中運(yùn)行的程序:先輸入程序,.386.model flat, stdcalloption casemap :noneinclude masm32includewindows.incinclude masm32includekernel32.incinclude masm32includemasm32.incincludelib masm32libkernel32.libincludelib masm32libmasm32.lib.dataHelloWorld db He
2、llo World!, 0.codestart:invoke StdOut, addr HelloWorldinvoke ExitProcess, 0end start再打開 DOS 命令提示符界面,輸入“masm32binml /c /Zd /coff hello.asm”在沒錯誤情況下,可以連接文件,輸入“masm32binLink /SUBSYSTEM:CONSOLEhello.obj“,在工作目錄中會產(chǎn)生可運(yùn)行文件Hello.exe,運(yùn)行并記錄運(yùn)行結(jié)果。b) Windows中運(yùn)行的程序:先修改程序,.386.model flat, stdcalloption casemap :none
3、include masm32includewindows.incinclude masm32includekernel32.incinclude masm32includeuser32.incincludelib masm32libkernel32.libincludelib masm32libuser32.lib.dataHelloWorld db Hello World!, 0.codestart:invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OKinvoke ExitProcess, 0end start用命令
4、“masm32binml/c/Zd/coffhellow.asm”編譯程序,再用命令“masm32binLink/SUBSYSTEM:WINDOWShellow.obj”連接程序,運(yùn)行并記錄運(yùn)行結(jié)果。2. 使用 Debug 調(diào)試編輯執(zhí)行匯編代碼的步驟:a) 使用文本編輯器(如:Notepad存為以“.asm”為后綴的文件中。b) 打開 DOS 命令提示符界面,在工作子目錄下輸入“ml .asm”命令,產(chǎn)生“.exe”可執(zhí)行文件。注意,過程中“.obj”文件也會產(chǎn)生,如果匯編程序中.exe”文件就不會產(chǎn)生。c) 使用“debut .exe”執(zhí)行并 debug 程序。3. 程序模板:DATA_HE
5、REDATA_ASEGMENTDW 1 DUP(0)DW 1 DUP(0);在數(shù)據(jù)段中預(yù)留位置;預(yù)留另一個位置DATA_B;預(yù)留位置的初始值都是 0HDATA_HEREENDSSTACK_HERESEGMENT STACK100 DUP(0)DW;內(nèi)存中堆棧位置;棧頂位置命名TOP_STACKSTACK_HERELABELENDSWORDCODE_HERESEGMENTASSUMECS:CODE_HERE,DS:DATA_HERE,SS:STACK_HERESTART:MOV AX, DATA_HEREMOV DS, AX; DS寄存器初始化MOV AX, STACK_HEREMOV SS,
6、AX; SS寄存器初始化;初始化堆棧指針MOV SP, OFFSET TOP_STACK;在此順序輸入程序指令;INT 3H;斷點CODE_HEREEND STARTENDS4. 解析 Intel x86 指令:a) 將模板程序復(fù)制為 part_a.asmb) 將表 1 中的代碼復(fù)制到程序中c) 生成“part_a.exe”并 debug 這個程序d) 使用“-u”分解程序e) 填表解釋每條指令f) 回答問題:i.ii.將表格 1 空白處填滿一些指令不包括 ModR/M 字節(jié),指出這些指令iii.解釋段覆蓋前綴字節(jié),解釋為什么指令 MOV DS:DI+0203H中,BX 不需要前綴字節(jié),而指令
7、 MOV DS:BP+2H中,DX 需要前綴字節(jié)?表格 1位移量 字節(jié)數(shù)ADC BX,ES:SITEST AX,0305HMOV DS:BP+2h,DXMOV DS:DI+0203H,BXAND AL,CH(JMP 跳向程序最后一條指令) f x x5使用匯編語言程序解方程是一件不容易的事情。一般使用計算機(jī)來求解,都是編寫匯編語言程序計算并查表求解復(fù)雜函數(shù)。下面表 2 是使用匯編語言求解 f x x的求解表的部分內(nèi)容。表格 2f(x) x 2 (十進(jìn)制數(shù))f(x) x 2 (十六進(jìn)制數(shù))010000H0400H1024234561448177420482290250805A8H06EEH080
8、0H08F2H09CCH將表 3 的空白處填滿,再將程序 part_b_s.asm 缺失的部分補(bǔ)上,使程序可以按表 3 計算 f(x)+f(y)。表格 312643553; Filename: part_b_s.asm.MODEL SMALL.STACK 64.DATAORG 0006HDATA_T DW 0,1024,1448,1774,2048,2290,2508ORG 0026H;查表DATA_X DW 1,2,6,4ORG 0046H; x的值DATA_Y DW 3,5,5,3ORG 0066H; y的值;結(jié)果DATA_R DW 4 DUP(0)ORG 0086HDATA_C DW 4
9、 ; number of results.CODEMAINPROC FARMOV AX, DATAMOV DS, AX;載入數(shù)據(jù)段地址;設(shè)置計數(shù)器MOV CX, DATA_CMOV SI, OFFSET DATA_XMOV DI, _; SI:指向第一個x值的指針; DI:指向第一個y值的指針e; BP:指向第一個結(jié)果值的指針MOV BP, _;LOOP1: MOV AX, _SAL AX, _; x的值; x * 2,表中每項占兩字節(jié); BX:指向表的指針;在表中發(fā)現(xiàn)項MOV BX, _ADD BX, AXMOV DX, _MOV AX, _SAL AX, _; f(x) - DX; y -
10、 AX; y * 2MOV BX, OFFSET DATA_TADD BX, AX; BX:指向表的指針;在表中發(fā)現(xiàn)項ADD DX, BX; f(x) + f(y) - DXMOV _, DXADD SI, 2HADD DI, _ADD BP, _DEC _;存儲結(jié)果,需要覆蓋DS的前綴;修改指向x的指針;修改指向y的指針;修改指向結(jié)果的指針;計數(shù)器減1_ LOOP1INT 3H;為完成跳回LOOP1標(biāo)簽位置;中斷點MAIN ENDPEND MAIN其中,現(xiàn)行詞 ORG 用來標(biāo)示地址偏移量的起始地址。在 MASM 匯編器中,由 ORG 定義的數(shù)據(jù)段內(nèi)地址偏移量,實際是字節(jié)數(shù)加上一個固定的數(shù)值。
11、6把程序“part_c.asm”中的缺失部分補(bǔ)上,這個程序用來計算兩個32-bit無符號數(shù)之間的乘法。使用兩個 16-bit 無符號數(shù)之間乘法指令 MUL 計算:A*B C (算法示意圖如圖 1 圖 1對程序進(jìn)行匯編,并運(yùn)行程序。將結(jié)果填入表 4。將可運(yùn)行程序附在報告后面。MUL 指令句法:MUL r/mem16其中:r/mem16 操作數(shù)是 16-bit 寄存器或內(nèi)存位置。結(jié)果 DX:AX=AX*r/mem16DX 存放結(jié)果的高 16-bit,AX 存放結(jié)果的低 16-bit)表格 4編號B1234331034; Filename: part_c_t.asm.MODEL SMALL.STAC
12、K 100.DATAMUL_CAND_LMUL_CAND_HMUL_LIER_LMUL_LIER_HPRODUCT_0PRODUCT_1PRODUCT_2PRODUCT_3DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0)DW 1 DUP(0).CODEMAINPROC FARMOV AX, DATAMOV DS, AXMOV AX, MUL_CAND_LMUL _;載入數(shù)據(jù)段地址; A_L - AX; A_L * B_L - DX, AX; PROD_0 - CX; PROD_1 - BP
13、; A_H - AXMOV CX, AXMOV BP, DXMOV AX, _MUL MUL_LIER_HMOV DI, AXMOV SI, DXMOV AX, MUL_CAND_HMUL _; A_H * B_H - Dx, AX; PROD_2 - DI; PROD_3 - SI; A_H - AX; A_H * B_L - DX, AX; Update PROD_1; Update PROD_2ADD BP, _ DI, DXADC SI, _MOV AX, MUL_CAND_LMUL _; Adjust PROD_3 if there is a carry-in; A_L - AX; A_L * B_H - DX, A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借錢補(bǔ)充合同范本寫
- 倉儲送貨批發(fā)合同范例
- 一次合同范本
- 關(guān)于轉(zhuǎn)讓車輛合同范本
- 勞務(wù)派遣保潔合同范本
- 產(chǎn)權(quán)經(jīng)紀(jì)合同范本
- 出租兒童書架合同范例
- 2025年度化工產(chǎn)品綠色包裝設(shè)計與采購合同
- 修車搬運(yùn)服務(wù)合同范本
- 2025年精煉銅線項目投資可行性研究分析報告
- 吸引器教學(xué)講解課件
- 醫(yī)學(xué)心理學(xué)人衛(wèi)八版66張課件
- 物業(yè)服務(wù)五級三類收費重點標(biāo)準(zhǔn)
- 工商注冊登記信息表
- 仿古建筑施工常見質(zhì)量通病及防治措施
- 漢代儒學(xué)大師董仲舒思想課件
- 普通沖床設(shè)備日常點檢標(biāo)準(zhǔn)作業(yè)指導(dǎo)書
- 科技文獻(xiàn)檢索與利用PPT通用課件
- 《紅樓夢講稿》PPT課件
- DB33∕T 628.1-2021 交通建設(shè)工程工程量清單計價規(guī)范 第1部分:公路工程
- 吉祥喜金剛現(xiàn)證中品事業(yè)六支妙嚴(yán)(節(jié)錄)
評論
0/150
提交評論