《計算機原理》8套習題及答案自學.doc
《《計算機原理》8套習題及答案自學.doc》由會員分享,可在線閱讀,更多相關《《計算機原理》8套習題及答案自學.doc(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、習題1: 1. 微機基本結構是什么?微處理器、微型計算機、微型計算機系統(tǒng)有何區(qū)別? 2. 用二進制補碼表示-41、+74、-112? 3. 數(shù)值轉換:114.175= ( ) 2=( )16 11001.101B= ( )16= ( )10 4. 計算機內(nèi)有一個字節(jié)代碼10110110B (1) 若把它作為無符號數(shù),則與之對應的十進制是( ); (2) 若把它作為有符號補碼,則與之對應的十進制是( ); (3) 若把它作為AS
2、CII碼,而且最高位為奇偶校驗位,則采用的是奇校驗還是偶校驗?該值是什么字符的ASCII碼?ASCII碼主要用于做什么? (4) 若把它作為非壓縮BCD碼,則對應的十進制數(shù)為( )? 注:奇、偶校驗的概念 l 校驗位與數(shù)值位中1的個數(shù)為偶數(shù),則是偶校驗 l 校驗位與數(shù)值位中1的個數(shù)為奇數(shù),則是奇校驗 (5) 8086中PF標志對運算結果的低8位進行校驗,請問采用的是奇校驗還是偶校驗? 5. 在計算機中有符號字節(jié)數(shù)X=20H, Y=90H,請問X+Y=?結果是否有溢出;X-Y=?結果是否有溢出。 6. 計算機中有符號數(shù)如何表示,一個字的有符號數(shù)范圍是多少? 7. 什么是
3、總線,微機中按什么原則來使用總線? 8. 總線按照功能分為那幾類總線?按照在計算機中所處的位置又分為那幾類總線?ISA、EISA、PCI三種局部總線有何特點? 9. 計算機總線連接時為什么需要使用三態(tài)電路和鎖存器? 選作題: 10. CISC架構的計算機與RISC架構的計算機有何區(qū)別? 11. 浮點數(shù)在計算機中以何種格式進行存儲?請舉例說明 習題1答案: 1. 微機的基本結構包括主機和外設,主機又包括CPU、存儲器、I/O接口和總線,外設包括輸入設備和輸出設備; 微處理器主要指CPU;微型計算機包括主機和外設,其中主機包括微處理器,主要針對硬件部分;微型計算機系統(tǒng)包括微型
4、計算機和軟件系統(tǒng),能夠獨立運行。 2. -41 = (11010111)2 +74 = (01001010)2 -112 = ( 10010000 )2 3. 數(shù)值轉換:114.175= ( 0111 0010. 0011 ) 2=( 72.3 )16 (近似值) 11001.101B= ( 19.A )16= ( 25.625 )10 4. 182;-74;奇校驗,‘6’,ASCII用于計算機與外部交換信息;6;奇校驗 5 . X + Y 00100000 + 100
5、10000 = 10110000 結果不溢出 X – Y 00100000 - 10010000 = 10010000 結果溢出 6.計算機中有符號數(shù)用補碼表示,一個字的范圍是-32768 ~ 32767 7. 總線是用于傳輸信息的一組通信線;微機中按照分時復用原則使用總線; 8. 按照功能分為:地址總線、數(shù)據(jù)總線和控制總線; 按照位置分為:CPU總線、局部總線、系統(tǒng)總線和外部總線 ISA總線 寬度為16位,頻率為8MHz,傳輸率為16MB/S EISA總線
6、是ISA總線的增強,寬度32位,頻率8MHz,傳輸率為32MB/s PCI總線 總線寬度32位,可擴展到64位,總線頻率33MHz,也可提高到66MHz,傳輸率為132MB/s,可擴展到528MB/s,支持即插即用 9. 使用三態(tài)門可以增加驅動,用作數(shù)據(jù)輸入到總線時的緩沖,當需要總線時,打開三態(tài)門,傳送數(shù)據(jù);不需要總線時,關閉三態(tài)門,輸出為高阻狀態(tài),以便別的器件可以使用總線,因此多個器件接入總線時,一定要使用三態(tài)電路; 使用D觸發(fā)器可以進行信號保持,用作信息輸出時的鎖存 習題2: 1. 在8086微處理器中執(zhí)行如下指令后,標志寄存器中狀態(tài)標志為何值? MOV DX, 6
7、E07H SUB DX, 800AH 2. 8086管理的最大存儲器空間和I/O端口空間是多少,寫出地址范圍?為什么8086對存儲器要采用分段管理? 3. 若程序執(zhí)行之前,CS=E000H和IP=FE60H,則該程序入口物理地址是多少?指向這個入口地址的CS和IP的值是唯一的嗎? 4. 請畫出8088最小模式下的總線連接電路?要求包含8282 、8284 、8286。(注意8086與8088處理器的三點區(qū)別) 5. 8086的RESET引腳是什么信號有效? 8086復位后各寄存器的值是多少?指令隊列的狀態(tài)是什么?CPU執(zhí)行的第一條指令物理地址是多少? 6. 8086/808
8、8可以響應可屏蔽中斷和非可屏蔽中斷,可屏蔽中斷由_____引腳的____電平使申請有效,F(xiàn)LAG中的_____標志可以控制CPU是否響應這種中斷,可屏蔽中斷響應時,CPU使_____引腳為_____電平表明響應中斷;非屏蔽中斷申請輸入端為_____引腳,該引腳是_____信號有效。 7. 8086 CPU在最小模式下M/IO高電平且RD低電平的可能操作為___(多選) (A) 取指令操作 (B) 從外設輸入數(shù)據(jù) (C) 向存儲器寫數(shù)據(jù) (D) 從存儲器讀數(shù)據(jù) 8. 8086微處理器中,數(shù)據(jù)段由段寄存器___指示,堆棧段由段寄存器___指示
9、,寄存器CS:IP總是指示____________地址,一般情況下,取出一個字節(jié)指令后,寄存器____會自動加1。在硬件上可以用___和___來改變IP的內(nèi)容,在軟件上可以通過_____和_____來改變IP的內(nèi)容。 9. 如圖所示,8086工作在最小模式,且AL = 80H,執(zhí)行MOV [1000H], AL指令過程中(假設DS = 0000H),請問1000H和80H兩個數(shù)分別在什么時候,出現(xiàn)在8086 CPU的那些引腳上? CLK M / IO A19~A16 BHE ALE WR DT / R DEN T1 T2 T3 T4 地址 地
10、址 數(shù)據(jù) AD15~AD0 S3 ~ S6 選作題: 1. 80386內(nèi)部包括那6個功能部件?80386有那三種工作方式? 2. 80386如何在8086的基礎上擴展了數(shù)據(jù)寄存器和地址指針寄存器? 3. 80386有多少根地址線和數(shù)據(jù)線?其最大尋址范圍是多少?80386對存儲器如何采用分段和分頁管理? 4. 80386的虛擬存儲機制是什么樣的? 1. 8086微處理器內(nèi)部包括執(zhí)行單元EU和總線接口單元BIU,請簡要說明兩個部分主要功能是什么?請指出下列哪些部分屬于EU,哪些部分屬于BIU?(8分) 1)段寄存器CS、DS、ES、SS 2
11、)預取指令緩沖隊列 3)地址指針寄存器SP、BP、SI、DI 4)指令譯碼及控制 5)數(shù)據(jù)寄存器AX、BX、CX、DX 6)指令指針寄存器IP 7)20位物理地址加法器 8)總線接口控制電路 9)算術邏輯單元ALU 10)標志寄存器FLAG 屬于EU的有 ______、______、______、______、______ 屬于BIU的有______、______、______、______、______ 2. 按照圖4-1連接,8088從存儲器讀取數(shù)據(jù),若DS=B000H,則執(zhí)行指令MOV AL, [E000H]時,8088需要執(zhí)行以下
12、一系列處理,請標明處理的先后順序。(6分) A. CPU發(fā)讀命令; B. BIU形成20位物理地址; C. BIU將系統(tǒng)數(shù)據(jù)總線上的數(shù)據(jù)送到CPU內(nèi)部總線,EU從內(nèi)部總線獲得數(shù)據(jù); D. EU計算得到有效地址,并傳送給BIU; E. 存儲器將被選中單元的內(nèi)容送系統(tǒng)數(shù)據(jù)總線; F. CPU輸出物理地址,經(jīng)鎖存后傳送到地址譯碼器,選擇相應存儲器; 先后順序為:_____、_____、_____、_____、_____、_____。 5. 習題3: 1、8086系統(tǒng)中,請說明下列指令的源操作數(shù)的尋址方式是什么? 1)MOV AX, 1234H 2)MOV AX, [1
13、234H] 3)MOV AX, [BX] 4)MOV AX, 1234H[BX + SI] 5)MOVSB 6)IN AL, DX 2、請在下表中畫出下列數(shù)據(jù)段以十六進制表示的各單元值(表格中每個單元表示一個字節(jié)),并寫出變量var1, var2, var3的偏移地址和cnt的值。 0030H 低地址 高地址 data SEGMENT para ORG 30H var1 DB -2, ‘A’, 2 dup(‘23’) var2 DW -1 cnt EQU $-var1 var3 DW var2 dat
14、a ENDS 3、以下程序實現(xiàn)將變量var進行var*10+600的操作,并將計算結果保存在變量result中,當程序執(zhí)行到地址M5的時候,請在以下表格中畫出當前堆棧指針的位置和堆棧里的內(nèi)容(程序斷點可以用標號,在堆棧中可用寄存器名代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個單元表示一個字)。(6分) 高地址 低地址 data segment var dw 1000 result dd ? data ends sseg segment stack db 100 dup(?) sseg ends
15、 code segment assume cs:code, ds:data, ss:ss_seg main proc far push ds mov ax, 0 push ax mov ax, data mov ds, ax mov ax, var M1: call Caculate M2: dw 10 M3: dw 600
16、 M4: lea bx, result mov [bx], ax mov [bx+2], dx ret main endp Caculate proc push bp mov bp, sp push si push bx mov bx, [bp+2] mov si, cs:[bx] mul si M5: add ax, cs:2[bx] adc dx, 0 add bx, 4 mov [bp+2], bx pop bx pop si pop bp ret
17、 Caculate endp code ends end main 4、問答題 1)若AL = 81H,則執(zhí)行指令CBW后AH的內(nèi)容為多少? 2)若BL = BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少? SHL BL, 1 ;BL = _____, CF = ______ MOV CL, 2 SHR BL, CL ; BL = _____, CF = ______ OR BL, 80 SAR BL, 1 ; BL = _____, CF = ______ ROR
18、 BL,CL ; BL = _____, CF = ______ INC CL RCL BL, CL BL = _____, CF = ______ 3)什么是短跳轉、近跳轉、遠跳轉? 4)若當前SP = 1000H,CS = B000H ,IP = 0100H,且當前FLAG = 2345H,則執(zhí)行指令INT 21H以后,SP的值變?yōu)槎嗌伲慷褩6沃?個存儲單元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分別是多少? 5、請寫出程序段實現(xiàn)下列功能 例如:從160H端口讀取1個字節(jié) MOV
19、 DX, 160H IN AL, DX 1) 將一個8位數(shù)20H寫入到地址為20H的端口; 2) 若AL = 56H, BL = 57H,將這兩個壓縮格式BCD碼相加并將結果保存到存儲單元[2000H]中; 3) 將2個32位無符號數(shù)DAT1和DAT2相乘,結果保存在64位無符號數(shù)中,請編寫程序段。 4) 求數(shù)據(jù)段偏移地址為1000H開始的一個字符串的長度,字符串以ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根據(jù)CX的值計算字符串長度) 習題3: 1、8
20、086系統(tǒng)中,請說明下列指令的源操作數(shù)的尋址方式是什么? 1)MOV AX, 1234H 立即數(shù)尋址 2)MOV AX, [1234H] 直接尋址 3)MOV AX, [BX] 寄存器間接尋址 4)MOV AX, 1234H[BX + SI] 相對基址變址尋址 5)MOVSB 數(shù)據(jù)串尋址 6)IN AL, DX I/O端口間接尋址 2、請在下表中畫出下列數(shù)據(jù)段以十六進制表示的各單元值(表格中每個單元表示一個字節(jié)),并寫出變量var1, var2, var3的偏移地址和cnt的值。 FEH 0030H 低地址 高地
21、址 data SEGMENT para 41H ORG 30H 32H var1 DB -2, ‘A’, 2 dup(‘23’) 32H 33H var2 DW -1 FFH 33H cnt EQU $-var1 FFH var3 DW var2 00H 36H data ENDS var1: 0030H var2:0036H var3:0038H cnt = 8 3、以下程序實現(xiàn)將變量var進行var*10+600的操作,并將計算結果保存在變量result中,當程序執(zhí)行到地址M5的時候,請在以下表格中
22、畫出當前堆棧指針的位置和堆棧里的內(nèi)容(程序斷點可以用標號,在堆棧中可用寄存器名代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個單元表示一個字)。(6分) DS 高地址 低地址 data segment M2 0 var dw 1000 BP result dd ? BX SI data ends sseg segment stack db 100 dup(?) sseg ends code segment assume cs:code, ds:data, ss:
23、ss_seg main proc far push ds mov ax, 0 push ax mov ax, data mov ds, ax mov ax, var M1: call Caculate M2: dw 10 M3: dw 600 M4: lea bx, result mov [bx], ax
24、 mov [bx+2], dx ret main endp Caculate proc push bp mov bp, sp push si push bx mov bx, [bp+2] mov si, cs:[bx] mul si M5: add ax, cs:2[bx] adc dx, 0 add bx, 4 mov [bp+2], bx pop bx pop si pop bp ret Caculate endp code ends end main 4、問答題 1)若AL = 81H
25、,則執(zhí)行指令CBW后AH的內(nèi)容為多少? AH = 0FFH 2)若BL = BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少? SHL BL, 1 ;BL = __7CH___, CF = ___1___ MOV CL, 2 SHR BL, CL ; BL = __1FH___, CF = ___0___ OR BL, 80 SAR BL, 1 ; BL = __CFH___, CF = ___1___ ROR BL,CL ; BL = __F3H___, CF =
26、___1___ INC CL RCL BL, CL BL = __BFH___, CF = ___1___ 3)什么是短跳轉、近跳轉、遠跳轉? 短跳轉:段內(nèi)直接跳轉,偏移量為-128~127 近跳轉:段內(nèi)直接跳轉,偏移量為-32768~32767 遠跳轉:段間直接跳轉 4)若當前SP = 1000H,CS = B000H ,IP = 0100H,且當前FLAG = 2345H,則執(zhí)行指令INT 21H以后,SP的值變?yōu)槎嗌??堆棧段?個存儲單元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分別是多少? S
27、P = 0FFAH, (0FFFH) = 23H (0FFEH) = 45H (0FFDH) = B0H (0FFCH) = 00H (0FFBH) = 01H (0FFAH) = 00H 5、請寫出程序段實現(xiàn)下列功能 例如:從160H端口讀取1個字節(jié) MOV DX, 160H IN AL, DX 5) 將一個8位數(shù)20H寫入到地址為20H的端口; MOV AL, 20H OUT 20H, AL 6) 若AL = 56H, BL = 57H,將這兩個壓縮格式BCD碼相加并將結果保存到存儲單元[2000H]中;
28、 ADD AL, BL DAA MOV [2000H], AL 7) 將2個32位無符號數(shù)DAT1和DAT2相乘,結果保存在64位無符號數(shù)中,請編寫程序段。 DAT1 DD 12345678H DAT2 DD 9ABCDEFH RESULT DQ 0 MOV AX, word ptr DAT2 ;(DAT1)L * (DAT2)L MUL word ptr DAT1 MOV word ptr RESULT, AX MOV word ptr RESULT, DX ;保存結果 MOV AX, word ptr DAT2 MUL word ptr DAT1
29、+ 2 ;(DAT1)H * (DAT2)L ADD word ptr RESULT + 2, AX ADC word ptr RESULT + 4, 0 MOV AX, word ptr DAT2 + 2 ;(DAT1)L * (DAT2)H MUL word ptr DAT1 ADD word ptr RESULT + 2, AX ADC word ptr RESULT + 4, DX ADC word ptr RESULT + 6, 0 MOV AX, word ptr DAT2 + 2 ;(DAT1)H * (DAT2)H MUL word ptr DA
30、T1 + 2 ADD word ptr RESULT + 4, AX ADC word ptr RESULT + 6, DX 8) 求數(shù)據(jù)段偏移地址為1000H開始的一個字符串的長度,字符串以ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根據(jù)CX的值計算字符串長度) MOV AX, DS MOV ES, AX MOV DI, 1000H MOV AL, 0 MOV CX, 0FFFFH CLD REPNZ SCASB NOT CX ;或者 MOV AX, 0FF
31、FFH ; SUB AX, CX ; MOV CX, AX ;此時CX中存放的就是字符串的長度 9) 習題3: 1. 從屏幕上輸入小寫字母,轉換為大寫字母并輸出 要求:程序具有可讀性、容錯性 2. 編寫一子程序asc2bin,將ASCII轉換為二進制數(shù) 要求: 輸入?yún)?shù):AL中存放需要轉換的ASCII 輸出參數(shù):AL中存放轉換后的二進制數(shù)并返回 3. 內(nèi)存中存放8個16位有符號數(shù),求8個數(shù)值之和,并將結果存放在內(nèi)存變量SUM中 注:程序中應用到字擴展為雙字的指令CWD 4. 內(nèi)存中存放8個8位有符號數(shù),請按從大到小順序排列
32、 5. 內(nèi)存中有8個16位數(shù),請編寫程序將8個數(shù)倒序排放 例:定義內(nèi)存中8個數(shù) buf dw 100, 3, 1, 20, 40, -2, 7, 10 程序運行后,buf開始應為:buf dw 10, 7, -2, 40, 20, 1, 3, 100 6. 從鍵盤輸入4位十進制數(shù),然后以16進制形式顯示在屏幕上. 例:鍵盤輸入:1024 屏幕上應顯示:0400H 要求:鍵盤輸入和顯示結果時均應有提示 7. 數(shù)據(jù)段從100H開始存放字符串str1,從200H開始存放str2,二者均以NULL字符為結束符,編寫程序將str2拷貝到str1末尾,形成一個完整字符串
33、 例: ORG 100H str1 db 0dh, 0ah, ‘Hello ’, 0 ORG 200H str2 db ‘Automation!’, 0 程序運行后結果應為: str1 db 0dh, 0ah, ‘Hello Automation!’, 0 8. 以10進制形式顯示內(nèi)存中一有符號字節(jié)數(shù)據(jù) 例:var db 0ffH 屏幕應顯示:The result is: -1 9. 將一個16位的無符號數(shù)var, 轉換為非壓縮格式BCD碼,存放在內(nèi)存中buf開始的單元中。(按高位在前、低位在后的順序存放) 選作題: 10. 內(nèi)存中從s
34、tr開始存放一字符串,結束符為NULL字符,請編寫程序統(tǒng)計該字符串中單詞的個數(shù) 例:str1 db 0dh, 0ah, ‘Hello world, welcome to DUT. CPU is central processing unit!’, 0h 統(tǒng)計’….’中的單詞個數(shù),結果為10 11 編寫程序用鍵盤1~7鍵,模擬7個音符,進行鍵盤演奏! 注:需要對8253的定時器2和8255的PB口進行初始化 習題4答案: 1. 從屏幕上輸入小寫字母,轉換為大寫字母并輸出 要求:程序具有可讀性、容錯性 data segment para str1 db 0dh, 0ah, ‘P
35、lease input(a-z): $’ str2 db 0dh, 0ah, ‘The input is error!$’ str3 db 0dh, 0ah, ‘The result is: $’ data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ss:ss_seg, ds:data main proc far mov ax, data mov ds, ax main1: lea dx, str1 ;顯示提示信息
36、 mov ah, 9 int 21h mov ah, 1 ;輸入小寫字母 int 21h cmp al, ‘a(chǎn)’ ;判斷輸入字符是否為’a’~’z’ jb error cmp al, ‘z’ ja error jmp next error: lea dx, str2 ;顯示錯誤提示信息 mov ah, 9 int 21h jmp main1 ;跳轉,重新輸入 next: sub al, 20h push ax lea dx, str3 ;顯示輸出提示信息 mo
37、v ah, 9 int 21h pop ax mov dl, al ;顯示轉換后的大寫字母 mov ah, 2 int 21h mov ax, 4c00h ;返回操作系統(tǒng) int 21h main endp code ends end main 2. 編寫一子程序asc2bin,將ASCII轉換為二進制數(shù) 要求: 輸入?yún)?shù):AL中存放需要轉換的ASCII 輸出參數(shù):AL中存放轉換后的二進制數(shù)并返回 ;功能:將ASCII轉換為二進制數(shù) ;輸入?yún)?shù):AL中存放需要轉換的ASCII ;輸出參數(shù):AL中存
38、放轉換后得到的二進制數(shù) asc2bin proc sub al, 30h cmp al, 9 jbe asc2bin_1 sub al, 7 asc2bin_1: ret asc2bin endp 3. 內(nèi)存中存放8個16位有符號數(shù),求8個數(shù)值之和,并將結果存放在內(nèi)存變量SUM中 注:程序中應用到字擴展為雙字的指令CWD data segment para buf dw -1, 30000, 35000, 36000, 37000, 20000, 10000, -2 sum dd 0 data ends ss_seg segment stac
39、k dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax lea bx, buf ;bx指向buf首地址 mov cx, 8 main1: mov ax, [bx] cwd ;有符號數(shù)字擴展為雙字 add word ptr sum, ax ;32位數(shù)相加 adc word ptr sum + 2, dx inc bx
40、 inc bx loop main1 ;循環(huán)8次 mov ax, 4c00h int 21h main endp code ends end main 4. 內(nèi)存中存放8個8位有符號數(shù),請按從大到小順序排列 data segment para buf db -1, 30, 35, 36, 37, 20, 100, -2 data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data,
41、ss:ss_seg main proc far mov ax, data mov ds, ax mov cx, 8 main1: mov bx, 0 ;外循環(huán) mov di, 0 push cx main2: mov al, buf[bx] ;內(nèi)循環(huán) cmp al, buf[bx+1] jge next xchg al, buf[bx+1] ;不符合規(guī)則, 則交換數(shù)據(jù) mov buf[bx], al mov di, 1 next: inc bx loop main2 pop cx
42、 cmp di, 0 ;判斷內(nèi)循環(huán)是否發(fā)生數(shù)據(jù)交換 jz exit loop main1 exit: mov ax, 4c00h int 21h main endp code ends end main 5. 內(nèi)存中有8個16位數(shù),請編寫程序將8個數(shù)倒序排放 例:定義內(nèi)存中8個數(shù) buf dw 100, 3, 1, 20, 40, -2, 7, 10 程序運行后,buf開始應為:buf dw 10, 7, -2, 40, 20, 1, 3, 100 data segment para buf dw -1, 300
43、00, 35000, 36000, 37000, 20000, 10000, -2 data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax mov bx, 0 mov cx, 8 main1: push buf[bx] inc bx inc bx loop main1 ;8個數(shù)依
44、次入堆棧 lea bx, buf mov cx, 8 main2: pop buf[bx] inc bx inc bx loop main2 ;8個數(shù)依次出棧 mov ax, 4c00h int 21h main endp code ends end main 6. 從鍵盤輸入4位十進制數(shù),然后以16進制形式顯示在屏幕上. 例:鍵盤輸入:1024 屏幕上應顯示:0400H 要求:鍵盤輸入和顯示結果時均應有提示 data segment para buf db 4 dup(0) var dw 0
45、 str1 db 0dh, 0ah, ‘Please input four numbers(0-9): $’ str2 db 0dh, 0ah, ‘The input is error, please try again. $’ str2 db 0dh, 0ah, ‘The hex result is: $’ data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far
46、 mov ax, data mov ds, ax main1: lea dx, str1 ;顯示數(shù)據(jù)輸入提示信息 mov ah, 9 int 21h mov bx, 0 mov cx, 4 ;循環(huán)輸入4個數(shù) main2: mov ah, 1 ;DOS功能調(diào)用,輸入數(shù)據(jù) int 21h cmp al, ‘0’ ;判斷輸入字符是否為’0’-‘9’ jb error cmp al, ‘9’ ja error ;若不為’0’-‘9’,則進行錯誤處理 sub al, 30h ;A
47、SCII轉換為二進制,得到0-9 mov al, buf[bx] ;存入buf開始的緩沖區(qū) inc bx loop main2 jmp next ;數(shù)據(jù)輸入正確后,跳轉到后續(xù)處理 error: lea dx, str2 ;顯示錯誤提示信息 mov ah, 9 int 21h jmp main1 ;跳轉到重新輸入 next: mov ax, 0 ;(((0*10+B3)*10+B2)*10+B1)*10+B0 mov dx, 0 ;得到輸入的4位十進制數(shù) mov si, 10 mov
48、bx, 0 mov cx, 4 main3: mul 10 ;相乘后dx仍然保持0 add al, buf[bx] adc ah, 0 inc bx loop main3 ;循環(huán)4次乘10 mov var, ax ;得到的4位十進制數(shù)存放到var中 lea dx, str3 mov ah, 9 int 21h ;顯示輸出提示符 mov ch, 4 ;以16進制顯示輸入的數(shù)據(jù), 循環(huán)4次 mov cl, 4 main4: rol var, cl ; 循環(huán)
49、左移4位 mov ax, var and ax, 000fh call bin2asc ;二進制轉換為ASCII call pchar ;顯示16進制 dec ch jnz main4 mov al, ‘H’ call pchar mov ax, 4c00h int 21h main endp ;功能: 將一個二進制數(shù)轉換為ASCII ;輸入?yún)?shù): AL中存放要轉換的二進制數(shù) ;輸出參數(shù): AL中存放轉換后的ASCII bin2asc proc and al, 0fh add al, 30h
50、 cmp al, 39h jbe bin2asc_1 add al, 07h bin2asc_1: ret bin2asc endp ;功能:顯示字符 ;輸入?yún)?shù):AL中存放要顯示字符的ASCII ;輸出參數(shù):無 pchar proc mov dl, al mov ah, 2 int 21h ret pchar endp code ends end main 7. 數(shù)據(jù)段從100H開始存放字符串str1,從200H開始存放str2,二者均以NULL字符為結束符,編寫程序將str2拷貝到str1末尾,形成一個完整字符串 例: ORG 100
51、H str1 db 0dh, 0ah, ‘Hello ’, 0 ORG 200H str2 db ‘Automation!’, 0 程序運行后結果應為: str1 db 0dh, 0ah, ‘Hello Automation!’, 0 data segment para ORG 100H str1 db 0dh, 0ah, ‘Hello ’, 0 ORG 200H str2 db ‘Automation!’, 0 data ends ss_seg segment stack dw 100 dup(0) ss_seg ends
52、 code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax mov es, ax lea di, str1 ;es:di指向str1首地址 mov al, 0 repnz scasb ;查找str1結束符NULL dec di ;找到str1結束符,并讓es:di指向該位置 lea si, str2 ;ds:si指向str2首地址 cld ;DF = 0 main1:
53、lodsb ;AL (ds:si), si = si + 1 stosb ;(es:di) AL, di = di + 1 cmp al, 0 ;判斷是否到str2的結束符 jnz main1 lea si, str1 ;ds:si指向拷貝后的str1首地址 main2: lodsb ;顯示拷貝后的str1字符串 cmp al, 0 jz exit call pchar jmp main2 exit: mov ax, 4c00h int 21h main endp ;功能
54、:顯示字符 ;輸入?yún)?shù):AL中存放要顯示字符的ASCII ;輸出參數(shù):無 pchar proc mov dl, al mov ah, 2 int 21h ret pchar endp code ends end main 8. 以10進制形式顯示內(nèi)存中一有符號字節(jié)數(shù)據(jù) 例:var db 0ffH 屏幕應顯示:The result is: -1 data segment para var db 7fh str1 db 0dh, 0ah, ‘The result is: ’ buf db 4 dup(‘ ’) db ‘$’ da
55、ta ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax mov buf, ‘+’ cmp var, 0 ;判斷var是正數(shù),還是負數(shù) jge next mov buf, ‘-‘ neg var ;若var為負,則得到其相反數(shù) next: mov al, var mov cx,
56、3 mov dl, 10 lea bx, buf+3 main1: mov ah, 0 div dl ; (AX / 10)商 al add ah, 30h ; (AX / 10)余數(shù) ah mov [bx], ah dec bx loop main1 ;循環(huán)3次,分別得到百、十、個位 lea dx, str1 ;顯示10進制數(shù) mov ah, 9 int 21h exit: mov ax, 4c00h int 21h main endp code ends end main
57、 9. 將一個16位的無符號數(shù)var, 轉換為非壓縮格式BCD碼,存放在內(nèi)存中buf開始的單元中。(按高位在前、低位在后的順序存放) data segment para var dw 800H buf db 5 dup(0) data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax mov cx, 16
58、 ;((0*2 + B15)*2 + B14)*2 + … + )*2 + B0 main1: shl var, 1 ;得到var的Bi位 lea bx, 4 push cx mov cx, 5 main2: mov al, buf[bx] ;執(zhí)行buf*2 + Bi操作 adc al, al AAA 非壓縮格式BCD碼調(diào)整 mov buf[bx], al dec bx loop main2 ;內(nèi)循環(huán)為5次 pop cx loop main1 ;外循環(huán)為16次 exit: mo
59、v ax, 4c00h int 21h main endp code ends end main 選作題: 10. 內(nèi)存中從str開始存放一字符串,結束符為NULL字符,請編寫程序統(tǒng)計該字符串中單詞的個數(shù) 例:str1 db 0dh, 0ah, ‘Hello world, welcome to DUT. CPU is central processing unit!’, 0h 統(tǒng)計’….’中的單詞個數(shù),結果為10 11 編寫程序用鍵盤1~7鍵,模擬7個音符,進行鍵盤演奏! 注:需要對8253的定時器2和8255的PB口進行初始化 習題5: 1. 如圖4
60、-1所示,8088 CPU工作在最小模式,通過3片8282與系統(tǒng)地址總線相連,通過1片8286與系統(tǒng)數(shù)據(jù)總線相連,外擴1片27256(32K8 EPROM)和1片62256(32K8 RAM),要求EPROM起始地址為B0000H,RAM地址范圍緊隨其后,使用74LS138,采用全地址譯碼方式。(14分) 1)寫出27256與62256的地址覆蓋范圍;(2分) 2) 請完成8088最小模式下總線連接圖,并畫出系統(tǒng)總線與存儲器連接圖,其中存儲器讀/MEMR信號和存儲器寫/MEMW信號,需要由8088 CPU的M/IO、/RD、/WR信號產(chǎn)生,連接時門電路自選。(12分) 圖4-1 存儲
61、器連接 G1 74LS138 G2A G2B C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 GND GND GND +5V WE 62256 OE D7 D0 D1 D2 D3 D4 D5 D6 CS A6 A0 A1 A2 A3 A4 A5 A14 A7 A8 A9 A10 A11 A12 A13 27256 OE D7 D0 D1 D2 D3 D4 D5 D6 CS A6 A0 A1 A2 A3 A4 A5 A14 A7 A8 A9 A10
62、 A11 A12 A13 A7 ~ A0 DIR B7 ~ B0 OE 8286 D7 D6 D5 D4 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 8282 OE Q7 ~ Q0 STB D7 ~ D0 D7 ~ D0 STB Q7 ~ Q0 OE 8282 A15 A14 A13 A12 A11 A10 A9 A8 D7 ~ D0 STB Q7 ~ Q0 OE 8282 A19 A18 A17 A16 8088 MN/MX
63、WR RD M/IO DEN DT/R AD7 ~ AD0 A15 ~ A8 ALE A19 ~ A16 BHE 習題5及答案:(存儲器擴展) 1. 如圖4-1所示,8088 CPU工作在最小模式,通過3片8282與系統(tǒng)地址總線相連,通過1片8286與系統(tǒng)數(shù)據(jù)總線相連,外擴1片27256(32K8 EPROM)和1片62256(32K8 RAM),要求EPROM起始地址為B0000H,RAM地址范圍緊隨其后,使用74LS138,采用
64、全地址譯碼方式。(14分) 1)寫出27256與62256的地址覆蓋范圍;(2分) BHE A19 ~ A16 ALE A15 ~ A8 AD7 ~ AD0 DT/R DEN M/IO RD WR MN/MX 8088 D7 ~ D0 STB Q7 ~ Q0 OE 8282 A19 A18 A17 A16 D7 ~ D0 STB Q7 ~ Q0 OE 8282 A15 A14 A13 A12 A11 A10 A9 A8 D7 ~ D0 STB Q7 ~ Q0 OE 8282 A
65、7 A6 A5 A4 A3 A2 A1 A0 A7 ~ A0 DIR B7 ~ B0 OE 8286 D7 D6 D5 D4 D3 D2 D1 D0 A13 A12 A11 A10 A9 A8 A7 A14 A5 A4 A3 A2 A1 A0 A6 CS D6 D5 D4 D3 D2 D1 D0 D7 OE 27256 A13 A12 A11 A10 A9 A8 A7 A14 A5 A4 A3 A2 A1 A0 A6 CS D6 D5 D4 D3 D2
66、 D1 D0 D7 OE 62256 WE +5V GND GND GND G1 74LS138 G2A G2B C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 圖4-1 存儲器連接 2) 請完成8088最小模式下總線連接圖,并畫出系統(tǒng)總線與存儲器連接圖,其中存儲器讀/MEMR信號和存儲器寫/MEMW信號,需要由8088 CPU的M/IO、/RD、/WR信號產(chǎn)生,連接時門電路自選。(12分) 1) 27256地址覆蓋范圍B0000H~B7FFFH; 62256地址覆蓋范圍B8000H~BFFFFH 連接圖文字說明如下: 2) 總線連接 l 8088 MN/MX引腳接+5V;A19~A16引腳接第一片8282的D7~D0;A15~A8引腳連接第二片8282的D7~D0;AD7~AD0引腳同時連接到第三片8282的D7~D0,也連接到8286的A7~A0;DT/R引腳連接8286的DIR引腳,/DEN引腳連
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 某咨詢創(chuàng)業(yè)__奇正實業(yè)集團有限公司戰(zhàn)略績效管理
- 廣西崇左市大新縣全茗鎮(zhèn)中學九年級語文上冊 第5課 敬業(yè)與樂業(yè)課件 (新版)新人教版
- 代時間管理FTF
- 學校常見傳染病防控知識課件
- 家具設計面料品牌畫冊
- 地基處理練習題
- 如何讓孩子有話說
- 抽樣誤差與假設檢驗
- 中考數(shù)學專題復習專題提升五一次函數(shù)的圖象與性質的應用講義
- 人教版必修一2.4《勻變速直線運動的位移與速度的》課件
- 2光的衍射概述課件
- 工信版(中職)虛擬現(xiàn)實技術與應用【03】1-3-8 虛擬現(xiàn)實立體顯示器電子課件
- 七年級語文下冊 《雪花的快樂》課件 鄂教版
- 自我認知與時間管理
- 百分數(shù)的意義與寫法