微机知识总结
盡量盡量把點都涉及到
部分參考博客https://blog.csdn.net/shensiback/article/details/80903876
第一章
進制和進制轉換不說了,數電有詳細描述
1.馮諾依曼架構和哈佛架構(了解)
馮諾依曼架構特點:數據和指令都存在內存當中,可以充分的利用有限的內存空間,程序 執行方便, 但是對指令沒有讀寫限定,容易出現bug 主要結構:輸入設備,控制器,運算器,存儲器,輸出設備 哈佛架構特點:指令和數據分開存放,使之不會相互干擾,進而當程序出BUG的時候, 最多只會修改變量的值,而不會修改程序的執行順序(邏輯關系), 所以大量應用于嵌入式結構 (對處理速度要求不高?)2.微型計算機系統組成
微型計算機系統{軟件系統{系統軟件應用軟件硬件系統{主機{CPU(微處理器){寄存器組控制器運算器存儲器總線IO接口外部設備微型計算機系統 \begin{cases} 軟件系統\begin{cases}系統軟件\\應用軟件\end{cases}\\ 硬件系統\begin{cases}主機\begin{cases}CPU(微處理器)\begin{cases}寄存器組\\控制器\\運算器\end{cases}\\存儲器\\總線\\IO接口\end{cases}\\外部設備\end{cases} \end{cases}微型計算機系統??????????????????????????????????軟件系統{系統軟件應用軟件?硬件系統????????????????????????主機????????????????????CPU(微處理器)??????寄存器組控制器運算器?存儲器總線IO接口?外部設備??
硬件系統組成
1.微處理器(1)運算器:核心部件是算術邏輯單元(ALU),加法器為主,輔之以移位寄存器完成邏輯運算(2)控制器:由指令寄存器,指令譯碼器和操作控制電路組成(3)寄存器組:CPU的若干個存儲單元 2.存儲器又叫內存或主存,存放數據和程序 3.輸入輸出設備輸入輸出系統的硬件組成部分 4.總線結構組成數據總線DB(Data Bus)地址總線AB(Adress Bus)控制總線CB(Control Bus)注:數據和控制總線都是雙向的,地址總線是單向的軟件系統組成
1.系統軟件操作系統(OS)和系統實時程序 2.應用軟件為用戶解決實際問題的程序第二章
1.微處理器性能指標
1.工作頻率 CPU的時鐘頻率,主頻越高,運算速度越快 2.字長 CPU能同時處理的數據位數,如4位,8位,16位,32位,64位處理器2.微處理器組成
1.運算器 由 算術邏輯單元(ALU) ,通用或專用寄存器及內部總線三部分組成 核心功能是實現數據的 算術運算 和 邏輯運算 結構有:單總線結構運算器,雙總線結構運算器,三總線結構運算器 2.控制器 由 程序計數器(存放下一條要執行指令在存儲器中的地址), 指令寄存器(存放從存儲器中取出待執行的指令), 指令譯碼器(指令譯碼), 時序控制部件(產生計算機工作中所需要的各種時序信號), 微操作控制部件(產生于各條指令相對應的微操作)組成 作用是控制程序的執行 (1)指令控制 (2)時序控制 (3)操作控制3.8086/8088指令流水線
執行單元(EU)和總線接口單元(BIU) EU負責分析指令(指令譯碼)和執行指令,BIU負責取指令,取操作數和寫結果 優點:EU和BIU的并行工作,減少CPU為取指令而等待的時間,提高了CPU的執行效率和運行速度 ,既降低了對存儲器存取速度的要求 重點是并行!!4.分段管理技術
CPU內部結構是16位的,為了提高系統執行速度,便于存儲器管理,采用了段地址+偏移地址的尋址方法 (尋址能力提高了4位)5.物理地址和邏輯地址
物理地址是指CPU存取存儲器所用的地址,邏輯地址是段和偏移形式的地址,即匯編語言程序中使用的存儲器地址 已知物理地址,其邏輯地址不是唯一的,一個物理地址可以對應于不同的邏輯地址6.8086的結構(重點)
從功能上8086分為兩部分,總線接口部分(BIU) 和 執行部件(EU) a. 總線接口部件a) 4個16位的段地址寄存器i. CS 代碼段地址寄存器(Code)ii. DS 數據段地址寄存器(Data)iii. ES 附加段地址寄存器(Extra)iv. SS 堆棧段地址寄存器(Stack)b) 16位的指令指針寄存器 IPc) 20位的地址加法器 段地址x16+偏移地址d) 6字節的指令隊列緩沖器 b. 執行部件a) 4個通用寄存器 AX、BX、CX、DXi. 累加器(Accumulator) AXii. 基址寄存器(Base) BXiii. 計數寄存器(Count) CXiv. 數據寄存器(Data) DXb) 4個專用寄存器i. 基數指針寄存器(Base) BPii. 堆棧指針寄存器(Stack) SPiii. 源變址寄存器(Source) SIiv. 目的變址寄存器 DIc) 標志寄存器 FLAGSd) 算數邏輯部件ALU (算術運算和邏輯運算)7.8086的標志寄存器(清楚作用)
a. 狀態標識6個a) 符號標志 SF [運算結果的最高位為1時SF=1]b) 零標志 ZF [當運算結果為0時ZF=1]c) 奇偶標志 PF [當運算結果的低8位中1的個數為偶數時PF=1]d) 進位標志 CF [當進行加減法運算時,若最高位向前有進借位,則CF=1]e) 輔助進位標志 AF [在加減法操作中,D3向D4有進借位發生是,AF=1]f) 溢出標志 OF [當算術運算的結果超過了帶符號數的范圍,即溢出時OF=1] b. 控制標志3個a) 方向標志 DF [方向標志位在是形成換操作指令時控制操作的方向,DF=1時按減地址方式進行]b) 中斷允許標志 IF c) 跟蹤標志 TF 有符號有意義:ZF SF PF OF 無符號有意義:PF ZF CF AF8.8086最小工作模式配置(背)
a.有1片8284A,作為時鐘發生器,提供時鐘信號和同步ready信號和reset信號 b.有3片8282或74LS273,用來作為地址鎖存器,暫存地址 c.有2片8286/8287,作為總線收發器,增加數據總線的驅動能力 d.有1片8086,作為微處理器,負責CPU對存儲器和IO端口的數據傳輸以及指令的執行最小模式下的引腳9.8086最大模式配置(背)
a. 有兩個或多個8086,作為微處理器,功能同最小模式 b. 有1片8284A,作為時鐘發生器,功能同最小模式 c. 有3片8282或74Ls273,用來做地址鎖存器,功能同最小模式 d. 有2片8286/8287,作為總線收發器,功能同最小模式 e. 有1片8288,作為總線控制器,控 制總線是否讓出 f. 有1片8259A,作為中斷控制器,控制是否處理中斷8086系統中 BHE# 和 A0 引腳
1.AD15 ~ AD0 為地址/數據總線,T1 時用作地址總線的低 16 位,其他時間用作數據總線
2.A19 ~ A16 / S6 ~ S3為地址狀態總線,T1 時用作地址總線高 4 位,其他時間指示 CPU 狀態信息
3.34 號引腳 #BHE/S7 總線高允許 / 狀態信號,T1 時作為高允許信號,#BHE 低電平時把讀寫的 8 位數據與 AD15 ~ AD8 聯通,與 A0 結合以決定是高字節工作還是低字節工作。AD0 除了傳輸數據或地址信息還作為低 8 位數據的選通信號
奇地址:最低存儲單元地址為奇數——即地址最低位 A0 = 1
偶地址:最低存儲單元地址為偶數——即地址最低位 A0 = 0
8086 每個周期可以訪問 16 位信息,
變量地址為偶地址時,只需一個總線周期。
如果變量為奇地址時,則要兩個連續總線周期。
8086 的存儲空間時分成兩個 512K 的存儲體,偶存儲體和奇存儲體。
低 8 位 D7 ~ D0 數據總線聯接偶存儲體,
高 8 位 D15 ~ D8 數據總線聯接奇存儲體。
偶地址存儲時:一個 16 位字數據,高 8 位存儲在奇存儲體,低 8 位存儲在偶存儲體。
奇地址存儲時:相反。
這樣在讀或寫字數據時,
偶地址存儲方式:可以在一個總線周期完成讀寫。
奇地址存儲方式:讀寫時則有一個字節交換過程,也就是要用總線的高 8 位去讀寫字數據的低 8 位,再用總線的低 8 位讀寫字數據的高 8 位,需要兩個總線周期才能完成一個字數據的讀寫。
10.8086讀寫時序(要背這不科學,時序不是用來查的嗎,如果要考還是背一下吧)
1.工作周期 由4個時鐘周期組成,時鐘周期是CPU最基本的時間計量單位 4個時鐘周期稱為4個狀態:T1、T2、T3、T4 T1狀態時ALE信號有效,作用為地址鎖存 Tw放在T3和T4之間 插入Tw的個數取決于READY信號的持續時間 2.讀寫所用的信號線 WR#和RD#:寫信號和讀信號,低電平有效 IO/M#:低電平為存儲器操作,高電平為IO口操作 ALE:地址鎖存信號,高電平不鎖存為地址信號,下降沿鎖存 DEN#:數據允許信號,低電平有效 DT/R#:數據傳送方向控制信號,低電平接收數據,高電平發送數據 A8~A15:8位地址信號 AD0~AD7:8位地址/數據復用信號,ALE為高時為地址信號,DEN為低時為數據信號 3.讀寫工作時序 要進行讀寫存儲器操作時序: 讀存儲器:RD#拉低,WR#拉高,IO/M#拉低,DEN#拉低,DT/R#拉低 寫存儲器:RD#拉高,WR#拉低,IO/M#拉低,DEN#拉低,DT/R#拉高 讀寫IO時序: 讀IO:RD#拉低,WR#拉高,IO/M#拉高,DEN#拉低,DT/R#拉低 寫IO:RD#拉高,WR#拉低,IO/M#拉高,DEN#拉低,DT/R#拉高第三章
1.尋址方式是什么,有哪些?(要會判斷指令的類型)
尋址方式即獲得操作數地址的方法 有以下8種方法 a. 立即數尋址 MOV AX,3102Ha) 立即數只能作為源操作數,不能作為目的操作數 b. 直接尋址 MOV AX,[3102H]段地址默認為數據段 c. 寄存器尋址 MOV SI,AX d) 寄存器間接尋址 MOV AX , [BX] e) 寄存器相對尋址 MOV AX , [SI + 100] f) 基址加變址的尋址 MOV AX , [BX + SI] g) 相對的基址加變址尋址 MOV AX , [BP + SI + 100] h) 隱含尋址數據傳送指令
1.通用數據傳送指令 (1)傳送指令MOV dset,src注意點1.兩個操作數字長必須相同2.兩個操作數不能同時存儲器操作數3.不能用立即數直接給段寄存器賦值4.兩個操作數不能同時為段寄存器 (2)堆棧指令push,pop必須是16位,只能是寄存器或存儲器操作數 (3)交換指令XCHG不能為段地址操作數 (4)查表指令XLAT查找元素序號放在AL中2.輸入輸出指令IN,OUTIN直接尋址:I/O端口地址為8位寄存器間接尋址:端口地址為16位,DX寄存器指定OUT將AL或AX的內容輸出到端口DX用來存放端口,AX(AL)用來存放數據3.取址偏移地址指令LEA 4.其他傳送地址(了解)算術運算指令
1.加法運算指令 (1)普通加法指令ADD (2)帶進位位的加法指令ADC ADD和ADC的區別就是ADC在運算時要把CF帶進去一起做運算 (3)加1指令INC INC不影響CF位2.減法運算指令 (1)不考慮借位的減法指令SUB (2)考慮借位的減法指令SBB (3)減1指令DEC 常用于修改循環次數 (4)求補指令NEG (5)比較指令CMP 會對狀態位產生影響,后面一般跟條件轉移指令相等關系 若相等,ZF=1大小關系1.對于無符號數,由CF確定,若CF=0,前面一個大于后面一個2.對于有符號若符號相同,相減不會溢出(OF=0),判斷SF,SF=0,前面一個大于后面一個若不相同,則可能溢出;若無溢出(OF=0),SF=0,前面一個大于后面一個若有溢出(OF=1),SF=1,前面一個大于后面一個 3.乘法指令MUL 4.除法指令DIV 5.其他運算指令邏輯運算和移位指令
1.邏輯運算指令 (1)邏輯與指令AND (2)邏輯或指令OR (3)邏輯非指令NOT (4)邏輯異或指令XOR (5)測試指令TEST 和AND邏輯相同,但不將與的結果送到目標操作數,對標志位有影響2.移位指令 (1)非循環移位指令1.算術左移和邏輯左移指令SAL/SHL2.算術右移和邏輯右移指令SAR/SHR (2)循環移位指令1.不帶CF的循環左移和右移指令ROL/ROR2.帶CF的循環左移和右移指令RCL/RCR串操作指令
1.重復操作前綴(1)REP:無條件重復前綴,重復執行指令規定的操作,直到(CX=0)(2)REPE/REPZ:相等/結果為零時重復,ZF=1,且CX不等于0時重復(3)REPNE/REPNZ;不相等/結果不為零時重復,ZF-0,且CX不等于0時重復 2.串操作指令(1)串傳送指令串傳送指令有三種指令格式MOBS,MOVSB,MOVSWMOVSB一次傳送一個字節(2)串比較指令串比較指令有三種格式CMPS,CMPSB,CMPSWCNMSB按字節進行補繳,CMOSW按字進行比較(3)串掃描指令(4)串裝入指令(5)串存儲指令程序控制指令
1.無條件轉移指令JMP(1)段內直接轉移(2)段內間接轉移 改IP(3)段間直接轉移(4)段間間接轉移 2.條件轉移指令JCC<條件轉移指令表> P138 3.循環控制指令(1)LOOP (2)LOOPZ指令(3)LOOPNZ指令 4.過程調用和返回(1)段內直接調用CALL(2)段內間接調用(3)段間直接調用(4)段間間接調用(5)返回指令RET 5.中斷指令(1)中斷指令INT(2)中斷返回指令IRET程序題代碼
;1.求兩個無符號雙字節長數之和,兩數分別放在MEM1和MEM2中,和放在SUM中;程序 DATA SEGMENTMEM1 DW 1122H,3344HMEM2 DW 5566H,7788HSUM DW 2 ? DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AX ;取數據段地址LEA BX,MEM1 ;取MEM1首地址LEA SI,MEM2 ;取MEM2首地址LEA DI,SUM ;取SUM首地址MOV CL,2 ;LOOP兩次CLC ;請CF標志位 AGAIN:MOV AX,[BX];將MEM1數據放到AX中ADC AX,[SI];加上MEM2MOV [DI],AX;將結果送到SUMADD BX,2;地址+2ADD SI,2;地址+2ADD DI,2;地址+2LOOP AGAINHLT ;暫停指令 CODE ENDSEND START;2.找最大值(無符號類型);程序 DATA SEGMENTARRAY DB 2,0,3,4,5,6,7,8,9MAX DB DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROCMOV AX,DATAMOV DS,AX;取數據段地址MOV BX,0MOV AL,ARRAY[BX];將第一個數存到AL中MOV CX,9;循環9次MOV BX,1;指向第二個數 NEXT:CMP AL,ARRAY[BX];比較JNB XXX;JNB不低于,也可以用JAEMOV AL,ARRAY[BX];將較大的數放到AL XXX:INC BX;如果較大數不變,則跳轉至此LOOP NEXTMOV MAX,AL;最大數送到MAX MAIN ENDP CODE ENDSEND MAIN;3.找最大值(有符號型);程序 DATA SEGMENTARRAY DB 34H,2,3,4,5,6,7,8,9MAX DB DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROCMOV AX,DATAMOV DS,AXMOV BX,0MOV AL,ARRAY[BX]MOV CX,9;循環9次MOV BX,1 NEXT:CMP AL,ARRAY[BX]JNL XXX;JNL不小于,也可以用JGEMOV AL,ARRAY[BX] XXX:INC BXLOOP NEXTMOV MAX,AL MAIN ENDP CODE ENDSEND MAIN;4.兩個數組相減到另一個數組中;程序 ;不考慮相減為0情況 DATA SEGMENTARRAY1 DB 14H,2,3,4,5,6,7,8,9,2ARRAY2 DB 12H,4,5,6,7,8,9,0,1,3ARRAY3 DB 10 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROCMOV AX,DATA;取數據段地址MOV DS,AXMOV BX,0;指向第一個數MOV CX,10;循環10次 NEXT:MOV AL,ARRAY1[BX];將第一個數放至ALSUB AL,ARRAY2[BX];用第一個數減去第二個數JZ XXXMOV ARRAY3[BX],ALINC BXLOOP NEXT XXX:HLT MAIN ENDP CODE ENDSEND MAIN;考慮相減為0情況 DATA SEGMENTARRAY1 DB 14H,2,3,4,5,6,7,8,9,2ARRAY2 DB 12H,2,5,6,7,8,9,0,1,3ARRAY3 DB 10 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROCMOV AX,DATA;取數據段地址MOV DS,AXMOV BX,0;指向第一個數MOV CX,10;循環10次 NEXT:MOV AL,ARRAY1[BX];將第一個數放至ALSUB AL,ARRAY2[BX];用第一個數減去第二個數MOV ARRAY3[BX],AL;考慮相減為0情況INC BXLOOP NEXTMAIN ENDP CODE ENDSEND MAIN接口題代碼
;1.6116(2Kx8bit) 地址61000H~61FFFH 電路;程序要求:將存儲空間寫滿55H;-----main code------ MOV AX,6100H MOV DS,AXMOV AL,55H MOV CX,1000H NEXT:MOV [BX],ALINT BXLOOP NEXT ;-----main code------;2.8253計數器 地址D0D0H~D0D3;程序要求:初始化計數器0初值20,方波發生器,計數器1初值2000,頻率發生器,計數器2初值1000,頻率發生器 ;-----main code------ MOV DX D0D3H MOV AL,00010110B;計數器0,低8位計數,工作方式3,二進制 OUT DX,AL;寫控制字 ;寫計數器0初值 MOV DX,D0D0H MOV AL,20 OUT DX,ALMOV DX D0D3H MOV AL,01110100B;計數器1,雙字節計數,工作方式2,二進制 OUT DX,AL;寫控制字 ;寫計數器1初值 MOV DX,D0D1H MOV AX,2000 OUT DX,AL MOV AL,AH OUT DX,ALMOV DX D0D3H MOV AL,10110100B;計數器1,雙字節計數,工作方式2,二進制 OUT DX,AL;寫控制字 ;寫計數器2初值 MOV DX,D0D2H MOV AX,1000 OUT DX,AL MOV AL,AH OUT DX,AL ;-----main code------;3.8255點燈 地址80~83H;程序要求:讀入按鍵,控制燈;-----main code------ MOV AL,10010000B;PA口讀,PB口寫 OUT 83H,AL;寫控制字NEXT:IN AL,80H;讀取PA端口AND AL,111BCMP AL,100B;后兩個按下JNE NEXT1MOV AL,011B;點亮第一個OUT 81H,ALJMP NEXTNEXT1:CMP AL,000B;全部按下JNE NEXT2MOV AL,110B;點亮最后一個OUT 81H,ALJMP NEXTNEXT2:MOV AL,101B;點亮中間一個OUT 81H,ALJMP NEXT ;-----main code------;4.8255 打印機 地址FBC0~FBC3H;-----main code------ MOV AL,10000001B;PA輸出,PC輸入 MOV DX,FBC3H OUT DX,AL;寫控制MOV AL,00001101B;高四位默認0,1101PC6置1 OUT DX,AL;寫PC控制MOV CX,COUNT;自定義長度 MOV SI,OFFSET DATA;獲取首地址 NEXT:MOV DX,FBC2H;pc口使能WAIT1:IN AL,DX;讀取PC口TEST AL,10BJNZ WAIT1;等待busyMOV AL,[SI]MOV DX,FBC0HOUT DX,AL;輸出數據MOV DX,FBC2HMOV AL,0OUT DX,ALMOV AL,40HOUT DX,AL;pc6寫一個負脈沖INC SI;地址+1LOOP NEXTHLT ;-----main code------ 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結