版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)二MASM 匯編器使用學(xué)號(hào):姓名: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再打開(kāi) DOS 命令提示符界面,輸入“masm32binml /c /Zd /coff hello.asm”在沒(méi)錯(cuò)誤情況下,可以連接文件,輸入“masm32binLink /SUBSYSTEM:CONSOLEhello.obj“,在工作目錄中會(huì)產(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) 打開(kāi) DOS 命令提示符界面,在工作子目錄下輸入“ml .asm”命令,產(chǎn)生“.exe”可執(zhí)行文件。注意,過(guò)程中“.obj”文件也會(huì)產(chǎn)生,如果匯編程序中.exe”文件就不會(huì)產(chǎn)生。c) 使用“debut .exe”執(zhí)行并 debug 程序。3. 程序模板:DATA_HE
5、REDATA_ASEGMENTDW 1 DUP(0)DW 1 DUP(0);在數(shù)據(jù)段中預(yù)留位置;預(yù)留另一個(gè)位置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;斷點(diǎn)CODE_HEREEND STARTENDS4. 解析 Intel x86 指令:a) 將模板程序復(fù)制為 part_a.asmb) 將表 1 中的代碼復(fù)制到程序中c) 生成“part_a.exe”并 debug 這個(gè)程序d) 使用“-u”分解程序e) 填表解釋每條指令f) 回答問(wèn)題: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使用匯編語(yǔ)言程序解方程是一件不容易的事情。一般使用計(jì)算機(jī)來(lái)求解,都是編寫(xiě)匯編語(yǔ)言程序計(jì)算并查表求解復(fù)雜函數(shù)。下面表 2 是使用匯編語(yǔ)言求解 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 計(jì)算 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è)置計(jì)數(shù)器MOV CX, DATA_CMOV SI, OFFSET DATA_XMOV DI, _; SI:指向第一個(gè)x值的指針; DI:指向第一個(gè)y值的指針e; BP:指向第一個(gè)結(jié)果值的指針MOV BP, _;LOOP1: MOV AX, _SAL AX, _; x的值; x * 2,表中每項(xiàng)占兩字節(jié); BX:指向表的指針;在表中發(fā)現(xiàn)項(xiàng)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)項(xiàng)ADD DX, BX; f(x) + f(y) - DXMOV _, DXADD SI, 2HADD DI, _ADD BP, _DEC _;存儲(chǔ)結(jié)果,需要覆蓋DS的前綴;修改指向x的指針;修改指向y的指針;修改指向結(jié)果的指針;計(jì)數(shù)器減1_ LOOP1INT 3H;為完成跳回LOOP1標(biāo)簽位置;中斷點(diǎn)MAIN ENDPEND MAIN其中,現(xiàn)行詞 ORG 用來(lái)標(biāo)示地址偏移量的起始地址。在 MASM 匯編器中,由 ORG 定義的數(shù)據(jù)段內(nèi)地址偏移量,實(shí)際是字節(jié)數(shù)加上一個(gè)固定的數(shù)值。
11、6把程序“part_c.asm”中的缺失部分補(bǔ)上,這個(gè)程序用來(lái)計(jì)算兩個(gè)32-bit無(wú)符號(hào)數(shù)之間的乘法。使用兩個(gè) 16-bit 無(wú)符號(hào)數(shù)之間乘法指令 MUL 計(jì)算:A*B C (算法示意圖如圖 1 圖 1對(duì)程序進(jìn)行匯編,并運(yùn)行程序。將結(jié)果填入表 4。將可運(yùn)行程序附在報(bào)告后面。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編號(hào)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 方案公司資料五篇
- 文藝部述職報(bào)告
- 用戶裝修技術(shù)資料
- 2024年度醫(yī)療設(shè)備購(gòu)置擔(dān)保履約保證協(xié)議3篇
- c 操作系統(tǒng)課程設(shè)計(jì)
- 招投標(biāo) 課程設(shè)計(jì)
- 2025年山東淄博職業(yè)學(xué)院招聘高層次緊缺人才29人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)寧市金鄉(xiāng)縣事業(yè)單位共招考295人管理單位筆試遴選500模擬題附帶答案詳解
- 快把我哥帶走觀后感范文
- 2025年山東濟(jì)南歷城區(qū)衛(wèi)生健康局所屬事業(yè)單位招聘50人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 福建省泉州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- PE 電熔焊接作業(yè)指導(dǎo)書(shū)
- 計(jì)算書(shū)-過(guò)濾器(纖維)
- 《有機(jī)波譜分析》期末考試試卷及參考答案
- 地源熱泵維修規(guī)程
- 雙塊式無(wú)砟軌道道床板裂紋成因分析應(yīng)對(duì)措施
- FZ∕T 62044-2021 抗菌清潔巾
- 凈水廠課程設(shè)計(jì)
- 全級(jí)老年大學(xué)星級(jí)學(xué)校達(dá)標(biāo)評(píng)價(jià)細(xì)則
- 模具維護(hù)保養(yǎng)PPT課件
- 《新媒體文案寫(xiě)作》試卷4
評(píng)論
0/150
提交評(píng)論