重慶大學匯編語言程序設計實驗二_第1頁
重慶大學匯編語言程序設計實驗二_第2頁
重慶大學匯編語言程序設計實驗二_第3頁
重慶大學匯編語言程序設計實驗二_第4頁
重慶大學匯編語言程序設計實驗二_第5頁
已閱讀5頁,還剩17頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、重 慶 大 學學 生 實 驗 報 告實驗課程名稱 匯編語言程序設計 開課實驗室 ds1501 學 院 軟件學院 年級 軟件工程 專業 01 班 學 生 姓 名 學 號 開 課 時 間 2014 至 2015 學年第 1 學期總 成 績教師簽名軟件工程學院 制匯編語言程序設計實驗報告(格式樣本) 開課實驗室: ds1501機房 2014 年 9 月 日學院軟件學院年級、專業、班姓名成績課程名稱匯編語言程序設計實驗項目名 稱實驗二:初級程序的編寫與調試實驗指導教師教師評語教師簽名:2014年 月 日一【實驗目的】1進一步熟悉debug命令;2掌握數據在內存中的存放方式和內存操作數的幾種尋址方式,段

2、寄存器和物理地址計算; 3熟悉數據傳送指令、算術運算指令、邏輯指令、數據串傳送程序和數據串傳送指令movs、stos及重復前輟rep;4掌握簡單的匯編語言程序編寫與調試。二【實驗環境】pc微機;dos操作系統或 windows 操作系統;masm.exe,link.exe,debug.com或宏匯編集成環境。三【實驗要求】1仔細閱讀有關debug命令的內容,對有關命令,要求事先準備好使用的例子;2閱讀數據傳送指令、算術運算指令、邏輯指令、數據串傳送程序和數據串傳送指令movs、stos及重復前輟rep的內容;3用debug的有關命令調試本實驗中的求累加和程序、多字節加法程序、數據串搬家程序段。

3、四【預備知識】debug的使用(1)什么是debug?debug是dos、windows都提供的實模式(8086方式)程序的調試工具。使用它,可以查看cpu各種寄存器中的內容、內存的情況和在機器碼級跟蹤程序的運行。(2)我們用到的debug功能l 用debug的r命令查看、改變cpu寄存器的內容;l 用debug的d命令查看內存中的內容;l 用debug的e命令改寫內存中的內容;l 用debug的u命令將內存中的機器指令翻譯成匯編指令;l 用debug的t命令執行一條機器指令;l 用debug的a命令以匯編指令的格式在內存中寫入一條機器指令。五 【實驗內容】1 內存操作數及各種尋址方式使用;2

4、 求累加和程序;3 多字節加法程序;4 數據串搬家程序;5 段寄存器概念及字符串傳送指令練習。六【實驗步驟】 1內存操作數及各種尋址方式使用movax,1234 mov1000,axmovbx,1002movbyte ptrbx,20movdl,39incbxmovbx,dldecdlmovsi,3movbx+si,dlmovbx+si+1,dlmovword ptrbx+si+2,2846步驟: (1) 用a命令鍵入上述程序,并用t命令逐條運行。(2) 每運行一條有關內存操作數的指令,要用d命令檢查并記錄有關內存單元的內容并注明是什么尋址方式。注意d命令顯示結果中右邊的ascii字符及雙字節

5、數存放法。將1234放入ax寄存器中,后將ax中內容按字節高低放入內存中:將1002放入bx寄存器中,并將20放入8位2求累加和程序:程序:movbx,1000movcx,10subax,axlop: addal,bxadc ah,0incbxj:looplopin t3步驟:(1)用a命令將程序鍵入到100h開始的內存中,在鍵入時記下標號lop和j的實際地址,在鍵入loop指令時lop用實際地址值代替;(2)用命令n aa 將此程序命名為文件aa(文件名可任取);(3)用r命令將bx:cx改為程序長度值(即最后一條指令后面的地址減去開始地址;(4)用命令w 100將此程序存到aa命名的磁盤文

6、件中;(5)用命令q退出debug;(6)用命令debug aa再次調入debug和文件aa,可用u命令檢查調入程序;(7)用e命令在內存地址1000h處鍵入16個數字;(8)用命令g=100 j(j用實際地址代替),使程序運行并停在斷點j上,檢查ax,bx的值是否符合你的預計值;(9)用t命令運行一步,觀察程序方向(ip值)和cx值是否與你的估計一樣,若不一樣,檢查程序是否有錯;(10)重復g、j與t,再檢查ax是否正確;(11)用g命令使程序運行到結束,檢查ax值是否正確。3多字節加法程序程序:movdi,1000movcx,8movsi,2000clclop: moval,siadcdi

7、,alincsiincdilooplopint20步驟:(1) 用a命令鍵入此程序。(2) 用e命令在1000h開始處鍵入一個8字節被加數,在2000h開始處鍵入一個8字節加數,均為低字節在前面。4數據串搬家程序(1)用a命令鍵入下列程序:movsi,1000movdi,1500movcx,0fhlop:moval,simovdi,alincsiincdilooplopint20(2)用a命令db偽指令在1000h鍵入下列字符串:ibm_pc computer'(3)用g命令運行此程序,并用d命令檢查目的地址處的字符與源串是否一致。5段寄存器概念及字符串傳送指令練習(1) 用a命令鍵入

8、下列程序:movsi,0movdi,0movax,1000movds,axmovax,1500moves,axmovcx,0fcldrepmovsbint20(2) 用a命令db偽指令在1000:0000處鍵入字符串'ibm_pc computer',并用d命檢查(3) 用d命令檢查0f00:1000處內容,看是否一樣。為什么?(4) 用g命令運行此程序,檢查目的地址1500:0000處內容。并記下ds與es值。此時的ds和es的值分別為:(5) 修改此程序,使es與ds為同一值,以減少一條指令,而源物理地址和目的物理地址(是多少?)仍和原來一樣。6自編程序用16位減法指令編一

9、個32位(4字節)數減法程序,兩個源數及結果存放地址同多字節加法程序,調試并做記錄。4字節減法程序源代碼1397:0100 mov si,10001397:0103 mov cx,41397:0106 mov di,20001397:0109 clc1397:010a mov al,si1397:010c sbb di,al1397:010e inc si1397:010f inc di1397:0110 loop 010a1397:0112 int 201397:0114調試和運行結果運行正確七【實驗過程原始記錄(數據、圖表、計算等)】1內存操作數及各種尋址方式使用 (1) 用a命令鍵入上述

10、程序,并用t命令逐條運行。 (2)將1234放入ax寄存器中,后將ax中內容按字節高低放入內存中:mov ax,1234(目的操作數:寄存器尋址。 源操作數:立即數尋址)mov 1000,ax (目的操作數:直接尋址。 源操作數:寄存器尋址)(2).將1002放入bx寄存器中,并將20放入8位: mov bx,1002 (目的操作數:寄存器尋址。 源操作數:立即數尋址) mov byte ptrbx,20(目的操作數:寄存器尋址。 源操作數:立即數尋址)(3).將39放入dl寄存器中,并將bx中的數值+1:mov dl,39(目的操作數:寄存器尋址。 源操作數:立即數尋址)inc bx (目的

11、操作數:寄存器尋址。)(4).將dl寄存器中的內容放入bx寄存器中的內存地址中: mov bx,dl (目的操作數:寄存器間接尋址。 源操作數:寄存器尋址)(5).將dl寄存器中數值1: mov si,3 (目的操作數:寄存器尋址。 源操作數:立即數尋址)(6).將3放入寄存器si中,并將dl中內容放入bx中數值與si中數值相加所代表的內存地址中: mov bx+si,dl (目的操作數:相對基址變址尋址。 源操作數:寄存器尋址)(7).將dl中內容放入bx中數值與si中數值相加再+1所代表的內存地址中,并將2846按位的高低存放到bx中數值與si中數值相加再加2所代表的內存地址中,最終內存中

12、內容如圖: mov bx+si+1,dl (目的操作數:相對基址變址尋址。 源操作數:寄存器尋址)mov bx+si+2,2846 (目的操作數:相對基址變址尋址。 源操作數:立即數尋址)2求累加和程序:(1). 用a命令將程序鍵入到100h開始的內存中(在鍵入時記下標號lop和j的實際地址,在鍵入loop指令時lop用實際地址值代替):(2).用命令n aa 將此程序命名為文件aa;用r命令將bx:cx改為程序長度值;用命令w 100將此程序存到aa命名的磁盤文件中;用命令q退出debug:(3). 用命令debug aa再次調入debug和文件aa,可用u命令檢查調入程序:(4).用e命令

13、在內存地址1000h處鍵入16個數字;(5).用命令g=100 0110,使程序運行并停在斷點j上,檢查ax,bx的值。用g命令使程序運行到結束,檢查ax值:3多字節加法程序(1). 用a命令鍵入此程序:(2). 用e命令在1000h開始處鍵入一個8字節被加數,在2000h開始處鍵入一個8字節加數,均為低字節在前面:4數據串搬家程序(1). 用a命令鍵入程序:(2).用a命令在內存地址為1000h處用db偽指令鍵入ibm_pc computer',并用d指令查看目的地址處的字符與源串(一致):(3). 用g命令運行此程序,并用d命令檢查目的地址處的字符與源串一致:5段寄存器概念及字符串

14、傳送指令練習(1). 用a命令鍵入下列程序:(2). 用a命令db偽指令在1000:0000處鍵入字符串'ibm_pc computer',并用d命檢查(3) 用d命令檢查0f00:1000處內容一致: 因為使用字符傳送指令rep movsb將源地址的15個字符傳遞到了目的地址處。(4).用g命令運行此程序,檢查目的地址1500:0000處內容此時 ds=10000 es=1500(5).刪去原程序中movax,1500,使es與ds為同一值,而源物理地址為1000:0000目的物理地址為0f00:1000。6.自編程序(1).用a命令鍵入程序:(2).用d命令輸入數字,并用g

15、執行程序,最終查看結果與預期相符:八【實驗結果及分析】1.用a命令鍵入程序,并用t命令逐條運行。所有將要放入內存地址的數值按位的高低存放在內存地址中。最終所有內容成功存放在13d0:1000中。2(1)用a命令將程序鍵入到內存中,由于運用了loop循環,須在在鍵入時記下標號lop和j的實際地址,在鍵入loop指令時lop用實際地址值代替。(2)運用命令n、w可為該程序命名并存儲到磁盤文件中。 (3)運用g=100 實際地址 的命令可使程序直接執行到循環結束,檢查ax與預期值相同。 可能由于使用的是dosbox的原因,直接鍵入g=100 回車會出現程序無法響應的情況,只有鍵入g=100 循環結束

16、所在行的地址,才能正常運行。3. 用a命令鍵入此程序,將地址2000h中的內容按位加到地址為1000h的內容中。最終程序執行完成后,可用d查看1000h處的最終相加結果。4. 用a命令鍵入程序后再用a命令在內存地址為1000h處用db偽指令鍵入ibm_pc computer',并用d指令查看。可知目的地址處的字符與源串一致。5. 用a命令db偽指令在1000:0000處鍵入字符串'ibm_pc computer',并用d命檢查0f00:1000處與1000:000處內容一致(因為使用字符傳送指令rep movsb將源地址的15個字符傳遞到了目的地址處)。之后用g命令運行此程序,檢查目的地址1500:0000處內容與1000:0000中內容一致,傳送成功。最終,刪去原程序中movax,1500,可以使es與ds為同一值。 6.用16位減法指令編寫的32位數減法程序(兩個源數及結果存放地址同多字節加法程序),調試運行結果與預期相符,可以達到目的。九【思考題】1movbyte ptrbx,20 movword ptrbx+si+2,2846上述指令中byte ptr及word ptr偽操作不加行不行?試一試。 答:不行。mov byte ptr 是8位數傳

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論