




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
廣州大學學生實驗報告開課學院及實驗室:教育學院 電子信息樓503 2012年 11月 05 日學院教育學院年級、專業(yè)、班級教育技術學姓名陳慶華學號1008200029實驗課程名稱計算機組成原理成績實驗項目名稱實驗二 匯編語言程序設計實驗 指導老師孔維宏實驗二 匯編語言程序設計實驗一、匯編常用軟件的使用一、實驗目的1、熟悉要用到一些DOS命令(CD,DIR,COPY,TYPE,EXIT,RENAME等);2、熟悉匯編語言的上機過程;3、熟悉偽指令: SEGMENT,ENDS,ASSUME,END,OFFSET;4、常用DEBUG命令的使用5、了解字符、字符串輸出的方法和返回DOS系統(tǒng)的方法。二、實驗器材計算機,匯編相關程序,WAVE6000實驗仿真器三、實驗原理 1、運行匯編語言源程序必備的條件:當前盤上必須包括如下文件: MASM 匯編程序文件 LINK 連接程序文件 EDIT 全屏幕文本編輯程序文件(或其他文本編輯文件) DEBUG 調試工具文件 2、匯編語言上機的四個步驟: (1)編輯源程序:建立或編輯一個擴展名為ASM源程序文件; (2)匯編程序:源程序經過匯編后可產生機器碼的目標文件,擴展名為OBJ。如果在編程序中有任何語法錯誤,匯編程序將會給出錯誤信息。經過匯編程序匯編后,實際可產生三個文件,即:目標文件OBJ,列表文件LST和交叉文件CRF。 3、連接程序:匯編后產生的目標文件必須經過連接,形成可執(zhí)行文件EXE,然后就可以在DOS狀態(tài)下執(zhí)行程序。 4、調試程序:DEBUG是調試匯編語言程序的工具,它具有跟蹤程序的運行、顯示修改內存與寄存器的內容等功能,因此在調試中可以尋找錯誤和修改錯誤,可以對小段程序進行匯編,是調試各種應用程序的極其方便的工具。經過DEBUG調試后的程序,必須重新進行編輯、匯編和連接后才可執(zhí)行。 5、DEBUG的主要特點: (1)能夠在最小環(huán)境下運行匯編程序; (2)提供簡單的修改手段; (3)提供用戶和計算機內部聯(lián)系的窗口;四、實驗步驟(一)常用軟件的使用 1、在系統(tǒng)盤下建立一個文件夾MASM,將MASM、EDIT、LINK和DEBUG四個文件復制到此目錄下; 2、點擊“開始”菜單“程序”-“附件”-“DOS命令提示符”,進入到DOS狀態(tài); 3、利用CD命令進入到MASM文件夾中 CD CD MASM 4、利用DIR命令查看是否有這些文件,如果無則要重新復制 5、進入EDIT程序,輸入下列內容:data segment note db hello,world!,$data endscode segment assume cs:code,ds:databegin:mov ax,data mov ds,ax mov dx,offset note mov ah,09h int 21h mov ah,4ch int 21hcode ends end begin保存文件名為你的學號_01.ASM6、匯編程序:masm 匯編源程序文件名7、連接程序:LINK 目標文件名8、執(zhí)行可執(zhí)行文件,查看結果9、按如上方法(5-8步驟),輸入下列內容:code segment assume cs:codestart:mov al,32h mov dl,37h add dl,al sub dl,30h mov ah,2 int 21h mov ah,4ch int 21hcode ends end start保存文件名為你的學號_02.ASM10、用EXIT退出DOS系統(tǒng) (二)DEBUG常用命令的使用1、通過DEBUG編寫和運行匯編程序(1)進入到DEBUG狀態(tài):進入到MASM目錄中,輸入DEBUG執(zhí)行DEBUG調試程序。進入DEBUG狀態(tài)的標志是:屏幕顯示“”(2)輸入程序并匯編:用DEBUG的A命令送入程序。在DEBUG狀態(tài),輸入A,然后回車。當輸入A命令時會自動產生程序所送內容單元的段地址和偏移地址,通過偏移地址可以看到每條指令站內存單元的字節(jié)數。當程序段送完時,只鍵入回車鍵,就退出匯編狀態(tài)(A狀態(tài))回到DEBUG狀態(tài)“”。其中輸入數據為16進制,DEBUG狀態(tài)下程序中的數據都按16進制來處理,不需要鍵入H來表示。輸入以下程序:MOV AL,32MOV DL ,37ADD DL ,ALSUB DL,30MOV AH,2INT 21INT 20(3)執(zhí)行程序:用DEBUG的G命令執(zhí)行剛剛匯編的程序。在DEBUG狀態(tài)下直接輸入G,回車,查看結果。(4)反匯編:可以用反匯編U命令將鍵入的程序調出,并可以得到每條匯編指令的機器碼。在DEBUG狀態(tài)輸入:U 100 10D(5)退出DEBUG返回DOS狀態(tài):用Q命令退出。2、DEBUG常用命令的使用(1)匯編命令A 格式:A 段寄存器名:偏移地址 A 段寄存器地址:偏移地址 A 偏移地址 A 功能:該命令允許鍵入匯編語言語句,并能把它們匯編成機器代碼,相繼地存放在從指定地址開始的存儲區(qū)中。其中最后一個格式的偏移地址為0100H。(2)檢查和修改寄存器命令R 顯示CPU內所有寄存器內容和標志位狀態(tài),其格式為: -R 例如: -r AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC 18E4:0100 C70604023801 MOV WORD PTR0204,0138 DS:0204=0000 其中標志位狀態(tài)的含義可見下表:標 志 名標志為1標志為0OFDFIFSFZFAFPFCF溢出(是/否) 方向(減量/增量)中斷(允許/關閉)符號(負/正)零(是/否)輔助進位(是/否)奇偶(偶/奇)進位(是/否OV DNEINGZRACPECYNV UPDIPLNZNAPONC 顯示和修改某個寄存器內容,其格式為: -R register name 例如,鍵入 -r ax 系統(tǒng)將響應如下: AX F1F4 : 即AX寄存器的當前內容為F1F4,如不修改則按Enter鍵,否則,鍵入欲修改的內容如: -r bx BX 0369 :059F 則把BX寄存器的當前內容修改為059F。 顯示和修改標志位狀態(tài),命令格式為: -RF 系統(tǒng)將響應,如: OV DN EI NG ZR AC PE CY - 此時如不修改其內容可按Enter鍵,否則,建入欲修改的內容,如: OV DN EI NG ZR AC PE CY PO NZ DI NV即可,鍵入的順序是任意的。(3)追蹤與顯示命令T T =address 從指定地址起執(zhí)行一條指令后停下來,顯示所有寄存器內空及標志位的值。如未指定則從當前的CS:IP開始執(zhí)行。(4)反匯編命令U從指定地址開始,反匯編32個字節(jié),其格式為: U range 例如: -u 100 如果地址被省略則從上一個U命令的最后一條指令的下一個單元開始顯示32個字節(jié)。 (5)運行命令G -G =address1address2address3 . 其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。后面的地址均為斷點地址,當指令執(zhí)行到斷點時,就停止執(zhí)行并顯示當前所有寄存器及標志位的內容,和下一條將要執(zhí)行的指令。(6)結束命令Q-Q 它退出DEBUG,返回DOS。3、利用DEBUG調試EXE文件(1)通過EDIT編輯源程序;(2)用MASM程序匯編源程序;(3)用連接程序形成可執(zhí)行文件(4)用DEBUG調試可執(zhí)行文件l 用DEBUG調入可執(zhí)行文件;l 用U命令查看程序是否進入內存;l 用R、T命令跟蹤程序的執(zhí)行的過程并察看CPU內部寄存器的內容。(5)DOS狀態(tài)下查看程序清單和執(zhí)行結果五、實驗數據 兩個源程序。程序一:data segment note db hello,world!,$data endscode segment assume cs:code,ds:databegin:mov ax,data mov ds,ax mov dx,offset note mov ah,09h int 21h mov ah,4ch int 21hcode ends end begin程序二:code segment assume cs:codestart:mov al,32h mov dl,37h add dl,al sub dl,30h mov ah,2 int 21h mov ah,4ch int 21hcode ends end start六、實驗結果分析1、 指出寄存器發(fā)生的變化和寫出結果。寄存器發(fā)生的變化:AX=0032 IP從0100變?yōu)?102 DX=0037 IP從0102變?yōu)?104 DX=0069 IP從0104變?yōu)?106 DX=0039 IP從0106變?yōu)?109 DX=0232 IP從0109變?yōu)?10B2、 寫出實驗結果。試驗結果:程序一:hello,world! 程序二:9二、字符及字符串的輸入輸出程序的編寫與調試一、實驗目的1、通過實驗掌握基本的尋址方式;2、理解指令的功能,熟悉DEBUG的調試命令;3、掌握字符輸入輸出的方法;4、掌握字符串輸入輸出的方法;5、進一步了解DOS系統(tǒng)功能調用。二、實驗器材計算機,匯編相關程序,WAVE6000實驗仿真器三、實驗原理1、單字符輸入(1號調用)格式:MOV AH, 01H INT21H功能:從鍵盤輸入字符的ASCII碼送入寄存器AL中,并送顯示器顯示2、單字符顯示(2號調用)格式:MOV DL,待顯示字符的ASCII碼 MOV AH, 02H INT 21H功能:將DL寄存器中的字符送顯示器顯示3、結束調用(4C號調用)格式:MOV AH,4CH INT21H功能:終止當前程序并返回調用程序4、INT 20H,在DEBUG下正常結束程序5、字符串的輸入(10號功能調用):其作用是從鍵盤輸入字符串。在調用前首先要建立一個輸入緩沖區(qū),規(guī)定緩沖區(qū)的第一個字節(jié)用來存放輸入字符串的最大長度,可以由用戶根據需要設定,第二個字節(jié)用來存放實際輸入的字符數,在DOS返回時自動賦值,從第三個字節(jié)開始存放實際輸入的字符串,串的輸入以回車作為結束符。 格式:LEADX,緩沖區(qū)首偏移地址 MOVAH,0ah INT21H功能:從鍵盤上輸入一字符串到用戶定義的輸入緩沖區(qū)中,并送顯示器顯示6、字符串顯示(9號功能調用)格式:LEADX,待顯示字符串首偏移地址 MOVAH,09H INT21H功能:將當前數據區(qū)中以結尾的字符串送顯示器顯示四、實驗步驟1、假設DS=2000H,ES=2100H,SS=1500H,請通過實驗指出下列指令的尋址方式:MOV AX,1234 MOV BX,1002 MOV DL,39 ADD AX,BXINC BX DEC DL MOV SI,3 Int 20注意:本步驟實驗只要求在DEBUG狀態(tài)下進行。(1)、首先進入DEBUG狀態(tài),用R命令修改各寄存器的內容,以滿足題目的要求;(2)、用A命令寫入要實驗的8條語句;(3)、用T命令單步執(zhí)行,觀察并記錄運行的結果;2、編寫匯編語言程序,要求將鍵盤輸入的一個大寫字母用小寫字母顯示出來。要求用兩種方法調試出結果,即DEBUG方法和編輯、匯編和連接的方法。參考程序如下:code segment assume cs:codestart:mov ah,01h int 21h add al,20h mov dl,al mov ah,02h int 21h mov ah,4ch int 21hcode ends end start3、編寫匯編語言程序,要求先提示用戶輸入,然后將用戶的輸入直接顯示出來。data segment / DATA段定義開始 msg db what is your name:$ /給變量msg定義存儲單元,db表示定義字節(jié)數據 buf db 30,?,30 dup (?) /給變量buf定義存儲單元,db表示定義字節(jié)數據, ? 只分配存儲單元,不定義初值。帶DUP的表達式,定義重復數據。data ends / DATA段定義結束code segment /CODE段定義開始 assume cs:code,ds:data /運行程序時,需要通過段寄存器訪問存儲單元 ,ASSUME指令就是用來建立段寄存器與段之間關系begin:mov ax,data /begin為程序的起始標號;將data段的起始地址傳送給ax mov ds,ax /將ax的內容傳送給ds,完成數據段寄存器的加載 mov dx,offset msg /offset計算變量或標號的段內偏移地址,也可以用lea dx,msg來實現(xiàn)以下3句為9號調用 mov ah,09h int 21h mov dx,offset buf mov ah,0ah int 21h mov ah,4ch int 21h code ends / CODE段結束end begin /用結束偽指令END加載程序的起始地址。五、實驗數據寫出編寫的程序清單。程序一:MOV AX,1234 MOV BX,1002 MOV DL,39 ADD AX,BXINC BX DEC DL MOV SI,3 Int 20程序二:data segment msg db what is your name:$ buf db 30,?,30 dup (?) data ends code segment assume cs:code,ds:data begin:mov ax,data mov ds,ax mov dx,offset msg mov ah,09h int 21h mov dx,offset buf mov ah,0ah int 21h mov ah,4ch int 21h code ends end begin 六、實驗結果分析1、 分析程序調試過程中出現(xiàn)的錯誤,是如何解決的。程序出現(xiàn)錯誤通過查書本和詢問同學,細心調查解決。2、 寫出程序運行的結果。程序一運行的結果:輸入一個大寫字母用小寫字母顯示出來,例如輸入大寫字母A,則屏幕顯示的結果為Aa。程序二運行的結果:提示用戶輸入,然后將用戶的輸入直接顯示出來。例如輸入zhaoyanjiao,則屏幕顯示的結果為:what is your name:zhaoyanjiao3、 分析執(zhí)行每個命令后相應寄存器的變化。程序一的變化:BX從0000變?yōu)?002 IP從0103變?yōu)?106 BX從0000變?yōu)?002 IP從0103變?yōu)?106DX變?yōu)?039 IP從0106變?yōu)?108AX變?yōu)?236 BX=1002 IP從0108變?yōu)?10ABX=1003 IP從010A變?yōu)?10BDX=0038 IP從010B變?yōu)?10DIP從0108變?yōu)?110IP從0110變?yōu)?172 4、 寫出尋址方式。MOV AX,1234 是立即尋址MOV BX,1002 是寄存器間尋址MOV DL,39 是立即尋址ADD AX,BX 是寄存器間尋址MOV SI,3 是立即尋址 mov ax,data 是直接尋址 Mov ds,ax 是寄存器尋址 mov dx,offset msg 是寄存器間接尋址 mov ah,09h 是立即尋址 mov dx,offset buf 是寄存器間接尋址 mov ah,0ah 是立即尋址 mov ah,4ch 是立即尋址三、存儲器塊清零一、 實驗要求指定存儲器中某塊的起始地址和長度,要求能將其內容清零。二、 實驗目的1. 掌握存儲器讀寫方法2. 了解存儲器的塊操作方法三、實驗說明通過本實驗,學生可以了解讀寫存儲器的讀寫方法,同時也可以了解單片機編程,調試方法。如何將存儲器塊的內容置成某固定值(例全填充為0FFH)? 請學生修改程序,完成此操作。設置塊長度設置塊起始地址地址加1當前地址內容清零是否清除完結束是否四、參考程序1、參考程序data segmentBlock db 256 dup(55h)data endscode segment assume cs:code, ds:datastart proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清 256 字節(jié)Again: mov bx, byte ptr 0 inc bx Loop Again ; 記數減一 jmp $code ends end start五、實驗步驟(1) 進入Wave6000,輸入程序并檢查,保存程序。(2) “編譯”程序。(3) “全速執(zhí)行”程序。(4) “暫?!背绦蜻\行,在“數據窗口(MEMOREY)”查看0400H起始的單元內容,并記錄。(5) 在指令“jmp $”處設斷點。(6) “全速執(zhí)行”程序。(7) 在“數據窗口(MEMOREY)”查看0400H起始的單元內容,記錄并分析實驗結果。六、實驗結果分析四、內存塊移動一、 實驗要求將指定源地址和長度的存儲塊移到指定目標位置二、 實驗目的1 了解內存的移動方法。2 加深對存儲器讀寫的認識。三、 實驗說明塊移動是計算機常用操作之一,多用于大量的數據復制和圖象操作。本程序是給出起始地址,用地址加一方法移動塊,請思考給出塊結束地址,用地址減一方法移動塊的算法。另外,若源塊地址和目標塊地址有重疊,該如何避免?四、程序框圖設置塊的源地址設置塊的目標地址設置移動長度從源地址取數保存到目標地址中源地址加1目標地址加1是否移動完結束是否; 移動 256 字節(jié)data segmentSource db 256 dup(055h)Target db 256 dup(0aah)data endscode segment assume cs:code, ds:data, es:datastart proc near mov ax, data mov ds, ax mov es, ax mov si, offset Source mov di, offset Target mov cx, 256 rep movsb jmp $code ends end start五、實驗步驟(1) 進入Wave6000,輸入程序并檢查,保存程序。(2) “編譯”程序。(3) 在指令“jmp $”處設斷點。(4) “全速執(zhí)行”程序。(5) 在“數據窗口(MEMOREY)”分別查看0400H、0500H開始256個單元的內容,記錄并分析實驗結果。六、實驗結果分析1、實驗結果:256個aah全部被256個55h所代替。2、 用地址減一方法移動塊的算法程序如下: data segment Source db 256 dup(055h) Target db 256 dup(0aah) data ends code segment assume cs:code, ds:data, es:data start proc near mov ax, data mov ds, ax mov es, ax mov si, offset Source mov di, offset Target Add si:255 Add di:255 std mov cx, 256 rep movsb jmp $ code ends end start3、如果出現(xiàn)源塊地址與目標地址有重疊可以采用一下的辦法來避免:把源塊地
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西質量工程職業(yè)技術學院《建筑模型設計》2023-2024學年第二學期期末試卷
- 西南財經大學《公共藝術品設計制作陶藝》2023-2024學年第二學期期末試卷
- 內蒙古美術職業(yè)學院《小學生發(fā)展與教育心理學》2023-2024學年第二學期期末試卷
- 哈密職業(yè)技術學院《解剖生理學(解剖組胚學)》2023-2024學年第二學期期末試卷
- 武漢電力職業(yè)技術學院《商務談判禮儀》2023-2024學年第二學期期末試卷
- 四川體育職業(yè)學院《民用航空醫(yī)學》2023-2024學年第二學期期末試卷
- 福建對外經濟貿易職業(yè)技術學院《產品設計二維構成基礎》2023-2024學年第二學期期末試卷
- 贛南科技學院《生物工程單元操作原理》2023-2024學年第二學期期末試卷
- 書記員筆試試題及答案
- 乳癌試題及答案
- GB/T 42597-2023微機電系統(tǒng)(MEMS)技術陀螺儀
- 2023-2024學年浙江省余姚市小學語文六年級期末高分通關考試題附參考答案和詳細解析
- 2023年中國化學奧林匹克競賽浙江省預賽試題及參考答案
- RB/T 089-2022綠色供應鏈管理體系要求及使用指南
- 優(yōu)秀傳統(tǒng)文化在高中政治教學中的應用策略 論文
- 匯川MD系列變頻器說明書文檔全文預覽
- 新媒體運營:微信公眾號運營教學課件
- 機修工考核評分表(月度)
- 路基實測項目檢測
- 柴油機外文文獻翻譯資料
- 國家開放大學《經濟法》形考任務1-4參考答案
評論
0/150
提交評論