




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第1章 微型計算機系統習題1.1簡答題(2)總線信號分成哪三組信號?(3)PC機主存采用DRAM組成還是SRAM組成?(5)ROM-BIOS是什么?(6)中斷是什么?(9)處理器的“取指譯碼執行周期”是指什么?解答 總線信號分成三組,分別是數據總線、地址總線和控制總線。 PC機主存采用DRAM組成。 ROM-BIOS是“基本輸入輸出系統”,操作系統通過對BIOS的調用驅動各硬件設備,用戶也可以在應用程序中調用BIOS中的許多功能。 中斷是CPU正常執行程序的流程被某種原因打斷、并暫時停止,轉向執行事先安排好的一段處理程序,待該處理程序結束后仍返回被中斷的指令繼續執行的過程。 指令的處理過程。
2、處理器的“取指譯碼執行周期” 是指處理器從主存儲器讀取指令(簡稱取指),翻譯指令代碼的功能(簡稱譯碼),然后執行指令所規定的操作(簡稱執行)的過程。習題1.3填空題(2)Intel 8086支持_容量主存空間,80486支持_容量主存空間。(3)二進制16位共有_個編碼組合,如果一位對應處理器一個地址信號,16位地址信號共能尋址_容量主存空間。(9)最初由 公司采用Intel 8088處理器和( )操作系統推出PC機。 1MB,4GB 216,64KB (9)IBM,DOS習題1.4說明微型計算機系統的硬件組成及各部分作用。解答CPU:CPU也稱處理器,是微機的核心。它采用大規模集成電路芯片,
3、芯片內集成了控制器、運算器和若干高速存儲單元(即寄存器)。處理器及其支持電路構成了微機系統的控制中心,對系統的各個部件進行統一的協調和控制。存儲器:存儲器是存放程序和數據的部件。外部設備:外部設備是指可與微機進行交互的輸入(Input)設備和輸出(Output)設備,也稱I/O設備。I/O設備通過I/O接口與主機連接??偩€:互連各個部件的共用通道,主要含數據總線、地址總線和控制總線信號。習題1.7區別如下概念:助記符、匯編語言、匯編語言程序和匯編程序。解答助記符:人們采用便于記憶、并能描述指令功能的符號來表示機器指令操作碼,該符號稱為指令助記符。匯編語言:用助記符表示的指令以及使用它們編寫程序
4、的規則就形成匯編語言。匯編語言程序:用匯編語言書寫的程序就是匯編語言程序,或稱匯編語言源程序。匯編程序:匯編語言源程序要翻譯成機器語言程序才可以由處理器執行。這個翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序(Assembler)。第2章 處理器結構習題2.1簡答題(1)ALU是什么?(2)8086的取指為什么可以被稱為指令預???(4)堆棧的存取原則是什么?(5)標志寄存器主要保存哪方面的信息?(6)執行了一條加法指令后,發現ZF1,說明結果是什么?(9)匯編語言源程序文件中,END語句后的語句會被匯編嗎?解答 ALU是算術邏輯運算單元,負責處理器所能進行的各種運算,主要是算術運算和邏
5、輯運算。 取指是指從主存取出指令代碼通過總線傳輸到處理器內部指令寄存器的過程。8086分成總線接口單元和指令執行單元,可以獨立操作。在執行單元執行一條指令的同時,總線接口單元可以讀取下一條指令,等到執行時不需要進行取指了,所以稱為預取。 堆棧的存取原則是先進后出(也稱為后進先出)操作方式存取數據。 標志寄存器主要保存反映指令執行結果和控制指令執行形式的有關狀態。 執行了一條加法指令后,發現ZF1,表明運算結果為0。 不會。習題2.3填空題(3)邏輯地址由_和_兩部分組成。代碼段中下一條要執行的指令由CS和_寄存器指示,后者在實地址模型中起作用的僅有_寄存器部分。(4)進行8位二進制數加法:10
6、11101001101100,8位結果是_,標志PF_。(5)在實地址工作方式下,邏輯地址“7380H400H”表示的物理地址是_,并且該段起始于_物理地址。(9)除外設數據外的數據尋址方式有3類,分別被稱為_、_和_。解答 段地址,偏移地址,EIP,IP 00100110,0 73C00H,73800H 立即數尋址、寄存器尋址和存儲器尋址習題2.4處理器內部具有哪3個基本部分?8086分為哪兩大功能部件?其各自的主要功能是什么?解答處理器內部有ALU、寄存器和指令處理三個基本單元。8086有兩大功能部件:總線接口單元和執行單元。總線接口單元:管理著8086與系統總線的接口,負責處理器對存儲器
7、和外設進行訪問。8086所有對外操作必須通過BIU和這些總線進行。執行單元EU:負責指令譯碼、數據運算和指令執行。習題2.58086怎樣實現了最簡單的指令流水線?解答8086中,指令的讀取是在BIU單元,而指令的執行是在EU單元。因為BIU和EU兩個單元相互獨立、分別完成各自操作,所以可以并行操作。也就是說,在EU單元對一個指令進行譯碼執行時,BIU單元可以同時對后續指令進行讀取;這就是最簡單的指令流水線技術。習題2.8什么是8086中的邏輯地址和物理地址?邏輯地址如何轉換成物理地址?請將如下邏輯地址用物理地址表達(均為十六進制形式): FFFF0 4017 20004500 B8214567
8、解答物理地址:在處理器地址總線上輸出的地址稱為物理地址。每個存儲單元有一個唯一的物理地址。邏輯地址:在處理器內部、程序員編程時采用邏輯地址,采用“段地址:偏移地址“形式。某個存儲單元可以有多個邏輯地址,即處于不同起點的邏輯段中,但其物理地址是唯一的。邏輯地址轉換成物理地址:邏輯地址由處理器在輸出之前轉換為物理地址。將邏輯地址中的段地址左移二進制4位(對應16進制是一位,即乘以16),加上偏移地址就得到20位物理地址。 FFFFH:0FFFF0H 40H:17H00417H 2000H:4500H24500H B821H:4567HBC777H習題2.12匯編語句有哪兩種,每個語句由哪4個部分組
9、成?解答匯編語句有兩種:執行性語句(處理器指令)、說明性語句(偽指令)。每個語句有:標號、指令助記符、操作數或參數、注釋4個部分組成。習題2.16說明下列指令中源操作數的尋址方式?假設VARD是一個雙字變量。(1)mov edx,1234h(2)mov edx,vard(3)mov edx,ebx(4)mov edx,ebx(5)mov edx,ebx+1234h(6)mov edx,vardebx(7)mov edx,ebx+edi(8)mov edx,ebx+edi+1234h(9)mov edx,vardesi+edi(10)mov edx,ebp*4解答 立即數 直接 寄存器 寄存器間
10、接 寄存器相對 寄存器相對 基址變址 相對基址變址 相對基址變址 帶比例尋址第3章 數據處理習題3.1簡答題(1)使用二進制8位表達無符號整數,257有對應的編碼嗎?(2)字符“'F'”和數值46H作為MOV指令的源操作數有區別嗎?(3)為什么可以把指令“MOV AX, (3467H)*3”中的數值表達式看成是常量?(4)數值500,能夠作為字節變量的初值嗎?(6)都是獲取偏移地址,為什么指令“LEA EBX, ESI”正確,而指令“MOV EBX, OFFSETESI”就錯誤?(7)INC,DEC,NEG和NOT都是單操作數指令,這個操作數應該是源操作數還是目的操作數?(9)
11、乘除法運算針對無符號數和有符號數,有兩種不同的指令。只有一種指令的加減法如何區別無符號數和有符號數運算?(10)邏輯與運算為什么也稱為邏輯乘?解答 沒有。使用二進制8位表達無符號整數,257沒有對應的編碼。 字符“'F'”的ASCII碼就是數值46H,所以沒有區別。 匯編程序在匯編過程中對數值表達式計算,得到一個確定的數值,故稱數值表達式為常量。 不能。數值500大于一個字節所能表達的數據量,所以不能為字節變量賦值。 前者在指令執行時獲得偏移地址,是正確的;但后者的OFFSET只能在匯編階段獲得偏移地址,但此時寄存器內容是不可知的,所以無法獲得偏移地址。 INC,DEC,NEG
12、和NOT指令的操作數既是源操作數也是目的操作數。 加減法不區別無符號數和有符號數,但根據運算結果分別設置標志寄存器的CF和OF標志,可利用CF和OF進行區別。 邏輯與運算規則類似二進制的乘法,所以稱其為邏輯乘。習題3.3填空題(1)定義字節變量的偽指令助記符是_,獲取變量名所具有的偏移地址的操作符是_。(2)計算機中有一個“01100001”編碼。如果把它認為是無符號數,它是10進制數_;如果認為它是BCD碼,則表示真值_;又如果它是某個ASCII碼,則代表字符_。(3)C語言用“n”表示讓光標回到下一行首位,在匯編語言中需要輸出兩個控制字符:一個是回車,其ASCII碼是_,它將光標移動到當前
13、所在行的首位;另一個是換行,其ASCII碼是_,它將光標移到下一行。(4)數據段有語句“H8843 DWORD 99008843H”,代碼段指令“MOV CX, WORD PTR H8843”執行后,CX_。(5)用DWORD定義的一個變量XYZ,它的類型是_,用“TYPE XYZ”會得到數值為_。如果將其以字量使用,應該用_說明。(6)數據段有語句“ABC BYTE 1,2,3”,代碼段指令“MOV CL, ABC+2”執行后,CL_。解答 BYTE,OFFSET 97,61,小寫字母a 0DH(13),0AH(10) 8843H DWORD,4,WORD PTR XYZ 3習題3.4下列十
14、六進制數表示無符號整數,請轉換為十進制形式的真值: FFH 0H 5EH EFH解答 255 0 94 239習題3.5將下列十進制數真值轉換為壓縮BCD碼: 12 24 68 99解答 12H 24H 68H 99H習題3.6將下列壓縮BCD碼轉換為十進制數: 10010001 10001001 00110110 10010000解答 91 89 36 90習題3.7將下列十進制數用8位二進制補碼表示: 0 127 127 57解答 00000000 01111111 10000001 11000111習題3.8進行十六進制數據的加減運算,并說明是否有進位或借位: 1234H7802H F0
15、34H5AB0H C051H1234H 9876HABCDH解答 1234H7802H8A36H,無進位 F034H5AB0H4AF4H,有進位 C051H1234HBE1DH,無借位 9876HABCDHECA9H,有借位習題3.10設置一個數據段,按照如下要求定義變量或符號常量: my1b為字符串變量:Personal Computer my2b為用十進制數表示的字節變量:20 my3b為用十六進制數表示的字節變量:20 my4b為用二進制數表示的字節變量:20 my5w為20個未賦值的字變量 my6c為100的常量 my7c表示字符串:Personal Computer解答my1bbyt
16、e 'Personal Computer'my2bbyte 20my3bbyte 14hmy4bbyte 00010100bmy5wword 20 dup(?)my6c= 100my7cequ <Personal Computer>習題3.11定義常量NUM,其值為5;數據段中定義字數組變量DATALIST,它的頭5個字單元中依次存放-10,2,5和4,最后1個單元初值不定。解答numequ 5datalistbyte -10,2,5,4,?習題3.12從低地址開始以字節為單位,用十六進制形式給出下列語句依次分配的數值:byte 'ABC',10,1
17、0h,'EF',3 dup(-1,?,3 dup(4)word 10h,-5,3 dup(?)解答41 42 43 0A 10 45 46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 0410 00 FB FF 00 00 00 00 00 00習題3.19請分別用一條匯編語言指令完成如下功能:(去E)(1)把EBX寄存器和EDX寄存器的內容相加,結果存入EDX寄存器。(2)用寄存器EBX和ESI的基址變址尋址方式把存儲器的一個字節與AL寄存器的內容相加,并把結果送到AL中。(3)用EBX和位移量0B2H的寄存器相對尋址方式把存儲器中的一
18、個雙字和ECX寄存器的內容相加,并把結果送回存儲器中。(4)將32位變量VARD與數3412H相加,并把結果送回該存儲單元中。(5)把數0A0H與EAX寄存器的內容相加,并把結果送回EAX中。解答 add edx,ebx add al,ebx+esi add bx+0b2h,cx add varw,3412h add eax,0a0h習題3.20分別執行如下程序片斷,說明每條指令的執行結果:(去E)(1)mov eax,80h; EAX_add eax,3; EAX_,CF_,SF_add eax,80h; EAX_,CF_,OF_adc eax,3; EAX_,CF_,ZF_(2)mov e
19、ax,100; EAX_add ax,200; EAX_,CF_(3)mov eax,100; EAX_add al,200; EAX_,CF_(4)mov al,7fh; AL_sub al,8; AL_,CF_,SF_sub al,80h; AL_,CF_,OF_sbb al,3; AL_,CF_,ZF_解答(1); EAX80H; EAX83H,CF0,SF0; EAX103H,CF0,OF0; EAX106H,CF0,ZF0(2); EAX100; EAX300,CF0(3); EAX100; EAX44,CF1(包含256的進位含義:25644300)(4)mov al,7fh; A
20、L7FHsub al,8; AL77H,CF0,SF0sub al,80h; ALF7H,CF1,OF1sbb al,3; ALF3H,CF0,ZF0習題3.21(推敲)給出下列各條指令執行后AL值,以及CF、ZF、SF、OF和PF的狀態:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al解答mov al,89h; AL89HCF ZFSFOFPFadd al,al; AL12H1 0011add al,9dh; AL0AFH0 0101cmp al,0bch; AL0AFH1 0101sub al,al; AL00H0
21、1001dec al; AL0FFH0 0101inc al; AL00H0 1001習題3.22有兩個64位無符號整數存放在變量buffer1和buffer2中,定義數據、編寫代碼完成EDX.EAXbuffer1buffer2功能。(去E)解答; 數據段buffer1qword 67883000hbuffer2qword 67762000h; 代碼段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4習題3.23分別執行如下程序片斷,說明
22、每條指令的執行結果:(去E)(1)mov esi,10011100b; ESI_Hand esi,80h; ESI_Hor esi,7fh; ESI_Hxor esi,0feh; ESI_H(2)mov eax,1010b; EAX_Bshr eax,2; EAX_B,CF_shl eax,1; EAX_B,CF_and eax,3; EAX_B,CF_(3)mov eax,1011b; EAX_Brol eax,2; EAX_B,CF_rcr eax,1; EAX_B,CF_or eax,3; EAX_B,CF_(4)xor eax,eax; EAX_,CF_,OF_; ZF_,SF_,PF
23、_解答(1); ESI9CH; ESI80H; ESIFFH; ESI01H(2); EAX1010B(可以有前導0,下同); EAX0010B,CF1; EAX0100B,CF0; EAX0000B,CF0(3); EAX1011B(可以有前導0,下同); EAX101100B,CF0; EAX10110B,CF0; EAX10111B,CF0(4); EAX0,CF0,OF0; ZF1,SF0,PF1習題3.243.24 給出下列各條指令執行后AX的結果,以及狀態標志CF、OF、SF、ZF、PF的狀態。mov ax,1470hand ax,axor ax,axxor ax,axnot ax
24、test ax,0f0f0h解答mov ax,1470h; AX1470HCF OFSFZFPFand ax,ax; AX1470H0 0000or ax,ax; AX1470H0 0000xor ax,ax; AX0000H0 0011not ax; AXFFFFH0 0011test ax,0f0f0h; AX0F0F0H0 0101習題3.25邏輯運算指令怎么實現復位、置位和求反功能?解答AND指令同“0”與實現復位,OR指令同“1”或實現置位,XOR同“1”異或實現求反。習題3.27(去E)編程將一個64位數據邏輯左移3位,假設這個數據已經保存在EDX.EAX寄存器對中。解答; 代碼段
25、mov ecx,3again:shl eax,1rcl edx,1loop again習題3.28編程將一個壓縮BCD碼變量(例如92H)轉換為對應的ASCII碼,然后調用DISPC子程序(在輸入輸出子程序庫中)顯示。解答; 數據段bcdbyte 92h; 代碼段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc習題3.31下面程序的功能是將數組ARRAY1的每個元素加固定值(8000H),將和保存在數組ARRAY2。在空白處填入適當的語句或語句的一部分。; 數據段array1dword
26、1,2,3,4,5,6,7,8,9,10array2dword 10 dup(?); 代碼段mov ecx,lengthof array1mov ebx,0again:mov eax,array1ebx*4add eax,8000hmov _add ebx,_loop again解答mov array2ebx*4,eaxadd ebx,1第4章 匯編語言程序設計習題4.1簡答題(3)為什么判斷無符號數大小和有符號大小的條件轉移指令不同?(4)雙分支結構中兩個分支體之間的JMP指令有什么作用?(5)為什么特別強調為子程序加上必要的注釋?(6)子程序采用堆棧傳遞參數,為什么要特別注意堆棧平衡問題?
27、(7)參數傳遞的“傳值”和“傳址”有什么區別?(8)INCLUDE語句和INCLUDELIB有什么區別? 解答 無符號數和有符號數的操作影響兩組不同的標志狀態位,故判斷兩個無符號數和有符號數的大小關系要利用不同的標志位組合,所以有對應的兩組指令。 雙分支結構中兩個分支體之間的JMP指令,用于實現結束前一個分支回到共同的出口作用。 完整的子程序注釋可方便程序員調用該子程序,子程序注釋包括子程序名、子程序功能、入口參數和出口參數、調用注意事項和其他說明等。 子程序保持堆棧平衡,才能保證執行RET指令時當前棧頂的內容是正確的返回地址。主程序也要保持堆棧平衡,這樣才能釋放傳遞參數占用的堆棧空間,否則多
28、次調用該子程序可能就致使堆棧溢出。 “傳值”是傳遞參數的一個拷貝,被調用程序改變這個參數不影響調用程序;“傳址”時,被調用程序可能修改通過地址引用的變量內容。 INCLUDE語句包含的是文本文件、是源程序文件的一部分;INCLUDELIB語句包含的是子程序庫文件。習題4.3填空題(1)JMP指令根據目標地址的轉移范圍和尋址方式,可以分成四種類型:段內轉移、_,段內轉移、_和段間轉移、_,段間轉移、_。(2)假設在平展存儲模型下,EBX1256H,雙字變量TABLE的偏移地址是20A1H,線性地址32F7H處存放3280H,執行指令“JMP EBX” 后EIP_,執行指令“JMP TABLEEB
29、X”后EIP_。 (3)“CMP EAX,3721H”指令之后是JZ指令,發生轉移的條件是EAX_,此時ZF_。(去E)(5)循環結構程序一般有三個部分組成,它們是_,循環體和_部分。(7)過程定義開始是“TEST PROC”語句,則過程定義結束的語句是_。宏定義開始是“DISP MACRO”語句,則宏定義結束的語句是_。(8)利用堆棧傳遞子程序參數的方法是固定的,例如尋址堆棧段數據的寄存器是_。(9)MASM匯編語言中,聲明一個共用的變量應使用_偽指令;而使用外部變量要使用_偽指令聲明。解答 相對尋址,間接尋址,直接尋址,間接尋址 1256H,3280H 3721H,1 循環初始,循環控制
30、TEST ENDP,ENDM EBP PUBLIC,EXTERN習題4.6執行如下程序片斷后,CMP指令分別使得5個狀態標志CF、ZF、SF、OF和PF為0還是為1?它會使得哪些條件轉移指令指令Jcc的條件成立、發生轉移?mov eax,20hcmp eax,80h解答CF1 ZF0 SF1 OF0 PF1可以使得條件成立、發生轉移的指令有:JC JS JP JNZ JNO習題4.8在采用奇偶校驗傳輸數據的接收端應該驗證數據傳輸的正確性。例如,如果采用偶校驗,那么在接收到的數據中,其包含“1”的個數應該為0或偶數個,否則說明出現傳輸錯誤。現在,在接收端編寫一個這樣的程序,如果偶校驗不正確顯示錯
31、誤信息,傳輸正確則繼續。假設傳送字節數據、最高位作為校驗位,接收到的數據已經保存在Rdata變量中。解答; 數據段Rdatabyte 57h;保存接收的數據errorbyte 'Error !',0; 代碼段mov al,Rdataand al,0ffh;標志PF反映“1”的個數jp done;個數為偶數,正確繼續mov eax,offset error;個數為奇數,顯示出錯call dispmsgdone:習題4.10編程,首先測試雙字變量DVAR的最高位,如果為1,則顯示字母“L”;如果最高位不為1,則繼續測試最低位,如果最低位為1,則顯示字母“R”;如果最低位也不為1,則
32、顯示字母“M”。解答; 數據段dvardword 57h; 代碼段mov eax,dvartest eax,80000000hjnz nextltest eax,1jnz nextrmov al,'M'jmp donenextl:mov al,'L'jmp donenextr:mov al,'R'done:call dispc習題4.11編寫一個程序,先提示輸入數字“Input Number:09”,然后在下一行顯示輸入的數字,結束;如果不是鍵入了09數字,就提示錯誤“Error!”,繼續等待輸入數字。解答; 數據段inmsgbyte '
33、Input number(09): ',0ermsgbyte 0dh,0ah,'Error! Input again: ',0; 代碼段mov eax,offset inmsg; 提示輸入數字call dispmsgagain:call readc; 等待按鍵cmp al,'0' 數字 < 0?jb erdispcmp al,'9' 數字 > 9?ja erdispcall dispcrlfcall dispcjmp doneerdisp:mov eax,offset ermsgcall dispmsgjmp againdon
34、e:習題4.12有一個首地址為ARRAY的20個雙字的數組,說明下列程序段的功能。mov ecx,20mov eax,0mov esi,eaxsumlp:add eax,arrayesiadd esi,4loop sumlpmov total,eax解答求這20個雙字的和,保存在TOTAL變量,不關進心進位和溢出。習題4.13編程中經常要記錄某個字符出現的次數。現編程記錄某個字符串中空格出現的次數,結果保存在SPACE單元。解答; 數據段stringbyte 'Do you have fun with Assembly ?',0;以0結尾的字符串spacedword ?; 代碼
35、段mov esi,offset stringxor ebx,ebx;EBX用于記錄空格數again:mov al,esicmp al,0jz donecmp al,20h;空格的ASCII碼是20Hjne next;不相等、不是空格,轉移inc bx;相等、是空格,空格個數加1next:inc esijmp again;繼續循環done:mov space,ebx;保存結果習題4.14編寫計算100個16位正整數之和的程序。如果和不超過16位字的范圍(65535),則保存其和到WORDSUM,如超過則顯示Overflow !。解答; 數據段arrayword 2005,2008,98 dup
36、(1394); 假設100個16位正整數wordsumword ?errorbyte 'Overflow !',0; 代碼段and ebx,0mov ecx,100xor ax,axagain:add ax,arrayebx*2jc overinc ebxloop againmov wordsum,axover:mov eax,offset errorcall dispmsg習題4.15在一個已知長度的字符串中查找是否包含“BUG”子字符串。如果存在,顯示“Y”,否則顯示“N”。解答; 數據段stringbyte 'If you find any error in th
37、e program, you can DEBUG it.'count= sizeof stringbugbyte 'BUG' 代碼段mov ecx,countmov edi,offset stringL1:mov esi,offset bugpush edimov edx,sizeof bugLN:mov al,esicmp edi,aljne L2inc esiinc edidec edxjne LNpop edimov al,'Y'jmp L3L2:pop ediinc ediloop L1mov al,'N'L3:call disp
38、c習題4.16主存中有一個8位壓縮BCD碼數據,保存在一個雙字變量中?,F在需要進行顯示,但要求不顯示前導0。由于位數較多,需要利用循環實現,但如何處理前導0和數據中間的0呢?不妨設置一個標記。編程實現。解答; 數據段bcddword 00371002h; 代碼段mov esi,bcdcmp esi,0jnz goonmov al,'0'call dispcjmp donegoon:mov ecx,8xor ebx,ebx; EBX0,表示可能是前導0again:rol esi,4mov eax,esiand eax,0fh; EAX低4位保存當前要顯示的BCD碼cmp ebx,
39、0; EBX0,說明不是前導0,要顯示jnz disp; EBX0,說明可能是前導0cmp eax,0 jz next; EAX0,說明是前導0,不顯示mov ebx,1 ; EAX0,沒有前導0了,令EBX10disp:add al,30hcall dispcnext:loop againdone:習題4.17已知一個字符串的長度,剔除其中所有的空格字符。請從字符串最后一個字符開始逐個向前判斷、并進行處理。解答; 數據段stringbyte 'Let us have a try !',0dh,0ah,0; 代碼段mov ecx,sizeof stringcmp ecx,2jb
40、 donelea eax,string; 顯示處理前的字符串call dispmsgmov esi,ecxdec esioutlp:cmp stringesi,' ' 檢測是否是空格jnz next; 不是空格繼續循環mov edi,esi; 是空格,進入剔除空格分支dec ecxinlp:inc edimov al,stringedi; 前移一個位置mov stringedi-1,alcmp edi,ecxjb inlpnext:dec esi; 繼續進行cmp esi,0jnz outlp; 為0結束lea eax,string; 顯示處理后的字符串call dispmsg
41、done:習題4.19請按如下說明編寫子程序:子程序功能:把用ASCII碼表示的兩位十進制數轉換為壓縮BCD碼入口參數:DH十位數的ASCII碼,DL個位數的ASCII碼出口參數:AL對應BCD碼解答asctobprocshl dh,4mov al,dhand dl,0fhor al,dlretasctobendp習題4.21編寫一個源程序,在鍵盤上按一個鍵,將其返回的ASCII碼值顯示出來,如果按下ESC鍵(對應ASCII碼是1BH)則程序退出。請調用書中的HTOASC子程序。解答; 代碼段,主程序again:call readccmp al,1bhjz donemov bl,almov a
42、l,':'call dispcmov al,blrol al,4call htoasc; 調用子程序call dispc; 顯示一個字符mov al,blcall htoasc; 調用子程序call dispc; 顯示一個字符call dispcrlfjmp againdone:習題4.22編寫一個子程序,它以二進制形式顯示EAX中32位數據,并設計一個主程序驗證。解答; 代碼段,主程序mov eax,8F98FF00Hcall dispbd; 調用子程序; 代碼段,子程序dispbdproc; 32位二進制數的輸出push ecxpush edxmov ecx,32; 要輸出
43、的字符個數dbd:rol eax,1; AL循環左移一位push eaxand al,01h; 取AL最低位add al,30h; 轉化成相應的ASCLL碼值call dispc; 以二進制的形式顯示pop eaxloop dbdpop edxpop ecxretdispbdendp習題4.26編制3個子程序把一個32位二進制數用8位十六進制形式在屏幕上顯示出來,分別運用如下3種參數傳遞方法,并配合3個主程序驗證它。(1)采用EAX寄存器傳遞這個32位二進制數(2)采用temp變量傳遞這個32位二進制數(3)采用堆棧方法傳遞這個32位二進制數解答(1); 數據段wvarword 307281A
44、FH; 代碼段,主程序mov eax,wvarcall dispmov al,'H'call dispc; 代碼段,子程序dispprocpush ebxpush ecxmov ecx,8; 8位dhw1:rol eax,4mov ebx,eaxand al,0fh; 轉換為ASCII碼add al,30hcmp al,'9'jbe dhw2add al,7dhw2:call dispcmov eax,ebxloop dhw1pop ecxpop ebxretdispendp(2); 數據段wvarword 307281AFHtempword ?; 代碼段,主程
45、序mov eax,wvarmov temp,eaxcall dispmov al,'H'call dispc; 代碼段,子程序dispprocpush ebxpush ecxmov ecx,8; 8位mov eax,tempdhw1:rol eax,4mov ebx,eaxand al,0fh; 轉換為ASCII碼add al,30hcmp al,'9'jbe dhw2add al,7dhw2:call dispc ; 顯示一個字符mov eax,ebxloop dhw1pop ecxpop ebxretdispendp(3); 數據段wvarword 3072
46、81AFH; 代碼段,主程序push wvarcall dispadd esp,4mov al,'H'call dispc; 代碼段,子程序dispprocpush ebpmov ebp,esppush ebxpush ecxmov ecx,8; 8位mov eax,ebp+8dhw1:rol eax,4mov ebx,eaxand al,0fh; 轉換為ASCII碼add al,30hcmp al,'9'jbe dhw2add al,7dhw2:call dispcmov eax,ebxloop dhw1pop ecxpop ebxpop ebpretdisp
47、endp習題4.28設計一個簡單的兩個整數的加法器程序。解答;ex0428.asminclude io32.inc.datamsg1byte 'Enter the integers:',13,10,0msg2byte 13,10,'Enter space to continue! Enter any other key to exit!',13,10,0.codestart:mov eax,offset msg1call dispmsgcall readsidmov ebx,eaxmov al,'+'call dispccall dispcrlf
48、call readsidadd ebx,eaxmov al,'='call dispcmov eax,ebxcall dispsidcall dispcrlfmov eax,offset msg2call dispmsgcall readccmp al,20hje startexit 0end start習題4. 31區別如下概念:宏定義、宏調用、宏指令、宏展開、宏匯編。解答宏定義:就是對宏進行說明,由一對宏匯編偽指令MACRO和ENDM來完成。宏調用:宏定義之后的使用。在使用宏指令的位置寫下宏名,后跟實體參數。宏指令:使用宏時,其形式很像指令,所以稱為宏指令。宏展開:在匯編時,匯編程序用對應的代碼序列替代宏指令。宏匯編:指使用宏的方法進行匯編語言程序設計。第5章 微機總線習題5.1簡答題(1)為什么稱處理器的數據總線是雙向的?(2)8086的地址和數據總線為什么要分時復用?(3)具有三態能力的引腳輸出高阻意味著什么?(4)總線周期中的等待狀態是個什么工作狀態?(6)總線數據傳輸為什么要進行總線仲裁?(7)異步時序為什么可以沒有總線時鐘信號?解答 數據總線承擔著處理器與存儲器、外設之間的數據交換,既可以輸入也可以輸出,故其是雙向的。 為減少引腳個數,8086采用了地址總線和數據總線分時復用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安慶市大觀區事業單位公開招聘工作人員筆試歷年典型考題及考點剖析附帶答案詳解
- 2024-2025公司項目負責人安全培訓考試試題及答案綜合題
- 2024-2025新員工入職前安全培訓考試試題及參考答案(新)
- 2025廠里廠里安全培訓考試試題考點精練
- 2025在線教育平臺勞動合同模板
- 2025食品銷售合同范本
- 2025授權協議國際期貨授權協議合同
- 2025中文合作合同范本
- 2025保險公司車輛抵押借款合同范本
- 2025家庭裝修設計合同范本
- 湖北省武漢市2025屆高三下學期四月調研考試(二模)數學試題 含解析
- 廣東省2025年普通高等學校招生全國統一考試模擬測試(英語試題及答案)(廣東二模)
- 高二下學期《家校攜手凝共識齊心協力創輝煌》家長會
- 2025年人教版七年級下冊英語全冊教學設計
- 2024年大模型+RAG最佳實踐報告
- 2024-2025學年人教版數學八年級下冊期中檢測卷(含答案)
- T∕CACM 1064-2018 針刀醫學臨床 通用要求
- 招聘求職簡歷制作表格模板可編輯下載 精品簡歷模板 標準表格單頁02
- 建筑垃圾處理廠可行性研究報告
- 日標JIS法蘭標準
評論
0/150
提交評論