《計算機原理》8套習題及答案自學.doc
《《計算機原理》8套習題及答案自學.doc》由會員分享,可在線閱讀,更多相關《《計算機原理》8套習題及答案自學.doc(45頁珍藏版)》請在裝配圖網上搜索。
1、習題1: 1. 微機基本結構是什么?微處理器、微型計算機、微型計算機系統有何區(qū)別? 2. 用二進制補碼表示-41、+74、-112? 3. 數值轉換:114.175= ( ) 2=( )16 11001.101B= ( )16= ( )10 4. 計算機內有一個字節(jié)代碼10110110B (1) 若把它作為無符號數,則與之對應的十進制是( ); (2) 若把它作為有符號補碼,則與之對應的十進制是( ); (3) 若把它作為AS
2、CII碼,而且最高位為奇偶校驗位,則采用的是奇校驗還是偶校驗?該值是什么字符的ASCII碼?ASCII碼主要用于做什么? (4) 若把它作為非壓縮BCD碼,則對應的十進制數為( )? 注:奇、偶校驗的概念 l 校驗位與數值位中1的個數為偶數,則是偶校驗 l 校驗位與數值位中1的個數為奇數,則是奇校驗 (5) 8086中PF標志對運算結果的低8位進行校驗,請問采用的是奇校驗還是偶校驗? 5. 在計算機中有符號字節(jié)數X=20H, Y=90H,請問X+Y=?結果是否有溢出;X-Y=?結果是否有溢出。 6. 計算機中有符號數如何表示,一個字的有符號數范圍是多少? 7. 什么是
3、總線,微機中按什么原則來使用總線? 8. 總線按照功能分為那幾類總線?按照在計算機中所處的位置又分為那幾類總線?ISA、EISA、PCI三種局部總線有何特點? 9. 計算機總線連接時為什么需要使用三態(tài)電路和鎖存器? 選作題: 10. CISC架構的計算機與RISC架構的計算機有何區(qū)別? 11. 浮點數在計算機中以何種格式進行存儲?請舉例說明 習題1答案: 1. 微機的基本結構包括主機和外設,主機又包括CPU、存儲器、I/O接口和總線,外設包括輸入設備和輸出設備; 微處理器主要指CPU;微型計算機包括主機和外設,其中主機包括微處理器,主要針對硬件部分;微型計算機系統包括微型
4、計算機和軟件系統,能夠獨立運行。 2. -41 = (11010111)2 +74 = (01001010)2 -112 = ( 10010000 )2 3. 數值轉換: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.計算機中有符號數用補碼表示,一個字的范圍是-32768 ~ 32767 7. 總線是用于傳輸信息的一組通信線;微機中按照分時復用原則使用總線; 8. 按照功能分為:地址總線、數據總線和控制總線; 按照位置分為:CPU總線、局部總線、系統總線和外部總線 ISA總線 寬度為16位,頻率為8MHz,傳輸率為16MB/S EISA總線
6、是ISA總線的增強,寬度32位,頻率8MHz,傳輸率為32MB/s PCI總線 總線寬度32位,可擴展到64位,總線頻率33MHz,也可提高到66MHz,傳輸率為132MB/s,可擴展到528MB/s,支持即插即用 9. 使用三態(tài)門可以增加驅動,用作數據輸入到總線時的緩沖,當需要總線時,打開三態(tài)門,傳送數據;不需要總線時,關閉三態(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可以響應可屏蔽中斷和非可屏蔽中斷,可屏蔽中斷由_____引腳的____電平使申請有效,FLAG中的_____標志可以控制CPU是否響應這種中斷,可屏蔽中斷響應時,CPU使_____引腳為_____電平表明響應中斷;非屏蔽中斷申請輸入端為_____引腳,該引腳是_____信號有效。 7. 8086 CPU在最小模式下M/IO高電平且RD低電平的可能操作為___(多選) (A) 取指令操作 (B) 從外設輸入數據 (C) 向存儲器寫數據 (D) 從存儲器讀數據 8. 8086微處理器中,數據段由段寄存器___指示,堆棧段由段寄存器___指示
9、,寄存器CS:IP總是指示____________地址,一般情況下,取出一個字節(jié)指令后,寄存器____會自動加1。在硬件上可以用___和___來改變IP的內容,在軟件上可以通過_____和_____來改變IP的內容。 9. 如圖所示,8086工作在最小模式,且AL = 80H,執(zhí)行MOV [1000H], AL指令過程中(假設DS = 0000H),請問1000H和80H兩個數分別在什么時候,出現在8086 CPU的那些引腳上? CLK M / IO A19~A16 BHE ALE WR DT / R DEN T1 T2 T3 T4 地址 地
10、址 數據 AD15~AD0 S3 ~ S6 選作題: 1. 80386內部包括那6個功能部件?80386有那三種工作方式? 2. 80386如何在8086的基礎上擴展了數據寄存器和地址指針寄存器? 3. 80386有多少根地址線和數據線?其最大尋址范圍是多少?80386對存儲器如何采用分段和分頁管理? 4. 80386的虛擬存儲機制是什么樣的? 1. 8086微處理器內部包括執(zhí)行單元EU和總線接口單元BIU,請簡要說明兩個部分主要功能是什么?請指出下列哪些部分屬于EU,哪些部分屬于BIU?(8分) 1)段寄存器CS、DS、ES、SS 2
11、)預取指令緩沖隊列 3)地址指針寄存器SP、BP、SI、DI 4)指令譯碼及控制 5)數據寄存器AX、BX、CX、DX 6)指令指針寄存器IP 7)20位物理地址加法器 8)總線接口控制電路 9)算術邏輯單元ALU 10)標志寄存器FLAG 屬于EU的有 ______、______、______、______、______ 屬于BIU的有______、______、______、______、______ 2. 按照圖4-1連接,8088從存儲器讀取數據,若DS=B000H,則執(zhí)行指令MOV AL, [E000H]時,8088需要執(zhí)行以下
12、一系列處理,請標明處理的先后順序。(6分) A. CPU發(fā)讀命令; B. BIU形成20位物理地址; C. BIU將系統數據總線上的數據送到CPU內部總線,EU從內部總線獲得數據; D. EU計算得到有效地址,并傳送給BIU; E. 存儲器將被選中單元的內容送系統數據總線; F. CPU輸出物理地址,經鎖存后傳送到地址譯碼器,選擇相應存儲器; 先后順序為:_____、_____、_____、_____、_____、_____。 5. 習題3: 1、8086系統中,請說明下列指令的源操作數的尋址方式是什么? 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、請在下表中畫出下列數據段以十六進制表示的各單元值(表格中每個單元表示一個字節(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、以下程序實現將變量var進行var*10+600的操作,并將計算結果保存在變量result中,當程序執(zhí)行到地址M5的時候,請在以下表格中畫出當前堆棧指針的位置和堆棧里的內容(程序斷點可以用標號,在堆棧中可用寄存器名代表保存的內容,SS的內容不用指定,表格的每個單元表示一個字)。(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的內容為多少? 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)槎嗌??堆棧段?個存儲單元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分別是多少? 5、請寫出程序段實現下列功能 例如:從160H端口讀取1個字節(jié) MOV
19、 DX, 160H IN AL, DX 1) 將一個8位數20H寫入到地址為20H的端口; 2) 若AL = 56H, BL = 57H,將這兩個壓縮格式BCD碼相加并將結果保存到存儲單元[2000H]中; 3) 將2個32位無符號數DAT1和DAT2相乘,結果保存在64位無符號數中,請編寫程序段。 4) 求數據段偏移地址為1000H開始的一個字符串的長度,字符串以ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根據CX的值計算字符串長度) 習題3: 1、8
20、086系統中,請說明下列指令的源操作數的尋址方式是什么? 1)MOV AX, 1234H 立即數尋址 2)MOV AX, [1234H] 直接尋址 3)MOV AX, [BX] 寄存器間接尋址 4)MOV AX, 1234H[BX + SI] 相對基址變址尋址 5)MOVSB 數據串尋址 6)IN AL, DX I/O端口間接尋址 2、請在下表中畫出下列數據段以十六進制表示的各單元值(表格中每個單元表示一個字節(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、以下程序實現將變量var進行var*10+600的操作,并將計算結果保存在變量result中,當程序執(zhí)行到地址M5的時候,請在以下表格中
22、畫出當前堆棧指針的位置和堆棧里的內容(程序斷點可以用標號,在堆棧中可用寄存器名代表保存的內容,SS的內容不用指定,表格的每個單元表示一個字)。(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的內容為多少? 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)什么是短跳轉、近跳轉、遠跳轉? 短跳轉:段內直接跳轉,偏移量為-128~127 近跳轉:段內直接跳轉,偏移量為-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、請寫出程序段實現下列功能 例如:從160H端口讀取1個字節(jié) MOV DX, 160H IN AL, DX 5) 將一個8位數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位無符號數DAT1和DAT2相乘,結果保存在64位無符號數中,請編寫程序段。 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) 求數據段偏移地址為1000H開始的一個字符串的長度,字符串以ASCII碼0為結束符,長度要求包括結束符;(提示:初始化AL = 0 CX = 0FFFFH,然后使用REPNZ SCASB命令,最后根據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轉換為二進制數 要求: 輸入參數:AL中存放需要轉換的ASCII 輸出參數:AL中存放轉換后的二進制數并返回 3. 內存中存放8個16位有符號數,求8個數值之和,并將結果存放在內存變量SUM中 注:程序中應用到字擴展為雙字的指令CWD 4. 內存中存放8個8位有符號數,請按從大到小順序排列
32、 5. 內存中有8個16位數,請編寫程序將8個數倒序排放 例:定義內存中8個數 buf dw 100, 3, 1, 20, 40, -2, 7, 10 程序運行后,buf開始應為:buf dw 10, 7, -2, 40, 20, 1, 3, 100 6. 從鍵盤輸入4位十進制數,然后以16進制形式顯示在屏幕上. 例:鍵盤輸入:1024 屏幕上應顯示:0400H 要求:鍵盤輸入和顯示結果時均應有提示 7. 數據段從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進制形式顯示內存中一有符號字節(jié)數據 例:var db 0ffH 屏幕應顯示:The result is: -1 9. 將一個16位的無符號數var, 轉換為非壓縮格式BCD碼,存放在內存中buf開始的單元中。(按高位在前、低位在后的順序存放) 選作題: 10. 內存中從s
34、tr開始存放一字符串,結束符為NULL字符,請編寫程序統計該字符串中單詞的個數 例:str1 db 0dh, 0ah, ‘Hello world, welcome to DUT. CPU is central processing unit!’, 0h 統計’….’中的單詞個數,結果為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’ ;判斷輸入字符是否為’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 ;返回操作系統 int 21h main endp code ends end main 2. 編寫一子程序asc2bin,將ASCII轉換為二進制數 要求: 輸入參數:AL中存放需要轉換的ASCII 輸出參數:AL中存放轉換后的二進制數并返回 ;功能:將ASCII轉換為二進制數 ;輸入參數:AL中存放需要轉換的ASCII ;輸出參數:AL中存
38、放轉換后得到的二進制數 asc2bin proc sub al, 30h cmp al, 9 jbe asc2bin_1 sub al, 7 asc2bin_1: ret asc2bin endp 3. 內存中存放8個16位有符號數,求8個數值之和,并將結果存放在內存變量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 ;有符號數字擴展為雙字 add word ptr sum, ax ;32位數相加 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. 內存中存放8個8位有符號數,請按從大到小順序排列 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] ;內循環(huán) cmp al, buf[bx+1] jge next xchg al, buf[bx+1] ;不符合規(guī)則, 則交換數據 mov buf[bx], al mov di, 1 next: inc bx loop main2 pop cx
42、 cmp di, 0 ;判斷內循環(huán)是否發(fā)生數據交換 jz exit loop main1 exit: mov ax, 4c00h int 21h main endp code ends end main 5. 內存中有8個16位數,請編寫程序將8個數倒序排放 例:定義內存中8個數 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個數依
44、次入堆棧 lea bx, buf mov cx, 8 main2: pop buf[bx] inc bx inc bx loop main2 ;8個數依次出棧 mov ax, 4c00h int 21h main endp code ends end main 6. 從鍵盤輸入4位十進制數,然后以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 ;顯示數據輸入提示信息 mov ah, 9 int 21h mov bx, 0 mov cx, 4 ;循環(huán)輸入4個數 main2: mov ah, 1 ;DOS功能調用,輸入數據 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 ;數據輸入正確后,跳轉到后續(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位十進制數 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位十進制數存放到var中 lea dx, str3 mov ah, 9 int 21h ;顯示輸出提示符 mov ch, 4 ;以16進制顯示輸入的數據, 循環(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 ;功能: 將一個二進制數轉換為ASCII ;輸入參數: AL中存放要轉換的二進制數 ;輸出參數: 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 ;功能:顯示字符 ;輸入參數:AL中存放要顯示字符的ASCII ;輸出參數:無 pchar proc mov dl, al mov ah, 2 int 21h ret pchar endp code ends end main 7. 數據段從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、:顯示字符 ;輸入參數:AL中存放要顯示字符的ASCII ;輸出參數:無 pchar proc mov dl, al mov ah, 2 int 21h ret pchar endp code ends end main 8. 以10進制形式顯示內存中一有符號字節(jié)數據 例: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是正數,還是負數 jge next mov buf, ‘-‘ neg var ;若var為負,則得到其相反數 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)余數 ah mov [bx], ah dec bx loop main1 ;循環(huán)3次,分別得到百、十、個位 lea dx, str1 ;顯示10進制數 mov ah, 9 int 21h exit: mov ax, 4c00h int 21h main endp code ends end main
57、 9. 將一個16位的無符號數var, 轉換為非壓縮格式BCD碼,存放在內存中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碼調整 mov buf[bx], al dec bx loop main2 ;內循環(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. 內存中從str開始存放一字符串,結束符為NULL字符,請編寫程序統計該字符串中單詞的個數 例:str1 db 0dh, 0ah, ‘Hello world, welcome to DUT. CPU is central processing unit!’, 0h 統計’….’中的單詞個數,結果為10 11 編寫程序用鍵盤1~7鍵,模擬7個音符,進行鍵盤演奏! 注:需要對8253的定時器2和8255的PB口進行初始化 習題5: 1. 如圖4
60、-1所示,8088 CPU工作在最小模式,通過3片8282與系統地址總線相連,通過1片8286與系統數據總線相連,外擴1片27256(32K8 EPROM)和1片62256(32K8 RAM),要求EPROM起始地址為B0000H,RAM地址范圍緊隨其后,使用74LS138,采用全地址譯碼方式。(14分) 1)寫出27256與62256的地址覆蓋范圍;(2分) 2) 請完成8088最小模式下總線連接圖,并畫出系統總線與存儲器連接圖,其中存儲器讀/MEMR信號和存儲器寫/MEMW信號,需要由8088 CPU的M/IO、/RD、/WR信號產生,連接時門電路自選。(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與系統地址總線相連,通過1片8286與系統數據總線相連,外擴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最小模式下總線連接圖,并畫出系統總線與存儲器連接圖,其中存儲器讀/MEMR信號和存儲器寫/MEMW信號,需要由8088 CPU的M/IO、/RD、/WR信號產生,連接時門電路自選。(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: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 春七年級數學下冊41 用表格表示的變量間關系課件4 (新版)北師大版
- pep新版五年級上冊Unit1-第4課時-B-Lets-talk課件
- 網絡營銷概述課件
- 第五章生產物流管理課件
- 高中語文必修一《包身工》課件
- 幼兒園《冬爺爺的胡子》課件
- 組織結構診斷報告
- 人教版初中語文課內成語復習課件
- 張衡傳知識點歸納總結-最實用課件
- 五年級上冊英語ppt課件-M8U1-What-time-does-your-school-start-|外研版三起
- 農業(yè)的區(qū)位選擇優(yōu)質課比賽1)課件
- 高中語文部編版選擇性必修上冊《兼愛》課件
- 校園網設計方案
- 上海媒介市場分析課件
- 計算機網絡概述(第一章)課件