位匯編語言習題及答案(全部)(錢曉捷版).ppt
《位匯編語言習題及答案(全部)(錢曉捷版).ppt》由會員分享,可在線閱讀,更多相關《位匯編語言習題及答案(全部)(錢曉捷版).ppt(115頁珍藏版)》請在裝配圖網(wǎng)上搜索。
32位匯編語言習題解答 課件制作 錢曉捷 錢曉捷 32位匯編語言程序設計 機械工業(yè)出版社 第1章習題 匯編語言基礎 1 1簡答題 1 3 6 7 8 1 2判斷題 1 6 7 8 9 1 3填空題 3 4 5 7 10 1 9 1 13 1 15 1 16 3 1 1簡答題 1 1 哪個處理器的指令系統(tǒng)成為Intel80 x86系列處理器的基本指令集 8086 3 什么是通用寄存器 一般指處理器最常使用的整數(shù)寄存器 可用于保存整數(shù)數(shù)據(jù) 地址等 6 最高有效位MSB是指哪一位 數(shù)據(jù)的最高位 例如對8 16 32位數(shù)據(jù) MSB依次指D7 D15和D31位 4 1 1簡答題 2 7 匯編語言中的標識符與高級語言的變量和常量名的組成原則有本質的區(qū)別嗎 沒有 8 匯編語言的標識符大小寫不敏感意味著什么 表示字母大小寫不同 但表示同一個符號 5 1 2判斷題 1 EAX也被稱為累加器 因為它使用最頻繁 對 EAX中的A來自英文累加器 Accumulator 6 處理器的傳送指令MOV屬于匯編語言的執(zhí)行性語句對7 匯編語言的語句由明顯的4部分組成 不需要分隔符區(qū)別 錯 使用了分隔符才有了明顯的4部分8 MASM匯編語言的注釋用分號開始 不能用中文分號對 源程序中的分隔符以及各種標識符都是英文9 程序終止執(zhí)行也就意味著匯編結束 所以兩者含義相同 錯 兩者完全是兩個概念 6 1 3填空題 1 3 IA 32處理器有8個32位通用寄存器 其中EAX 和EDX 可以分成16位和8位操作 還有另外4個是 和 EBX ECX ESI EDI EBP ESP 4 寄存器EDX是 位的 其中低16位的名稱是 還可以分成兩個8位的寄存器 其中D0 D7和D8 D15部分可以分別用名稱 和 表示 32 DX DL DH 5 IA 32處理器有 個段寄存器 它們都是 位的 6 16 7 1 3填空題 2 7 邏輯地址由 和 兩部分組成 代碼段中下一條要執(zhí)行的指令由CS和 寄存器指示 后者在實地址模型中起作用的僅有 寄存器部分 段基地址 偏移地址 EIP IP 10 MASM要求匯編語言源程序文件的擴展名是 匯編產(chǎn)生擴展名為OBJ的文件被稱為 文件 編寫32位Windows應用程序應選擇 存儲模型 ASM 目標模塊 FLAT 8 習題1 9 IA 32處理器有哪三類基本段 各是什么用途 解答 代碼段 存放程序的指令代碼數(shù)據(jù)段 存放當前運行程序所用的數(shù)據(jù)堆棧段 主存中堆棧所在的區(qū)域 9 習題1 13 匯編語言語句有哪兩種 每種語句由哪4個部分組成解答 匯編語句有兩種執(zhí)行性語句 處理器指令 說明性語句 偽指令 每個語句有4部分組成標號指令助記符操作數(shù)或參數(shù)注釋 10 習題1 15 MASM匯編語言中 下面哪些是程序員可以使用的自定義標識符 FFH DS Again next data h ascii 6364b flat解答 FFH Again next h ascii其他符號錯誤的原因 DS是數(shù)據(jù)段寄存器名6364b是數(shù)字開頭 data是匯編語言使用預定義符號 表示數(shù)據(jù)段地址flat是表示平展存儲模型的關鍵字 11 習題1 16 匯編語言程序的開發(fā)有哪4個步驟 分別利用什么程序完成 產(chǎn)生什么輸出文件 解答 匯編語言程序的開發(fā)有4個步驟 編輯 用文本編輯器形成一個以ASM為擴展名的源程序文件 匯編 用匯編程序將ASM文件轉換為OBJ模塊文件 連接 用連接程序將一個或多個目標文件鏈接成一個EXE或COM可執(zhí)行文件 調試 用調試程序排除錯誤 生成正確的可執(zhí)行文件 第2章習題 數(shù)據(jù)表示和尋址 2 1簡答題 2 3 4 7 8 2 2判斷題 2 4 8 9 10 2 3填空題 1 2 3 8 9 2 10 2 14 2 15 2 17 13 2 1簡答題 1 2 字符 F 和數(shù)值46H作為MOV指令的源操作數(shù)有區(qū)別嗎 沒有 因為字符 F 的ASCII碼就是數(shù)值46H 3 為什么可以把指令 MOVEAX 34 67H 3 中的數(shù)值表達式看成是常量 匯編程序在匯編過程中對數(shù)值表達式計算 得到一個確定的數(shù)值 故稱數(shù)值表達式為常量 4 匯編語言為什么規(guī)定十六進制數(shù)若以A F開頭 需要在前面加個0 以便與標識符區(qū)別 因為標識符要求以字母 或特殊符號 開頭 14 2 1簡答題 2 7 為什么將查找操作數(shù)的方法稱為數(shù)據(jù)尋 址 方式 指令的操作數(shù)需要通過存儲器地址或I O地址 才能查找到數(shù)據(jù)本身 故稱數(shù)據(jù)尋址方式 8 為什么變量VAR在指令 MOVEAX VAR 中表達直接尋址 因為這里的變量名VAR實際上表達了從變量所存放的主存單元 即 地址 15 2 2判斷題 1 2 常用的BCD碼為8421BCD碼 其中的8表示D3位的權重 對 4 用 BYTE 和 DWORD 定義變量 如果初值相同 則占用的存儲空間也一樣多 錯 用BYTE只占一個存儲單元 而DWORD要占4個存儲單元 8 立即數(shù)尋址只會出現(xiàn)在源操作數(shù)中 對 16 2 2判斷題 2 9 存儲器尋址方式的操作數(shù)當然在主存了 對 10 指令 MOVEAX VAR 2 與 MOVEAX VAR 2 功能相同 對 僅是不同的形式罷了 17 2 3填空題 1 1 計算機中有一個 01100001 編碼 如果把它認為是無符號數(shù) 它是十進制數(shù) 如果認為它是BCD碼 則表示真值 又如果它是某個ASCII碼 則代表字符 97 61 小寫字母a 2 C語言用 n 表示讓光標回到下一行首位 在匯編語言中需要輸出兩個控制字符 一個是回車 其ASCII碼是 它將光標移動到當前所在行的首位 另一個是換行 其ASCII碼是 它將光標移到下一行 0DH 13 0AH 10 18 2 3填空題 2 3 定義字節(jié)變量的偽指令助記符是 獲取變量名所具有的偏移地址的操作符是 BYTE OFFSET 8 指令 MOVEAX OFFSETMSG 的目的操作數(shù)和源操作數(shù)分別采用 和 尋址方式 寄存器尋址 立即數(shù)尋址 9 已知ESI 04000H EBX 20H 指令 MOVEAX ESI EBX 2 8 中訪問的有效地址是 04000H 20H 2 8 04048H 19 習題2 10 1 按照如下要求定義變量或符號常量 1 my1b為字符串變量 PersonalComputermy1bbyte PersonalComputer 2 my2b為用十進制數(shù)表示的字節(jié)變量 20my2bbyte20 3 my3b為用十六進制數(shù)表示的字節(jié)變量 20my3bbyte14h 4 my4b為用二進制數(shù)表示的字節(jié)變量 20my4bbyte00010100b 20 習題2 10 2 按照如下要求定義變量或符號常量 5 my5w為20個未賦值的字變量my5wword20dup 6 my6c為100的常量my6c 100 7 my7c表示字符串 PersonalComputermy7cequ 21 習題2 14 按照如下輸出格式 在屏幕上顯示ASCII表編程在數(shù)據(jù)段直接構造這樣的表格 填寫相應ASCII代碼值 不是字符本身 然后使用字符串顯示子程序DISPMSG實現(xiàn)顯示 22 習題2 14解答1 datatablebyte 0123456789ABCDEF 13 10byte 13 10byte 20 20h 20h 21h 20h 22h 20h 23h 20h 24h 20h 25h 20h 26h 20h 27h 20h 28h 20h 29h 20hbyte2ah 20h 2bh 20h 2ch 20h 2dh 20h 2eh 20h 2fh 20h 13 10byte 30 30h 20h 31h 20h 32h 20h 33h 20h 34h 20h 35h 20h 36h 20h 37h 20h 38h 20h 39h 20hbyte3ah 20h 3bh 20h 3ch 20h 3dh 20h 3eh 20h 3fh 20h 13 10 byte0 23 習題2 14解答2 ca 2 cas 20hbyteca 0 cas 20h cas 1 20h cas 2 20h cas 3 20h cas 4 20h cas 5 20h cas 6 20h cas 7 20hbytecas 8 20h cas 9 20h cas 0ah 20h cas 0bh 20h cas 0ch 20h cas 0dh 20h cas 0eh 20h cas 0fh 20h 13 10cas cas 10hca ca 1byteca 0 cas 20h cas 1 20h cas 2 20h cas 3 20h cas 4 20h cas 5 20h cas 6 20h cas 7 20hbytecas 8 20h cas 9 20h cas 0ah 20h cas 0bh 20h cas 0ch 20h cas 0dh 20h cas 0eh 20h cas 0fh 20h 13 10 24 習題2 15 數(shù)據(jù)段有如下定義 vardword12345678h現(xiàn)以字節(jié)為單位按地址從低到高的順序 寫出這個變量內容 var變量的內容 78H 56H 34H 12H并說明如下指令的執(zhí)行結果 moveax var EAX 12345678Hmovbx wordptrvar BX 5678Hmovcx wordptrvar 2 CX 1234Hmovdl byteptrvar DL 78Hmovdh byteptrvar 3 DH 12H 25 習題2 17 說明源操作數(shù)的尋址方式 1 movedx 1234h立即數(shù) 2 movedx vard直接 3 movedx ebx寄存器 4 movedx ebx 寄存器間接 5 movedx ebx 1234h 寄存器相對 6 movedx vard ebx 寄存器相對 7 movedx ebx edi 基址變址 8 movedx ebx edi 1234h 相對基址變址 9 movedx vard esi edi 相對基址變址 10 movedx ebp 4 帶比例尋址 第3章習題 通用數(shù)據(jù)處理指令 3 1簡答題 1 2 5 7 9 3 2判斷題 1 4 5 7 10 3 3填空題 2 4 5 8 10 3 4 3 6 3 11 3 14 3 163 21 3 22 27 3 1簡答題 1 1 如何修改 MOVESI WORDPTR250 語句使其正確 刪除 WORDPTR 即可 2 為什么說 XCHGEDX CX 是一條錯誤的指令 源 目標寄存器位數(shù)不同 不能用該指令進行數(shù)據(jù)交換 5 執(zhí)行了一條加法指令后 發(fā)現(xiàn)ZF 1 說明結果是什么 5 表明運算結果為0 28 3 1簡答題 2 7 大小寫字母轉換使用了什么規(guī)律 大小寫字母轉換利用它們的ASCII碼相差20H 9 除法指令 DIVESI 的被除數(shù)是什么 被除數(shù)64位 在EDX和EAX中 EDX保存高32位 EAX保存低32位 29 3 2判斷題 1 1 指令 MOVEAX 0 使EAX結果為0 所以標志ZF 1 錯 MOV指令不影響標志 4 雖然ADD指令和SUB指令執(zhí)行后會影響標志狀態(tài) 但執(zhí)行前的標志并不影響它們的執(zhí)行結果 對 5 80減90 80 90 需要借位 所以執(zhí)行結束后 進位標志CF 1 對 減法時借位也用CF標志反映 30 3 2判斷題 2 7 無符號數(shù)在前面加零擴展 數(shù)值不變 有符號數(shù)前面進行符號擴展 位數(shù)加長一位 數(shù)值增加一倍 錯 符號擴展也不改變數(shù)值大小 10 SHL指令左移一位 就是乘10 錯 左移一位 相當于乘2 這里的位是二進制比特位 31 3 3填空題 1 2 指令 POPEDX 的功能也可以用MOV和ADD指令實現(xiàn) 依次應該是 和 指令 MOVEDX ESP ADDESP 4 4 進行8位二進制數(shù)加法 BAH 6CH 8位結果是 標志PF 如果進行16位二進制數(shù)加法 45BAH 786CH 16位結果是 標志PF 26H 0 BE26H 0 32 3 3填空題 2 5 已知AX 98H 執(zhí)行 NEGAX 指令后 AX 標志SF 68H 0 8 指令 XOREAX EAX 和 SUBEAX EAX 執(zhí)行后 EAX CF OF 而指令 MOVEAX 0 執(zhí)行后 EAX CF和OF沒有變化 0 0 0 10 欲將EDX內的無符號數(shù)除以16 使用指令 SHREDX 其中后一個操作數(shù)是一個立即數(shù) 4 33 習題3 4 請給每種組合各舉一個實例 1 movreg imm 2 movmem imm 3 movreg reg 4 movmem reg 5 movseg reg 6 movreg mem 7 movseg mem 8 movreg seg 9 movmem seg 34 習題3 6 使用MOV指令實現(xiàn)交換指令 XCHGEBX EDI 功能 解答 moveax ebxmovebx edi mov edi eax 35 習題3 11 1 執(zhí)行如下程序片斷 說明每條指令的執(zhí)行結果 1 moveax 80h EAX 80Haddeax 3 EAX 83H CF 0 SF 0addeax 80h EAX 103H CF 0 OF 0adceax 3 EAX 106H CF 0 ZF 0 36 習題3 11 2 執(zhí)行如下程序片斷 說明每條指令的執(zhí)行結果 2 moveax 100 EAX 100 64H addax 200 EAX 300 12CH CF 0 3 moveax 100 EAX 100 64H addal 200 EAX 44 2CH CF 1 包含256的進位含義 256 44 300 37 習題3 11 3 執(zhí)行如下程序片斷 說明每條指令的執(zhí)行結果 4 moval 7fh AL 7FHsubal 8 AL 77H CF 0 SF 0subal 80h AL F7H CF 1 OF 1sbbal 3 AL F3H CF 0 ZF 0 38 習題3 14 1 請分別用一條匯編語言指令完成如下功能 1 把EBX寄存器和EDX寄存器的內容相加 結果存入EDX寄存器 addedx ebx 2 用寄存器EBX和ESI的基址變址尋址方式把存儲器的一個字節(jié)與AL寄存器的內容相加 并把結果送到AL中 addal ebx esi 39 習題3 14 2 請分別用一條匯編語言指令完成如下功能 3 用EBX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個雙字和ECX寄存器的內容相加 并把結果送回存儲器中 add ebx 0b2h ecx 4 將32位變量VARD與數(shù)3412H相加 并把結果送回該存儲單元中 addvarw 3412h 5 把數(shù)0A0H與EAX寄存器的內容相加 并把結果送回EAX中 addeax 0a0h 40 習題3 16 1 執(zhí)行如下程序片斷 說明每條指令的執(zhí)行結果 1 movesi 10011100b ESI 9CHandesi 80h ESI 80Horesi 7fh ESI FFHxoresi 0feh ESI 01H 2 moveax 1010b EAX 1010B 可有前導0 shreax 2 EAX 0010B CF 1shleax 1 EAX 0100B CF 0andeax 3 EAX 0000B CF 0 41 習題3 16 2 執(zhí)行如下程序片斷 說明每條指令的執(zhí)行結果 3 moveax 1011b EAX 1011B 可有前導0 roleax 2 EAX 101100B CF 0rcreax 1 EAX 10110B CF 0oreax 3 EAX 10111B CF 0 4 xoreax eax EAX 0 CF 0 OF 0 ZF 1 SF 0 PF 1 42 習題3 21 如下程序片段實現(xiàn)EAX乘以某個數(shù)X的功能 請判斷X 請使用一條乘法指令實現(xiàn)上述功能 movecx eaxshleax 3leaeax eax eax 8 subeax ecx解答 8 8 8 1 71imuleax 71 43 習題3 22 請使用移位和加減法指令編寫一個程序片段計算 EAX 21 假設乘積不超過32位 提示 21 24 22 20 解答 movebx eax EBX EAX 20shlebx 2 EBX EAX 22addeax ebx EAX EAX 22 20 shlebx 2 EBX EAX 24addeax ebx EAX EAX 24 22 20 第4章習題 程序結構 4 1簡答題 2 5 6 9 10 4 2判斷題 2 4 6 7 10 4 3填空題 2 3 4 5 6 4 4 4 7 4 15 4 17 4 27 4 29 45 4 1簡答題 1 2 數(shù)據(jù)的直接尋址和指令的直接尋址有什么區(qū)別 數(shù)據(jù)的直接尋址給出數(shù)據(jù)所在的存儲器地址 指令的直接尋址給出指令所在的存儲器地址 5 什么是奇偶校驗 數(shù)據(jù)通信時 數(shù)據(jù)的某一位用做傳輸數(shù)據(jù)的奇偶校驗位 數(shù)據(jù)中包括校驗位在內的 1 的個數(shù)恒為奇數(shù) 就是奇校驗 恒為偶數(shù) 就是偶校驗 6 助記符JZ和JE為什么表達同一條指令 兩個數(shù)相減 差值為0 JZ 與兩個數(shù)相等 JE 是一個含義 46 4 1簡答題 2 9 如果循環(huán)體的代碼量遠超過128個字節(jié) 還能用LOOP指令實現(xiàn)計數(shù)控制循環(huán)嗎 不能 因為LOOP指令的目標地址采用相對短轉移 只能在 128 127字節(jié)之間循環(huán) 10 什么是 先循環(huán) 后判斷 循環(huán)結構 指先執(zhí)行循環(huán)體 然后判斷是否繼續(xù)循環(huán)的結構 這種結構通常至少執(zhí)行一次循環(huán)體 47 4 2判斷題 2 指令的相對尋址都是近轉移 對4 JMP指令對應高級語言的GOTO語句 所以不能使用錯 需要使用6 JA和JG指令的條件都是 大于 所以是同一個指令的兩個助記符 錯 JA針對無符號數(shù) JG針對有符號數(shù)7 JC和JB的條件都是CF 1 所以是同一條指令 對 無符號小于 JB 必然借位 JC 10 若ECX 0 則LOOP指令和JECX指令都發(fā)生轉移 對 48 4 3填空題 1 2 MASM給短轉移 近轉移和遠轉移定義的類型名依次是 和 SHORT NEAR FAR 3 假設在平展存儲模型下 EBX 1256H 雙字變量TABLE的偏移地址是20A1H 線性地址32F7H處存放3280H 執(zhí)行指令 JMPEBX 后EIP 執(zhí)行指令 JMPTABLE EBX 后EIP 1256H 3280H 49 4 3填空題 2 4 CMPEAX 3721H 指令之后是JZ指令 發(fā)生轉移的條件是EAX 此時ZF 3721H 1 5 執(zhí)行 SHREBX 4 指令后 JNC發(fā)生轉移 說明EBX的D3 0 6 在EDX等于0時轉移 可以使用指令 CMPEDX 也可以使用 TESTEDX 構成條件 然后使用JE指令實現(xiàn)轉移 0 EDX 50 習題4 4 已知var1 var2 var3和var4是32位無符號整數(shù) 用匯編語言程序片段實現(xiàn)如下C 語句 var4 var1 6 var2 7 var3moveax var1movebx 6mulebx var1 6movebx var2subebx 7 var2 7divebx var1 6 var2 7 addeax var3 var1 6 var2 7 var3movvar4 eax 51 習題4 7 定義COUNT 假設為10 個元素的32位數(shù)組 輸入元素編號 0 COUNT 1 利用DISPHD子程序輸出其地址 利用DISPSID子程序輸出其值 數(shù)據(jù)段count 10arraydword0 1 2 3 4 5 6 7 8 9 代碼段callreaduid 輸入N 小于10leaeax array eax 4 EAX 地址calldisphd 顯示地址moveax array eax 4 EAX 變量值calldispsid 顯示數(shù)值 52 習題4 15 1 IA 32處理器的指令CDQ將EAX符號擴展到EDX 假若沒有該指令 編程實現(xiàn)該指令功能 1 按照符號擴展的含義編程 即 EAX最高為0 則EDX 0 EAX最高為1 則EDX FFFFFFFFH testeax 8000h 測試最高位jznext1 最高位為0 轉移movedx 0ffffffffh 最高位為1 設置EDX FFFFFFFFHjmpdone 跳過另一個分支next1 movdx 0 設置EDX 0done 53 習題4 15 2 編程實現(xiàn)指令CDQ 將EAX符號擴展到EDX 2 使用移位等指令進行優(yōu)化編程 方法1 movedx eaxsaredx 31方法2 roleax 1rcredx 1saredx 31roreax 1 54 習題4 17 1 編寫一個程序 先提示輸入數(shù)字 InputNumber 0 9 然后在下一行顯示輸入的數(shù)字 結束 如果不是鍵入了0 9數(shù)字 就提示錯誤 Error 繼續(xù)等待輸入數(shù)字 方法1 使用字符輸入輸出子程序 數(shù)據(jù)段inmsgbyte Inputnumber 0 9 0ermsgbyte0dh 0ah Error Inputagain 0 代碼段moveax offsetinmsg 提示輸入數(shù)字calldispmsg 55 習題4 17 2 方法1 使用字符輸入輸出子程序again callreadc 等待按鍵cmpal 0 數(shù)字9 jaerdispcalldispcrlfcalldispcjmpdone erdisp moveax offsetermsgcalldispmsgjmpagaindone 56 習題4 17 3 方法2 使用數(shù)字輸入輸出子程序again callreaduid callreadsidcmpeax 0 數(shù)字9 jaerdisp jgerdispcalldispuid calldispsidjmpdoneerdisp moveax offsetermsgcalldispmsgjmpagain 57 習題4 27 1 習題2 14在屏幕上顯示ASCII表 現(xiàn)僅在數(shù)據(jù)段設置表格緩沖區(qū) 編程將ASCII代碼值填入留出位置的表格 然后調用顯示功能實現(xiàn) 需要利用雙重循環(huán) tablebyte 0123456789ABCDEF 13 10byte 13 10tab1byte6dup 36dup 13 10 byte0 58 習題4 27 2 movebx offsettab1movedx 02 movax 2020hmovesi 6again0 mov ebx edxaddebx 4movecx 16again1 movwordptr ebx axaddebx 2incalloopagain1 59 習題4 27 3 addebx 2addedx 1decesijnzagain0moveax offsettablecalldispmsg 60 習題4 29素數(shù)判斷程序 1 1 采用直接簡單的算法 假設輸入N 將其逐個除以2 N 1 只要能整除 余數(shù)為0 說明不是素數(shù) 只有都不能整除才是素數(shù) 1 核心程序片段如下 cmpeax 3jbedoney 小于等于3的都是素數(shù)cdqmovesi eax EDI ESI N 3movedi edxmovebx 2 EBX從2開始 61 習題4 29素數(shù)判斷程序 2 again divebxtestedx edxjzdonen 余數(shù)為0 能整除 不是素數(shù)incebxcmpebx esi EBX到N 1結束moveax esimovedx edijbagain 62 習題4 29素數(shù)判斷程序 3 2 采用只對奇數(shù)整除的算法 1 2和3是素數(shù) 所有大于3的偶數(shù)不是素數(shù) 從5開始的數(shù)字只要除以從3開始的奇數(shù) 只有都不能整除才是素數(shù) 提示 排除4的情況 從3開始除 每次循環(huán)加2movebx 3 addebx 2 第5章習題 模塊化程序設計 5 1簡答題 1 4 5 6 7 5 2判斷題 2 5 6 7 8 5 3填空題 1 4 5 6 7 5 7 5 8 5 11 5 13 64 5 1簡答題 1 1 指令 CALLEBX 采用了指令的什么尋址方式 寄存器間接尋址 4 參數(shù)傳遞的 傳值 和 傳址 有什么區(qū)別 傳值是傳遞參數(shù)的拷貝 傳址是傳遞參數(shù)的地址 5 子程序采用堆棧傳遞參數(shù) 為什么要特別注意堆棧平衡問題 子程序保持堆棧平衡才能保證正確返回主程序保持堆棧平衡 才能釋放傳遞參數(shù)占用的堆??臻g 否則多次調用該子程序可能致使堆棧溢出 65 5 1簡答題 2 6 INCLUDE語句和INCLUDELIB有什么區(qū)別 INCLUDE語句包含的是文本文件 是源程序文件的一部分 INCLUDELIB語句包含的是子程序庫文件 7 什么是子程序庫 子程序庫就是子程序模塊的集合 其中存放著各子程序的名稱 目標代碼以及有關定位信息 便于子程序的管理和調用 66 5 2判斷題 1 2 CALL指令的執(zhí)行并不影響堆棧指針ESP 錯 要改變 因為返回地址要壓入堆棧 5 子程序需要保護寄存器 包括保護傳遞入口參數(shù)和出口參數(shù)的通用寄存器 錯 不能保護傳遞出口參數(shù)的寄存器 6 利用INCLUDE包含的源文件實際上只是源程序的一部分 對 67 5 2判斷題 2 7 宏調用與子程序調用一樣都要使用CALL指令實現(xiàn) 錯 宏調用是通過宏展開實現(xiàn)的調用 不用CALL指令 8 宏定義與子程序一樣一般書寫與主程序之后 錯 宏需要先定義后調用 一般在源程序開頭部分 68 5 3填空題 1 1 指令 RETi16 的功能相當于 RET 指令和 ADDESP 組合 i16 4 數(shù)值10在計算機內部用二進制 1010 編碼表示 用十六進制表達是 如果將該編碼加37H 則為 它是字符 的ASCII碼值 A 41H A 5 利用堆棧傳遞子程序參數(shù)的方法是固定的 例如尋址堆棧段數(shù)據(jù)的寄存器是 EBP 69 5 3填空題 2 6 MASM匯編語言中 聲明一個共用的變量應使用 偽指令 而使用外部變量要使用 偽指令聲明 PUBLIC EXTERN 7 過程定義開始是 TESTPROC 語句 則過程定義結束的語句是 宏定義開始是 DISPMACRO 語句 則宏定義結束的語句是 TESTENDP ENDM 70 習題5 7 1 編寫一個源程序 在鍵盤上按一個鍵 將其返回的ASCII碼值顯示出來 如果按下退格鍵 對應ASCII碼是08H 則程序退出 請調用書中的HTOASC子程序 代碼段 主程序again callreadccmpal 08h 退格鍵BS 08Hjzdonemovbl almoval calldispc 71 習題5 7 2 moval blrolal 4callhtoasc 調用子程序calldispc 顯示一個字符moval blcallhtoasc 調用子程序calldispc 顯示一個字符calldispcrlfjmpagaindone 72 習題5 8 1 編寫一個子程序 它以二進制形式顯示EAX中32位數(shù)據(jù) 并設計一個主程序驗證 代碼段 主程序moveax 8F98FF00Hcalldispbd 調用子程序 代碼段 子程序dispbdproc 32位二進制數(shù)的輸出pushecxmovecx 32 要輸出的字符個數(shù)dbd roleax 1 AL循環(huán)左移一位 73 習題5 8 2 pusheaxandal 01h 取AL最低位addal 30h 轉化成相應的ASCLL碼值calldispc 以二進制的形式顯示popeaxloopdbdpopecxretdispbdendp 74 習題5 11 計算字節(jié)校驗和的通用過程 入口參數(shù) DS EBX 數(shù)組的段地址 偏移地址ECX 元素個數(shù) 出口參數(shù) AL 校驗和 說明 除EAX EBX ECX外 不影響其他寄存器checksumprocxoral al 累加器清0sum addal ebx 求和incebx 指向下一個字節(jié)loopsumretchecksumendp 75 習題5 13 1 利用十六進制字節(jié)顯示子程序DISPHB設計一個從低地址到高地址逐個字節(jié)顯示某個主存區(qū)域內容的子程序DISPMEM 其入口參數(shù) EAX 主存偏移地址 ECX 字節(jié)個數(shù) 主存區(qū)域的長度 同時編寫一個主程序進行驗證 數(shù)據(jù)段varbyte Thisisatest 主程序moveax offsetvarmovecx sizeofvarcalldispmem 76 習題5 13 2 子程序dispmemprocpushebxmovebx eaxdispm1 cmpecx 0jzdispm2moval ebx calldisphbmoval calldispc incebxdececxjmpdispm1dispm2 popebxretdispmemendp 第6章習題 Windows編程 6 1簡答題 3 5 6 7 6 2判斷題 1 3 4 6 3填空題 1 3 6 6 4 6 6 6 7 78 6 1簡答題 1 3 運行Windows應用程序 有時為什么會提示某個DLL文件不存在 Windows程序在運行時需要加載其配套的動態(tài)連接庫DLL文件 當其沒有被搜索到時就會提示不存在 5 ExitProcess函數(shù)可以按匯編語言習慣全部使用小寫字母表示嗎 不能 因為Windows的API函數(shù)按照C語言習慣區(qū)別大小寫字母 是不同的 79 6 1簡答題 2 6 Win32API中可以使用哪兩種字符集 8位的ASCII字符集和16位的Unicode字符集 7 為什么調用API函數(shù)之后 ECX等寄存器改變了 因為API函數(shù)并不是按照匯編語言的規(guī)則編寫的 它的規(guī)則是不保護它們 80 6 2判斷題 1 Windows可執(zhí)行文件中包含動態(tài)連接庫中的代碼 錯 不含 運行時才加載 3 INVOKE語句只能傳遞主存操作數(shù) 不能傳遞寄存器值 錯 可以使用寄存器參數(shù) 4 Windows控制臺是命令行窗口 也就是MS DOS窗口 錯 Windows控制臺與DOS窗口本質不同 81 6 3填空題 1 Windows系統(tǒng)有3個最重要的系統(tǒng)動態(tài)連接庫文件 它們是 和 KERNEL32 DLL USER32 DLL GDI32 DLL 3 獲得句柄函數(shù)GetStdHandle執(zhí)行結束 使用 提供返回結果 EAX 6 WriteConsole和ReadConsole函數(shù)的參數(shù)類似 都有5個 第1個參數(shù)是 第2個參數(shù)是輸出或輸入緩沖區(qū)的 第3個參數(shù)是輸出或輸入的字符 第4個參數(shù)指向實際輸出或輸入字符個數(shù)的變量 最后1個參數(shù)一般要求代入 句柄實例 地址 個數(shù) 0 82 習題6 4 1 執(zhí)行CPUID指令 直接使用控制臺輸出函數(shù)將處理器識別字符串顯示出來 686 modelflat stdcalloptioncasemap noneincludelibbin kernel32 libExitProcessproto dword 83 習題6 4 2 GetStdHandleproto dwordWriteConsoleA proto dword dword dword dword dwordWriteConsoleequSTD OUTPUT HANDLE 11 dataouthandledword outbufferbyte Theprocessor 12dup 0 outbufsize sizeofoutbufferoutsizedword 84 習題6 4 3 moveax 0cpuid 執(zhí)行處理器識別指令movdwordptroutbuffer outbufsize 12 ebxmovdwordptroutbuffer outbufsize 8 edxmovdwordptroutbuffer outbufsize 4 ecxinvokeGetStdHandle STD OUTPUT HANDLEmovouthandle eaxinvokeWriteConsole outhandle addroutbuffer outbufsize addroutsize 0invokeExitProcess 0 85 習題6 6 1 直接使用控制臺輸出函數(shù)實現(xiàn)主存區(qū)域內容的顯示顯示形式每行顯示16個字節(jié) 128位 每行開始先顯示首個主存單元的偏移地址然后用冒號分隔主存內容 86 習題6 6 2 datavarbyte Thisisatest ABCDEFG 0123456789 outsizedword outhandledword membufferbyte57dup 20h 13 10 codestart moveax offsetvarmovecx sizeofvarcalldispmeminvokeExitProcess 0 87 習題6 6 3 dispmemproctestecx ecx 個數(shù)為0 不顯示jzdispm11 退出pushadmovesi ecx ESI 要顯示內容的字節(jié)數(shù)movedi eax EDI 要顯示內容的地址invokeGetStdHandle STD OUTPUT HANDLEmov outhandle eax 獲得輸出句柄 88 習題6 6 4 1 顯示緩沖區(qū)全部填充為空格dispm1 xorebx ebx 指示顯示緩沖區(qū)dispm2 mov membuffer ebx incebxcmpebx sizeof membuffer 2jbdispm2 2 顯示內容所在的存儲器地址xorebx ebxmovecx 8 地址是十六進制8位moveax edi 89 習題6 6 5 dispm3 roleax 4movdl alanddl 0fhordl 30hcmpdl 39hjbedispm4adddl 7dispm4 mov membuffer ebx dlincebxloopdispm3mov membuffer ebx 顯示冒號addebx 2 90 習題6 6 6 movecx 16 一行最多顯示16個字節(jié) 3 顯示一個字節(jié)內容dispm5 moval edi movdl alshrdl 4ordl 30hcmpdl 39hjbedispm6adddl 7dispm6 mov membuffer ebx dlincebx 91 習題6 6 7 andal 0fhoral 30hcmpal 39hjbedispm7addal 7dispm7 mov membuffer ebx aladdebx 2incedi 指向下一個要顯示的字節(jié)decesijzdispm10 沒有要顯示的內容 退出loopdispm5 92 習題6 6 8 invokeWriteConsole outhandle addr membuffer sizeof membuffer addr outsize 0jmpdispm1dispm10 invokeWriteConsole outhandle addr membuffer sizeof membuffer addr outsize 0popaddispm11 retdispmemendp 93 習題6 7 1 執(zhí)行CPUID指令 在消息窗口顯示處理器識別字符串 要求該消息窗有OK和Cancel兩個按鈕 MessageBoxAproto dword dword dword dwordMessageBoxequNULLequ0MB OKequ1 dataszCaptionbyte 消息窗口 0outbufferbyte 本機的處理器是 12dup 0 0outbufsize sizeofoutbuffer 1 94 習題6 7 2 codestart moveax 0cpuid 執(zhí)行處理器識別指令movdwordptroutbuffer outbufsize 12 ebxmovdwordptroutbuffer outbufsize 8 edxmovdwordptroutbuffer outbufsize 4 ecxinvokeMessageBox NULL addroutbuffer addrszCaption MB OKinvokeExitProcess NULLendstart 第7章習題 與VisualC 的混合編程 7 1簡答題 1 3 5 6 7 2判斷題 5 6 7 7 3填空題 1 4 5 7 4 7 6 96 7 1簡答題 1 什么是混合編程 組合多種程序設計語言 通過相互調用 參數(shù)傳遞 共享數(shù)據(jù)結構和數(shù)據(jù)信息而形成程序的過程 3 匯編語言與C 語言的混合編程有哪兩種方法 嵌入?yún)R編和模塊連接 5 C 語言函數(shù)通過什么方式傳遞入口參數(shù) 堆棧 6 堆棧幀是一個什么作用的堆??臻g 用于傳遞參數(shù) 保存返回地址 局部變量 保護寄存器 97 7 2判斷題 5 MASM匯編語言的C語言類型對應C 語言的 cdecl 對 6 局部變量是通過堆棧創(chuàng)建的 對 7 使用寄存器替代頻繁訪問的變量 可以提升程序性能 對 因為減少了相對耗時的存儲器訪問操作 98 7 3填空題 1 有一個數(shù)據(jù)100 要在嵌入?yún)R編指令中作為立即數(shù) 且用十六進制形式表達 可以像匯編語言中一樣表達為 也可以像C 語言一樣表達為 64H 0 x64 4 函數(shù)調用中 通常通過EBP指向堆棧幀 其值減 訪問第一個局部變量 其值加 訪問第一個入口參數(shù) 返回地址則由其值加 指向 4 8 4 5 C 函數(shù)返回一個32位整數(shù) 返回值使用 保存 EAX 99 習題7 4 閱讀如下嵌入?yún)R編的C 程序 說明顯示結果 includeintpower2 int int voidmain void cout power2 5 6 endl intpower2 intnum intpower asm moveax nummovecx powershleax cl 320 100 習題7 6 1 如下C 程序中調用匯編語言子程序對這兩個數(shù)求積編寫匯編語言子程序模塊 includeextern C intmulti intx inty voidmain void intx y cin x cin y cout multi x y endl 101 習題7 6 2 解答 686 modelflat c codemultiproc var1 dword var2 dwordmoveax var1imulvar2retmultiendpend 第8章習題 DOS環(huán)境的程序設計 8 1簡答題 1 2 4 8 2判斷題 2 4 6 7 8 3填空題 1 2 7 8 6 8 14 103 8 1簡答題 1 實地址方式的段基地址為什么常只給出高16位 在20位物理地址中 段起始地址的低4位規(guī)定必須是0 2 實地址存儲模型下 邏輯地址如何轉換為物理地址 高16位段地址左移4位加偏移地址 4 80 x86處理器的MOV指令支持外設數(shù)據(jù)傳送嗎 不支持 外設數(shù)據(jù)傳送使用IN和OUT指令 104 8 2判斷題 2 8086中 MOV AX BX 是非法指令 對 8086不支持使用AX進行寄存器間接尋址 4 DOS程序和Windows程序一樣使用同一個退出函數(shù) 功能 實現(xiàn)退出 錯 6 指令 OUTDX AX 的兩個操作數(shù)均采用寄存器尋址方式 一個來自處理器 一個來自外設 錯 OUT指令的DX表示采用寄存器間接尋址I O地址 7 指令 INBX 20H 正確 表示從20H端口輸入一個數(shù)據(jù) 存放到BX寄存器 錯 指令 INAX 20H 才是正確的 105 8 3填空題 1 DOS平臺下使用實地址存儲模型 只能訪問 存儲空間 仍進行分段管理 但每段不大于 容量 且起始物理地址的低4位必須是 1MB 64KB 0000 2 在實地址工作方式下 邏輯地址 7380H 400H 表示的物理地址是 并且該段起始于 物理地址 73C00H 73800H 7 IA 32處理器支持4GB主存 具有 個8位外設端口 在IN和OUT指令中使用 寄存器可以訪問到全部端口 64K DX 106 習題8 6 使用DOS系統(tǒng)功能編寫DOS應用程序 要求如下 提示 PressESCtoExit 等待用戶輸入字符 如果用戶按下ESC 其ASCII碼是1BH 則退出 否則繼續(xù)等待輸入字符 解答 在例8 2程序中 顯示信息之后 加入如下按鍵及判斷的程序片段即可 again movah 1 等待按鍵int21hcmpal 1bhjnzagain 107 習題8 14 1 利用CMOSRAM的系統(tǒng)時間 將年月日時分秒星期等時間完整的顯示出來 解答 參考例8 7程序難點是星期的顯示 可以利用地址表方法如下實現(xiàn) dataweek1byte Sunday 0week2byte Monday 0 week7byte Saturday 0weekwordweek1 week2 week3 week7 108 習題8 14 2 moval 6 AL 6 從6號單元獲取星期數(shù)據(jù) out70h alinal 71hdecalshlal 1xorah ah 查表獲得星期字符串movbx offsetweekaddbx axmovax bx calldispmsg 顯示星期 第9章習題 浮點 多媒體及64位指令 9 1簡答題 1 5 7 9 2判斷題 1 2 3 9 3填空題 1 2 3 9 4 9 5 9 6 110 9 1簡答題 1 浮點數(shù)據(jù)為什么要采用規(guī)格化形式 浮點數(shù)據(jù)采用規(guī)格化形式可以表達更大 更精確的數(shù)據(jù) 也避免編碼的多樣性 5 為什么浮點數(shù)據(jù)編碼有舍入問題 而整數(shù)編碼卻沒有 浮點數(shù)據(jù)編碼無法表達任意精度的數(shù)據(jù) 所以需要舍入 但整數(shù)編碼表達的數(shù)據(jù)都是精確的數(shù)據(jù) 7 多媒體指令為什么常被稱為SIMD指令 多媒體指令的一個突出特點是一條指令同時處理多組數(shù)據(jù) 即單指令多數(shù)據(jù)SIMD 111 9 2判斷題 1 浮點數(shù)據(jù)格式不能表達整數(shù) 錯 當然可以 整數(shù)可以認為是小數(shù)部分為0的實數(shù) 2 一個32位數(shù)據(jù)是全0 不管它是整數(shù)編碼還是單精度浮點編碼 都表示真值0 對 3 x87FPU有8個80位浮點數(shù)據(jù)寄存器 可以隨機存取 錯 采用堆棧結構 不是隨機存取 112 9 3填空題 1 對真值 125 用補碼表示是 標準偏移碼與補碼只有一位不同 所以是 而浮點階碼則再減1 是 10000011 000000011 00000010 2 單精度浮點數(shù)據(jù)格式共有 位 其中符號位占一位 階碼部分占 位 尾數(shù)部分有 位 32 8 23 3 通過例9 2知道實數(shù) 100 25 的浮點格式編碼是42C88000H 則 100 25 的浮點格式編碼是 C2C88000H 113 習題9 4 單精度規(guī)格化浮點數(shù)BF600000H表達的實數(shù)是什么 BF600000H 10111111011000000000000000000000B 10111111011000000000000000000000B符號位為1 表示負數(shù)指數(shù)編碼是01111110 表示指數(shù) 126 127 1有效數(shù)字部分是11000000000000000000000表示有效數(shù) 1 11B 1 75這個實數(shù)為 1 75 2 1 1 75 0 5 0 875 114 習題9 5 真值28 75用單精度規(guī)格化浮點數(shù)據(jù)格式表達的編碼28 75 00011100 11B 1 110011B 24于是 符號位 0指數(shù)部分是48位階碼為10000011 4 127 131 有效數(shù)字部分是11001100000000000000000這樣 28 75表示成單精度浮點數(shù)為 01000001111001100000000000000000B 01000001111001100000000000000000B 41E60000H 115 習題9 6 編程顯示單精度浮點數(shù)據(jù)的編碼 十六進制形式 例如用于驗證上一個習題結果 實數(shù)可以定義在數(shù)據(jù)段中 解答 數(shù)據(jù)段f32dreal428 75 單精度浮點數(shù) 代碼段moveax dwordptrf32d 取浮點格式編碼calldisphd- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 匯編語言 習題 答案 全部 錢曉捷版
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://kudomayuko.com/p-6319722.html