




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
微機原理實驗內容2015實驗一 上機方法及尋址方式練習一 實驗目的1 學習匯編語言上機方法。2 深入了解DEBUG動態(tài)調試軟件的應用,掌握下列命令的使用方法:U 反匯編 G 運行程序 D 顯示內存內容 R 顯示修改寄存器內容 E 修改內存內容 T 單步執(zhí)行命令 Q 返回DOS3 實際感受段地址,偏移地址,存儲器組織及CPU寄存器等概念。4 掌握8086/8088的主要尋址方式。二 實驗任務一 雙字相加 把內存字單元DATA1和DATA2中的兩個數相加(例如123456H+456789H),結果存入SUM單元。 此程序的功能很簡單,目的是為了通過該例掌握上機過程和實驗方法。首先,對書寫好的源程序進行編輯,匯編及連接,生成可執(zhí)行的EXE文件。然后對EXE文件進行動態(tài)調試,排除錯誤,最終形成一個完全正確的程序。1 建立源程序 .ASM 為了使大家對標準匯編語言程序結構有一個了解,并牢固掌握DEBUG調試程序的應用。在這里給出上面實驗任務的程序清單。程序1是一個標準的匯編語言程序,共有三個段:數據段、堆棧段及代碼段,在以后的編程中可以仿照這一結構。 程序1:雙字相加DATA SEGMENT ;define data segment DATA1 DW 1234H DATA2 DW 5678H SUM DW ?DATA ENDSSTACK SEGMENT PARA STACK STACK ;define stack segment DW 100 DUP (?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ;define code segment ASSUME CS: CODE,DS:DATA,SS:STACKSTART:MOV AX, DATA ;set DS register to current data segment MOV DS, AX MOV AX, STACK ;set up stack SS and SP regist MOV SS, AX MOV SP, OFFSET TOP MOV AX, DATA1 ADD AX, DATA2 MOV SUM, AX MOV AH,4CH ;return to DOS INT 21HCODE ENDS ;end of code segment END START ;end assembly2 匯編生成 .OBJ 文件 對.ASM文件進行匯編,生成目標文件 .OBJ。 匯編結束時會顯示警告錯誤的個數(Warning Errors)和嚴重錯誤的個數(Severe Errors),這兩種錯誤屬于.ASM文件中的語法性錯誤。若出現錯誤應對源文件(.ASM文件)進行修改,修改之后再進行匯編直至錯誤數為零時方可進行下一步操作。3 連接生成 .EXE文件 連接后生成 .EXE可執(zhí)行文件。4. 利用DEBUG命令對 .EXE文件進行調試 DEBUG是DOS提供的一種調試軟件。它可用于檢查修改存儲單元的內容,裝載及運行用戶程序。 進入DEBUG后其狀態(tài)提示符為一短橫線“”,在此狀態(tài)下可用各種命令對 .EXE進行操作。下面是DEBUG的主要命令。(1) 對 .EXE文件進行反匯編U命令U命令格式一: U CS:00001501: 0000 B8F314 MOV AX, 14F3. 上述命令從CS段,偏移地址為0000的單元開始反匯編32個字節(jié)。在以上的反匯編清單中,最左一列是代碼段的段地址值,第二列是各指令的偏移地址值(指令的起始地址),然后依次是指令的機器碼與助記符。 U命令格式二: U 在32個字節(jié)的指令代碼反匯編完之后,可再次使用U命令對后續(xù)代碼進行反匯編,在此,U命令之后省略了地址,則從上一個U命令的最后一條指令的下一個字節(jié)開始反匯編32個字節(jié)。 可反復使用上述兩種U命令格式,將原程序清單與反匯編清單進行對比分析,然后回答下列問題: 問題1: .EXE裝入內存后,其數據段的段地址是 。在未運行 .EXE程序前,數據段的段地址是否已裝入到DS寄存器中? (請選擇回答:是/否)。 問題2:反匯編清單中倒數第一行(按實際顯示行計算)是不是.EXE程序中的有效指令? (請選擇:是/不是)。(2) 檢查RAM區(qū)中的數據D命令 D命令格式: D 數據段段地址:偏移地址(0000) D命令從給定地址開始連續(xù)顯示內存單元中的數據,每行顯示16個字節(jié),每行的顯示格式為段地址:偏移地址 16個字節(jié)數據及各字節(jié)數據所對應的ASCII碼字符。 若D命令中沒有給出地址,則從上一個D命令所顯示的最后一個字節(jié)的下一個字節(jié)開始顯示。合理使用U命令和D命令,分析所顯示的信息并填寫表1-1。運行機制 (3)運行程序G命令 G命令格式:G = CS:0000 斷點地址CPU從CS段,0000單元開始連續(xù)執(zhí)行指令,當遇到斷點時便會停止執(zhí)行。用G 命令執(zhí)行完程序后再使用D 命令顯示內存單元的內容,填寫表1-2中各項數據和運行結果,并分析結果是否正確。(4)檢查寄存器內容R命令R R命令會顯示/修改CPU 所有寄存器的內容,并給出程序執(zhí)行后各標志位的當前狀態(tài)。在此,不再列出執(zhí)行情況。 請用R命令顯示CPU 寄存器的內容,填寫表1-3。(5) 修改內存單元內容E命令 不連續(xù)修改內存單元內容,命令格式如下:E 1500:0000 設顯示1500H:0000H單元內容為:1500:0000 24. 如果需要修改該單元內容可以由鍵盤輸入數據,按空格則顯示/修改下一單元的內容。例如:把1500H:0000H單元的24H內容修改成(注意,在DEBUG中顯示的地址碼數據均默認為十六進制形式)78H,其操作如下:1500:0000 24. 78 36. 其中36H為1500H:0001H單元的內容。用戶可以不斷修改相繼單元的內容,若某一字節(jié)無需修改可用空格鍵跳過,直到用回車結束該命令為止。 修改連續(xù)單元的內容。命令格式為:E 1500:0000 12 34 123 該命令將12H、 34H、 31H(1的ASCII碼)32H、 33H 存放到從1500:0000開始的連續(xù)單元中去?,F在要求用E命令按表1-4中給出的數據修改DATA1和DATA2單元的內容,然后用 G命令運行程序,填寫表1-4。(6)單步執(zhí)行命令T命令使用T命令之前,先使用G命令執(zhí)行程序,使程序暫停在斷點處,然后可以使用T命令單步執(zhí)行指令,其命令格式為:T 其功能是從當前的CS:IP 處執(zhí)行一條指令后暫停,自動顯示各寄存器的內容、標志位的狀態(tài)并給出下一次將要執(zhí)行的指令地址及代碼。 注意,對REI指令、中斷指令、DOS功能調用指令等不能用T命令單步執(zhí)行。 請用T命令單步執(zhí)行程序,一次執(zhí)行一條指令,注意觀察各寄存器如AX、IP等的變化情況。(7)退出 DEBUGQ命令QQ 命令后退出DEBUG,返回DOS。三實驗任務二: 尋址方式練習 下列程序用于練習8086/8088的立即尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址等七種尋址方式,為了方便調試程序,程序清單的代碼段中給出了指令的行號,輸入程序時請不要輸入行號。 程序清單如下:DATA1 SEGMENT M1DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H M2 DB 0A8H,0A9HDATA1 ENDSDATA2 SEGMENT N1DB 0B0H,0B1H,0B2H,0B3H, 0B4H,0B5H,0B6H,0B7H N2DB 0B8H,0B9HDATA2 ENDSSTACK SEGMENT PARA STACK STACK DB 0C0H,0C1H,0C2H,0C3H,0C4H,0C5H ,0C6H,0C7H DB 0C8H,0C9H DW 100 DUP (?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS: CODE,DS:DATA1,ES:DATA2,SS:STACK1 START:MOV AX,DATA1 2 MOV DS,AX 3 MOV AX,DATA2 4 MOV ES,AX 5 MOV AX,STACK 6 MOV SS,AX 7 MOV SP,OFFSET TOP 8 MOV SI,0001H 9 MOV DI,0002H10 MOV BP,0003H11 MOV BX,0004H12 MOV AL,10013 MOV AL,BL14 MOV AL,M115 MOV AL,BX16 MOV AL,ES:BX17 MOV AL,BP 18 MOV AL,BX+05H 19 MOV AL,M1BX20 MOV AL,ES:N1BX 21 MOV AL,BXSI22 MOV AL,M1BXSI23 MOV AL,N1BXDI24 MOV AL,BPDI25 MOV AH,4CH26 INT 21HCODE ENDSEND START1.建立源程序,然后匯編、連接生成目標文件。2.合理使用DEBUG的U命令和D命令,檢查RAM區(qū)中的數據,分析所顯示的信息并填寫表1-5。3. 利用U命令對 .EXE文件進行反匯編, 分析反匯編清單,從第12條指令開始把每條指令的偏移地址填入表1-6的“指令的偏移地址”一欄中。4. 利用T命令從第12條指令開始單步執(zhí)行程序,每執(zhí)行一條指令填寫表1-6中對應行的其它欄(“SRC尋址方式”、“SRC的地址”、及“AL之值”)。實驗數據記錄頁 實驗一 上機方法及尋址方式練習姓 名: 學 號: 實驗室門牌號: 實驗桌號: 表1-1運行程序前的數據存儲情況標號(變量名) 段地址 偏移地址 內存中的內容 DATA1 DATA2 SUM表1-2 運行程序后的數據存儲情況標號(變量名)段地址偏移量內存中的內容 DATA1 DATA2 SUM表1-3 有關寄存器內容寄存器名 CS DS IP AX BX CX SI DI 內容表1-4 另一組實驗數據及運行結果標號(變量名)段地址偏移量內存中的內容 DATA1(你學號的前4位) DATA2(你學號的最后4位) SUM表1-5 各段的數據分配情況DATA1區(qū)地址與數據DATA2區(qū)地址與數據STACK 區(qū)地址與數據段地址偏移地址數據段地址偏移地址數據段地址偏移地址數據0000H0000H0000H0001H0001H0001H0002H0002H0002H0003H0003H0003H0004H0004H0004H0005H0005H0005H0006H0006H0006H0007H0007H0007H0008H0008H0008H0009H0009H0009H表1-6 指令地址及執(zhí)行情況行號指令指令的偏移地址SRC的尋址方式SRC的偏移地址指令執(zhí)行后AL之值12MOV AL,10013MOV AL,BL14MOV AL,M115MOV AL,BX16MOV AL,ES:BX17MOV AL,BP18MOV AL,BX+05H19MOV AL,M2BX20MOV AL,ES:N2BX21MOV AL,BXSI22MOV AL,M2BXSI23MOV AL,N2BXDI24MOV AL,BPDI 注:SRC指源操作數。 實驗二 串處理程序設計一 實驗目的1 進一步使用DEBUG的調試命令,達到熟練掌握的目的。2 學習串處理程序的設計方法,牢固掌握串操作指令及其用法。3 學習DOS功能調用方法。二 實驗任務一 字符串傳送 編寫程序,建立數據段DATA,將你的姓名(漢語拼音)及學號存入數據段的BUFFER1區(qū)域,然后利用程序將BUFFER1區(qū)域中的字符串(姓名及學號)依次傳送到從BUFFER2開始的內存區(qū)域中去。1. 編程提示 數據段可以定義為兩個段:源數據區(qū)定義為數據段,目的數據區(qū)定義為附加段。DATA SEGMENTBUFFER1 DB WANG HUAN 01982001M EQU $-BUFFER1DATA ENDSEXTRA SEGMENTBUFFER2 DB M DUP (?)EXTRA ENDS 串的傳送可用MOVSB指令來實現,注意,MOVSB要求DS與SI寄存器配合使用,ES與DI配合使用。另外,用CX中的計數值可控制MOVSB指令的重復次數。指令格式為: REP MOVSB 2.實驗要求及問題(1) 編寫程序,在DEBUG下運行并觀察結果,填寫表2-1。表2-1 反匯編清單中所反映的相關信息*注:最后一條指令是對應于代碼段中最后一條指令(2)在未執(zhí)行程序之前,用D命令顯示內存區(qū)域的內容,填寫表2-2。表2-2 未執(zhí)行程序前的數據區(qū)內容(3)執(zhí)行程序以后用D命令顯示內存區(qū)的內容,填寫表2-3。表2-3 執(zhí)行程序之后的數據區(qū)內容(4)用R命令檢查寄存器的內容填寫表2-4。表2-4 有關寄存器內容寄存器名 CS DS IP AX BX CX SI DI 內容 三實驗任務二 DOS 功能調用DOS系統(tǒng)為程序員提供許多子程序可供用戶直接調用。調用時需要使用中斷指令:INT 21H在使用該指令前,應將調用的功能號送入AH,有關入口參量送入指定寄存器。若有出口參量,中斷調用返回后,結果在指定的寄存器或存儲單元中。其調用方法如下:送入口參量給指定寄存器;AH 功能號;INT 21H ;主要的幾個DOS功能調用說明文件如下。1. 4CH號功能調用 MOV AH,4CH ;子程序編號4CHAH;即功能號4CHAHINT 21H;返回DOS2. 01H號功能調用 ;從鍵盤輸入一個字符(功能號=1);功能號 1 AH;入口參數:無INT 21H ;等待按鍵,按下一個鍵則該句執(zhí)行完畢 ;字符回顯 ;出口參數:AL中有鍵入的字符(ASCII碼) 3. 08H號功能調用 ;從鍵盤輸入一個字符;功能號 08 AH;入口參數:無INT 21H ;等待按鍵,按下一個鍵則該句執(zhí)行完, ;字符不回顯 ;出口參數:AL中有鍵入的字符(ASCII碼)4. 02H號功能調用 ;在顯示器上顯示一個字符(功能號=2);功能號 02H AH;入口參數:要顯示的字符(ASCII碼)DL INT 21H02H號功能調用注意事項:(1)02H號功能調用會占用AL寄存器。為了防止02H號功能調用破壞AL寄存器的內容,調用前可把AX壓棧,調用完后從堆棧中彈出AX,以便恢復AL之值。 (2)調用21H中斷的02號功能時,當DL中置入00(或20H)時即可顯示一個空格,必須注意,用DOS調用顯示字符,當ASCII碼為 07H、08H、09H、0AH和0DH時,不會顯示與之對應的字符,DOS分別將這些ASCII碼解釋為振鈴(BEL)、退格(BS)、制表(TAB)、換行(LF)和回車(CR)的控制符,這時屏幕上不會有字符顯示,僅僅是執(zhí)行控制碼所表示的操作。所以當按遞增順序顯示ASCII碼時,應在顯示這些控制碼的地方顯示空格,否則顯示格式不對。 (3)用DOS調用時,應用控制碼0AH和0DH分別控制換行和回車操作。實驗任務二要求:編寫下列程序并上機運行,由鍵盤輸入1個英文字母,屏幕上顯示該字母。若輸入的是小寫字母,則另起一行顯示對應的大寫字母;若輸入的是大寫字母,則另起一行顯示對應的小寫字母。實驗三 分支程序設計一 實驗目的1 掌握分支程序的設計方法。2 掌握無條件轉移指令(JMP)及條件轉移指令的應用。3 進一步使用DEBUG的調試命令,達到熟練使用的目的。在DEBUG中提供了測試各個標志位的手段,各標志位的復位(“0”狀態(tài))和置位(“1”狀態(tài))是用字符表示的,如表3-1所示。在實驗過程中要善于使用T命令、 R命令觀察分析標志位的變化情況。表3-1 標志寄存器各標志位的顯示字符二 實驗任務 碼制轉換 碼制轉換的內容很多,現代技術中有各種各樣的編碼形成。在計算機領域中,最常用的碼制有ASCII碼、十進制碼、二進制碼及十六進制碼等。這些碼制在實際應用中有時需要進行相互轉換,在轉換過程中可用旋轉、移位、比較、轉移等指令來實現。至于轉換算法,對不同的編碼規(guī)則其算法就不同,請大家參閱有關書籍準備下列實驗內容。任務3-1: 二進制到ASCII碼的轉換 在DATA單元存放有一個8位二進制碼,將其按位轉換成一串ASCII碼,即1轉換成1的ASCII碼31H;0轉換成30H。并依次存放在以STRING開始的RAM區(qū)中(高位在前,低位在后)。轉換示例見表3-2。實驗要求:1. 在表3-2中分別給出了DATA單元中的三個數據。分別將十六進制數6B、72和C9送入DATA單元,運行程序后把結果填寫到表3-2的對應欄目中,并分析結果的正確性。2. 按調試過程中的實際內存分配情況回答下列問題:(1)代碼的段地址是 ,第一條指令的偏移地址是 ,最后一條指令的偏移地址是 。(2)源字符串所在數據段的段地址是 ,偏移地址是 。(3)目標字符串所在段的段地址是 ,偏移地址是 。表3-2 二進制轉換成ASCII碼 次數 及示例 實驗數據 實驗結果 十六進制 二進制 示例 D2 11010010 31 31 30 31 30 30 31 30 1 6B 01101011 2 72 01110010 3 C9 11001001任務3-2 : ASCII 碼到十進制的轉換 從STRING1單元開始,存放有一串ASCII碼字符(其字符長度為十六個字節(jié),每一個ASCII碼占一個字節(jié))。將STRING1中每個字符轉換成與之對應的十進制數字,并存放在以STRING2開始的區(qū)中(每個十進制數字占一個字節(jié))。如果某一個ASCII碼不是0-9之間的數,則將STRING2字串中對應單元置為FFH。實驗要求:1 請參閱表4-1,編寫程序上機調試。2 運行程序,填寫表3-3。表3-3 ASCII碼到十進制轉換的實驗數據與運行結果任務3-3:多分支程序設計 編程顯示一個簡單菜單1,2,3(菜單顯示形式不限)。當按下1時,在屏幕上顯示你的姓名(漢語拼音);當按下2時,在屏幕上顯示你的學號。當按下3時,程序結束。要求:姓名和學號不能在同一行顯示(即要控制換行操作)。實驗四 循環(huán)程序設計一 實驗目的1 掌握循環(huán)程序的設計方法,掌握變址技術的應用。2 掌握DOS功能調用方法。二 實驗任務實驗任務1. DOS功能調用 表4-1是ASCII碼編碼表,要求編寫程序,將這些字符以16行、16列的表格形式顯示出來(顯示效果見圖4-2),要求顯示時按ASCII碼的遞增順序分行顯示(即行內ASCII碼依次遞增,與表4-1中給出的表格行列位置正好倒置)。表4-1 ASCII碼編碼表表4-1 ASCII碼編碼表(續(xù))編程提示:(1).顯示一個字符,可使用21H中斷的02號功能來實現。方法如下: MOV AH, 02H ; 02號功能調用 MOV DL, 要顯示的ASCII碼/動作控制碼 INT 21H調用21H中斷的02號功能時,當DL中置入00(或20H)時即可顯示一個空格,必須注意,用DOS調用顯示字符,當ASCII碼為 07H、08H、09H、0AH和0DH時,不會顯示與之對應的字符,DOS分別將這些ASCII碼解釋為振鈴(BEL)、退格(BS)、制表(TAB)、換行(LF)和回車(CR)的控制符,這時屏幕上不會有字符顯示,僅僅是執(zhí)行控制碼所表示的操作。所以當按遞增順序顯示ASCII碼時,應在顯示這些控制碼的地方顯示空格,否則顯示格式不對。 另外,用DOS調用時,應用控制碼0AH和0DH分別控制換行和回車操作。(2).使用BIOS調用時,所有字符都可以顯示出來。用BIOS調用,可用BIOS中斷10H的0A號功能實現字符顯示。BIOS中斷10H的0A號功能調用參數如下:入口參數:AH=0AH ;選擇10H中斷的0A號功能AL=顯示字符的ASCII碼 ;00FFHBH=03 ;選擇屏幕的顯示頁,一般取0BL ;文本方式下不預置BL之值。CX=顯示次數 ;決定AL中的字符在屏幕上顯示的次數,取1。出口參數:一個或多個字符顯示在屏幕上。使用BIOS調用時,要用10H的02號功能控制光標的移動(BIOS 10H中斷的0A號功能調用不移動光標),以實現顯示空格、換行、回車等功能。BIOS中斷10H的02號功能調用參數:入口參數:AH=02H ;控制光標位置DH=光標行位置 ;024行DL=光標列位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南通師范高等??茖W校《風景寫生》2023-2024學年第二學期期末試卷
- 河南交通職業(yè)技術學院《微紀錄片創(chuàng)作實踐》2023-2024學年第二學期期末試卷
- 桂林師范高等??茖W校《量子力學(一)》2023-2024學年第二學期期末試卷
- 廣西民族大學相思湖學院《俄羅斯文化》2023-2024學年第二學期期末試卷
- 江西工程學院《產品設計報告書制作》2023-2024學年第二學期期末試卷
- 中國地質大學(北京)《民族民間工藝傳承創(chuàng)新專題》2023-2024學年第二學期期末試卷
- 上海工商職業(yè)技術學院《中藥養(yǎng)護學》2023-2024學年第二學期期末試卷
- 湖南司法警官職業(yè)學院《儀器分析》2023-2024學年第二學期期末試卷
- 蘭州大學《金融投資技術分析與技巧》2023-2024學年第二學期期末試卷
- 打樁考試試題及答案
- 石油工業(yè)與環(huán)境保護概論智慧樹知到答案章節(jié)測試2023年中國石油大學(華東)
- 警用無人機考試題庫(全真題庫)
- 醫(yī)保業(yè)務知識題庫
- 等級醫(yī)院評審中應注意的迎評禮儀
- 吉林省長春市東北師大附中明珠學校2023年物理八年級第二學期期末統(tǒng)考模擬試題含解析
- 【小升初】貴州省遵義市2022-2023學年人教版小學六年級下學期數學升學分班考測試卷(含解析)
- LD 52-1994氣瓶防震圈
- GB/T 35351-2017增材制造術語
- GB/T 18268.1-2010測量、控制和實驗室用的電設備電磁兼容性要求第1部分:通用要求
- FZ/T 93074-2011熔噴法非織造布生產聯合機
- 牽引供電系統(tǒng)課件
評論
0/150
提交評論