《微機原理習題》PPT課件.ppt
《《微機原理習題》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《微機原理習題》PPT課件.ppt(49頁珍藏版)》請在裝配圖網上搜索。
1、 微機系統(tǒng)與接口 習題課 第 1-3章要點小結 2 一、數(shù)制與編碼 補碼是計算機所采用的數(shù)值存儲格式 , 以后應用 時我們約定帶符號數(shù)均默認為補碼 。 補碼使得 加減法 運算簡單了 ( 帶符號數(shù)的加減法 一致性 加法時直接進行兩數(shù)相加 , 減法時用 減數(shù)變補碼與被減數(shù)相加 ) 。 可以說補碼是使計 算機工作 “ 方便了 ” , 使人理解起來 “ 麻煩了 ” 。 帶符號數(shù): 原碼和反碼是人為定義,補碼是機器特性 ! 3 例題 習題一 .2 當下列各二進制分別代表原碼、反碼和補碼時,其等 效的十進制數(shù)值為多少? 11111111 代表原碼時, -127 ; 代表反碼時,原碼是 10000000,
2、0 ; 代表補碼時,原碼是 10000001, -1 ( -128+127) 4 例題 習題一 .3 已知 x1=+0010100, y1=+0100001, x2=- 0010100, y2=-0100001,試計算下列各式。 (字長 8位) 解: 由已知可得 x2=-20, y2=-33,則得 x2+y2/8=-20-4, x2+y2/8補 =-24補 =E8H 5 反映在指令系統(tǒng)中 MUL(無符號乘法指令)以及 IMUL(帶符號乘 法指令) 比較指令:適用于無符號數(shù)的 JA、 JB等條件轉 移指令與適用于帶符號數(shù)的 JG、 JL等條件轉移 指令。 6 例題 設 AL, BL都是帶符號數(shù)
3、, 要求當 AL BL時轉 至 NEXT處 , 在 CMP AL, BL指令后應選用正 確的條件轉移指令是 ( ) A JBE B JNG C JNA D JNLE 答案: B 有符號數(shù)的大小判斷 7 二、 對 標志位 的認識與理解 容易出錯的是(補碼的) 算數(shù) 運算后對 CF OF的判斷; 1) 對 CF的判別: 只要 在單步操作后看 最 高位 是否有借位與進位即可, 不用考 慮最高位是否被指定為 符號位 。 CF=1表示無符號數(shù)運算溢出 OF=1表示有符號數(shù)運算溢出 8 2) 對 OF的判別: 課本中對于 OF的判別依據(jù)為:當算術運算結果超 出了 帶符號數(shù)的范圍時 ,即溢出。 “正溢出 ”
4、 “負溢出 ” 01011010B ( +90) +01101011B ( +107) 11000101 B ( -59) 二進制補碼 真值 10010010B ( -110) +10100100B ( -92) 00110110B ( +54) 二進制補碼 真值 正數(shù)相加的結果為負 負數(shù)相加的結果為正 9 簡單判別方法: 雙高位判別法 首先引進兩個附加的判別符號,即 CS:表征最高位 (符號位) 的進位情況。 如有進位,則 CS=1;否則, CS=0。 CP:表征次高位 (數(shù)值部分最高位 ) 的進位情況。 如有進位,則 CP=1;否則, CP=0。 當 CS CP=1 ,必定發(fā)生 溢出 。
5、(異或) 其中 CSCP為“ 01”,稱其為“ 正溢出 ”; 當 CSCP為“ 10”,稱其為“ 負溢出 ”。 10 01010101B ( +85) 補 +00111100B ( +60) 補 10010001 B 91H真 -17 顯然 CS=0, CP=1, 則為 “ 正溢出 ” 10101011B ( -85) 補 +11000100B ( -60) 補 01101111B 6FH真 111 顯然 CS=1, CP=0, 則為 “ 負溢出 ” 提示 :一個正數(shù)與負數(shù)相加,結果肯定不溢出 例題 習題 1.4 11 三、 匯編指令 匯編語言有三種基本語句: 指令語句、偽指令語 句、宏指令語
6、句 。 指令語句操作指令 +操作數(shù) (可隱含 ) 匯編器如何找到操作數(shù) 尋址方式 : (1)在數(shù)據(jù)存儲器中, 指令中如何提供操作數(shù)或操 作數(shù)地址的方式。 (2)在程序存儲器中,程序轉移時需提供轉移地址, 這也稱為尋址。 習題二 . 1.(7) PUSH 1234H,源操作數(shù)尋址方 式: 直接尋址 ; 無目標操作數(shù) 12 例題 下面指令中 , 源操作數(shù)的尋址方式為直接尋址的指 令是 ( ) A ADD AX, WORD PTR BX+SI B ADD AX, DATA1 C INC CX D MOV BX, 8FFFH 答案: B 解釋: A為基址加變址; B中 DATA1為一變量,作為 存儲器
7、操作數(shù); C為寄存器尋址; D為立即數(shù)尋址。 13 例題 要點:理解各段與寄存器的概念,正確使用 尋址方式。 例: (1)直接、間接、立即三種尋址方式的執(zhí)行速度由快至慢依次 為: (2)下列指令中操作數(shù)在代碼段中的是 A.MOV AL,25H B.ADD AL,BH C.CMP AX,BP D.INC DS:BP 立即、直接、間接 A 14 要點 1:寄存器不能 隨便使用 1) 基址與基址 (或 變址與變址 )不能組合在一起 尋址 。 MOV BX, BP+SI( 正 ) MOV AX, BXBP( 錯 ) 2) 出現(xiàn) AX、 CX、 DX、 SP ( 都錯 ) MOV IP, AX ( 錯
8、) MOV AX, IP ( 錯 ) 15 3) 存儲器間不能 直接 進行操作 。 (MOV 2000H, BX; CMP BX, SI) 4) 段寄存器 不能直接進行 立即數(shù) 賦值 ( MOV DS, 0100H) , 段寄存器 之間 不 能 直接 進行操作 ( MOV CS, DS) , 段 寄存器不能進行 加減法 操作 ( ADD DS, AX) , 另外 CS不能作為 目標操作數(shù) 。 (PUSH CS( 正 ) , POP CS( 錯 ) ) 16 要點 2:操作數(shù)類型要明確 MOV AX,BL MOV AL,BX 反匯編查看: 警告 :操作數(shù)類型不匹配 警告就是非法! 17 例題 下
9、面的指令中 , 不合法的是 ( ) A MUL BX B MUL BX C MOV AL, 02H D MOV AL, BX 答案: B 解釋:因為 MUL指令可以進行字節(jié)或字操作,而 B中 并未向編譯器指明操作數(shù)的類型 ,使得操作 不能確定,這時可以利用偽指令 BYTE PTR或 WORD PTR向編譯器傳遞操作數(shù)類型。 18 例題 2.3 指出下列傳送類指令中,哪些是非法指令 ( 1) MOV DS, 0100H ( 2) MOV BP, AL ( 3) MOV BX, AL ( 4) XCHG AH, AL ( 5) OUT 21H, AL ( 6) OUT 310H, AL ( 7)
10、MOV BP+DI, AX ( 8) MOV BX+CX, 2130H ( 9) AND AX, BL ( 10) ADD AL, BX+DX+10H ( 11) MOV CS: 2000H, AX ( 12) POP CS 非法指令: (1), (2), (3), (6), (8), (9), (10) 19 例題 補充 注意下列指令都是非法的 (1) CMP CF,1 ;symbol not defined (2) MOV AX,CF (3) MOV DATA1SI,DATA2DI (4) MOV DATA1, DATA2 (5) SBB AX,BX (6) CMP 39,AL 20 要點
11、 3:串操作指令 注意 “ 先期的準備工作 ” : 對相應的尋址寄存器進行( DS:SI、 ES:DI)設置, 注意段超越的問題。 根據(jù)自己的程序決定對存儲區(qū)的操作 方向, 即對 DF的設置。 若要進行重復操作時,一定要設置 CX。 若要進行 ZF的判別,注意判別條件的設置。 21 例題 假設 ES段中有一個字符 12FG3LM5C, 其名 為 ARRAY, 下面的程序段 CLD LEA DI, ES: ARRAY MOV AL,G MOV CX, 9 REPNE SCASB HLT 執(zhí)行后 , CX的值是 ( ) 。 A 7 B 6 C 5 D 4 22 解釋:這是在字符串中尋找第一個出現(xiàn)的
12、指定字符 的操作 , 我們將關鍵的 循環(huán)串操作 的具體的執(zhí)行步 驟表述如下: 先做終止判斷 : 如果 CX=0或 ZF=1則退出 , 否則往 下執(zhí)行: (2)執(zhí)行其后的串操作 , 比較 AL與 (ES:DI), 改變 ZF (3)DF=0表示按地址增方向 , 修正 DI (4)CX-1送入 CX (5)回到 REPNE SCASB 23 要點 4:控制轉移指令 1) JMP指令 分類情況:按 段內 還是 段間 以及 直接 還是 間接 ???分為五類 相當于間接修改寄器 CS、 IP的內容 段內跳轉 :當前 IP寄存器加上偏移量 段間跳轉 : CS:IP=新地址 24 要點 4:控制轉移指令 段
13、內直接短轉移: JMP SHORT label 8位相對位移量,與下一條指令的地址差 -128 127。 段內直接近轉移: JMP NEAR PTR label 16位相對位移量。 范圍 -3276832767。 若已知下一條指令到所跳轉地址的相對位移量 128+127, 則可用標號 SHORT 可以不定義 SHORT NEXT: JMP NEXT 必須定義 SHORT JMP SHORT NEXT NEXT: 25 段內間接轉移: 16位相對位移量 JMP reg或 JMP mem MOV BX, 1000H JMP BX JMP WORD PTR BX+20H 段間直接轉移: 32位相對位
14、移量( CS: IP) JMP FAR PTR label, 段間間接轉移: 32位相對位移量( CS: IP), JMP mem MOV SI, 0100H JMP DWORD PTR SI 不能是 寄存器 26 26 課程中的例題 DP1 DD PRC1,PRC2 CODE SEGMENT ;設 CS為 8B00H PRC1 PROC FAR ; 8B00:1000 : PRC1 ENDP PRC2 PROC FAR ; 8B00:2C20 : PRC2 ENDP 00,10,00,8B,20,2C,00,8B ;DP1開始的內容 =? 00H 10H 00H 8BH 20H 2CH 00
15、H 8BH DP1 8A00:0034H (PRC1) 8B00:1000H MYDATA ENDS ;DP1的段基 8A00H, DP1的偏移量 0034H 27 27 課程中的例題 JMP DWORD PTR DP1 ;=JMP FAR 0034H JMP FAR PTR DP1 ;=JMP DS:0034H JMP FAR PTR DP1+4 ;=JMP DS:0038H 目標地址 = 8B00H:1000H 00H 10H 00H 8BH 20H 2CH 00H 8BH DP1 8A00:0034H (PRC1) 8B00:1000H 28 要點 4:控制轉移指令 2. 所有條件轉移指
16、令 ( JE/JZ/JC/JA/JB ) 、 循環(huán)控制指令 ( LOOP) 的 操作數(shù)都是一個短標 號 , 即位移量在 -128127的范圍內 。 注意: 在編制大的循環(huán)程序時要注意跳轉范圍的 限制問題 , 否則會出現(xiàn)以下的編譯問題 。 因此要求在編制程序時要做到短小精悍,簡潔易讀 提示: 條件轉移指令往往與邏輯指令,移位指令, CMP等指令相配合。 29 習題 3.2 若 WORD1及 WORD2均為字變量, ADDITION為標號,請說明下列指令的錯誤 之處: ( 1) JMP ADDITIONDI ( 2) JNZ WORD2 ( 3) JMP FAR ADDITION ( 1)標號無類
17、型( short/near) ( 2) Jcc 后面只跟代碼標號,限短跳轉( -128+127) ( 3)缺 PTR 30 例題 已知指令 JMP SHORT NEXT1在程序中的偏移地 址為 001EH(注,這是該指令第 1字節(jié)所在的地 址),指令的機器碼為 0EB03H(其中 0EBH為 操作碼, 03H為操作數(shù)),執(zhí)行該指令后程序跳 轉到的指令偏移地址是什么? 答案: 0023H JMP SHORT NEXT1 MOV BX,2 NEXT1: MOV AX,1 跳轉偏移量 指得是 JMP指 令的下一條指令到轉移去 的指令之間的偏移量 31 如果該 JMP指令的機器碼是 0EBE7H 可以
18、得知 跳轉偏移量 為 0E7H 指令 JMP SHORT NEXT1是占有 2個字節(jié) 的機器 碼,那么下一條指令偏移地址為 001EH + 0002H =0020H。 JMP轉移去的偏移地址是 JMP的 下一條指令偏 移地址 加上 跳轉偏移量 :可以發(fā)現(xiàn)跳轉偏移量 ( 0E7H)是一個負值,因此可以得知是跳到程序 前端,(減法運算 補碼化 ,實際相當于 0020H- 0019H=0007H) 32 解釋: - 1 9 0 1 5 0 H 指令 JMP SHORT NEXT1 操作碼 ( 0 EBH ) 偏移地址 : 001EH 操作數(shù) ( 0 E 7 H ) + 001FH 0020H 000
19、7H 33 3. 過程調用指令在運用時強調實現(xiàn)模塊化的編程。 調用指令( CALL)與返回指令( RET)實現(xiàn)程序 模塊良好的銜接。 分類情況:仍然按 段內 /段間 以及 直接 /間接 。 例:已知當前一條 近過程 過程調用指令 CALL near_proc所在的偏移地址為 1000H, 當前 SP=2000H, 那么執(zhí)行完該 CALL指令后 , 堆 棧段中 ( 1FFEH) =? 答案: 03H 指令: 3個字節(jié) 34 解釋: 首先從已知可知該指令是一 段內直接調用 過程, 指令碼是占用 3個字節(jié) 的機器碼。 執(zhí)行 CALL指令后,系統(tǒng)會將 斷點地址 ,即 CALL 指令的下一條指令的偏移地
20、址(即 1003H )壓入堆 棧。 壓入堆棧的過程:堆棧指針減 2( SP=SP-2),本 題原 SP=2000H,更新后為 SP=1FFEH,而壓入的內 容( 1003H)根據(jù) 高地址占用高字節(jié),低地址占用低 字節(jié)的原則 ,可知( 1FFFH) =10H,( 1FFEH) =03H。 35 解釋: 操 作 碼 I P = 1 0 0 0 H D i s p 0 7 D i s p 8 1 5 指 令 C A L L W O R D P T R B X 程 序 段 S P = 2 0 0 0 H 堆 棧 段 執(zhí)行指令前 執(zhí)行指令后 03H 10H IP=1003H SP=1FFEH 36 四、
21、 匯編語言指令系統(tǒng) 要點 1:理解操作數(shù) , 注意區(qū)分變量 /表達式 常量 寄存器 存儲器操作數(shù) : 具有段屬性、偏移量屬性和類屬性。 標號 :在代碼段中。 變量 :存放數(shù)據(jù)的存儲單元的名字,在數(shù)據(jù)段或堆棧段中。 表達式 : (由運算符和被操作數(shù)組成 )匯編時獲得。 數(shù)值表達式 :常量和運算符組成,匯編時產生立即數(shù)。 地址表達式 :由常量、變量、標號、寄存器、運算符組成, 表示存儲器的段內偏移地址。 運算符 算術 (+,-)邏輯 (AND,OR)關系 (EQ,LT)分析 (OFFSET, SIZE)合 成 (PTR) 37 要點 2: 注意區(qū)分邏輯運算符和邏輯指令 。 運算符出現(xiàn)在操作數(shù)部分
22、,在匯編時完成運算 ;指令出現(xiàn) 在操作碼部分 ,運行 exe時由 CPU執(zhí)行。例如 : AND AL,12H AND 0FH ;等價于 AND AL,02H 數(shù)值表達式作為操作數(shù) 標號名和變量名 反匯編看不到 MOV DATA1, AX JMP NEXT 38 習題 3.1 設下列指令中的標識符均為字變量,請指 出哪些 8086/8088指令是非法的: ( 9) MOV SI, OFFSET WORD2BX 指令二義性 ? MOV SI, 2BX MOV SI, BX+2 OFFSET優(yōu)先級高于 + 該指令合法! 39 要點 3:注意區(qū)分字操作和字節(jié)操作 (1)訪問內存時能夠自動調整訪問規(guī)模
23、(非法,但編譯器警 告) DATA1 DB 01H, 02H MOV AX, DATA1 ;字賦值,高地址 -AH,低地址 -AL MOV DATA1, AX ;字賦值。 (2) 超范圍賦值是不安全的 (非法,編譯器警告) (3)請使用合成運算符 PTR安全地改變訪問規(guī)模 匯 編 器 warning A4031: Operand types must match 40 偽指令 (1)符號定義 EQU: 定義的是符號名,不能重新定義,常用于定義端口。 EQU可以寫在程序的任何位置。 (2)數(shù)據(jù)定義 DB,DW,DD: 定義的是變量,定義字時要遵循低位低地址,高位高地 址的原則。 DB/DW/DD
24、只能定義在 DATA段中。 (3)段定義 SEGMENT/ENDS ASSUME (4)過程定義 PROG/ENDP (5)模塊定義 PUBLIC EXTERN (6)宏處理 MACRO/ENDM (7)其它偽指令 41 要點 4:區(qū)別符號名與變量 PC55 EQU 282H DATA SEGMENT DATA1 DB ? DATA2 DW PC55+1 DATA ENDS MOV DX,PC55 ;大于等于 256時要用 DX間址 IN AL,DX LEA AX, PC55 ;錯 LEA DATA1+2*2 ;對 P C55 是符號名, D ATA1 是變量, 所以 OF F SET PC5
25、5 是沒有意義的 42 常用 DOS/BIOS調用 8086有四種中斷 :NMI、 INTR、異常中斷、軟中斷 INT。 DOS功能子程序調用 (INT 20HINT 27H) 其中 INT 21H稱為 DOS系統(tǒng)功能調用。 (1)鍵盤輸入并顯示 (01H號功能調用 ) (2)直接控制臺輸入 /輸出 (06H號功能調用 ) (3)顯示或打印輸出單個字符 (02H號和 05H號功能調用 ) (4)字符串輸入 (0AH號功能調用 ) (5)字符串輸出 (09H號功能調用 ) (6)終止當前進程,返回調用進程 (4CH號功能調用 ) BIOS系統(tǒng)調用 (INT 10) 43 五、 匯編程序設計方法
26、匯編程序的格式 STACK SEGMENT PARA STACK STACK DB 1024 DUP(0) STACK ENDS DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK 44 要點 1: 為什么要遵循固定格式(標準序)? ASSUME CS:CODE, DS:DATA, SS:STACK ASSUME偽指令指出各邏輯段所應該裝填的地址 , 但并沒有將段基址裝入相應的段寄存器中 。 CS是系統(tǒng)在加載程序后由操作系統(tǒng)的進程管理 程序自動完成裝填的 。 如果堆棧段定義成 STACK的話 , 當程序裝入
27、 內存時 , 系統(tǒng)會自動地把堆棧段地址和棧指針置入 SS和 SP中 , 因而不必在代碼段中裝入 SS和 SP值 。 45 程序中用戶需要加載 DS、 ES: MAIN: MOV AX,DATA MOV DS,AX ;寄存器間址方式 BX,SI,DI以 DS為段基寄存器 MOV ES,AX ;串操作時,目標串以 ES為段基寄存器 這是進行尋址的基礎: 匯編器默認以 DS的值 為段基地址進行尋址 , 找到內存中的操作數(shù) 數(shù)據(jù) 段 46 如何返回 DOS? 方法 1: MOV AH,4CH ;過程沒有申明為 FAR時返回 DOS的方法 INT 21H 方法 2: MAIN: PUSH DS XOR
28、AX,AX PUSH AX 47 子程序設計方法 使用過程 過程名 PROC NEAR/FAR RET 過程名 ENDP CALL 過程名 使用宏 宏名 MACRO 形參 ENDM 宏名 實參 使用宏并沒有減小目標文件的大小,但是比使用子程序 省時。 48 例三 .7 在內存數(shù)據(jù)段從 DATA1 開始的存儲單元中存放了 M 個字,試編一程序求其中絕對值最大的數(shù)。 MOV SI, OFFSET DATA1; MOV CX,M-1 MOV AX,SI INC SI INC SI LP1: MOV BX,SI MOV DX,AX CMP AX,0 JGE LP2 ;AX=0 NEG DX LP2: CMP BX,0 JGE LP3 NEG BX LP3: CMP DX,BX ;確保正數(shù)比較 JGE NEXT1 ;無符號數(shù)改為 JNC/JAE MOV AX,SI ;大的存入 AX NEXT1: INC SI INC SI LOOP LP1 ; AX=絕對值最大數(shù) 49 例三 .9 試編寫一匯編語言程序,要求將鍵盤輸入的小寫字 母用大寫字母顯示出來。 LOOP: MOV AH,7 INT 21H CMP AL,a JC DSP SUB AL,20H DSP: MOV DL,AL MOV AH,2 INT 21H JMP LOOP
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。