微型计算机及接口技术笔记,微机原理与接口技术笔记(一)
8088/8086 CPU特點(diǎn)
采用并行流水線工作方式
通過設(shè)置指令預(yù)取隊(duì)列實(shí)現(xiàn)
對內(nèi)存進(jìn)行分段管理
分為4個段并設(shè)置地址段寄存器,實(shí)現(xiàn)對1MB空間的尋址
支持協(xié)處理器
最小模式過程
8088送ALE給地址鎖存器,地址不會改變
地址線和數(shù)據(jù)線
(AD_0-AD_7):低八位地址和低八位數(shù)據(jù)信號分時復(fù)用.傳送地址時信號為單向,傳送數(shù)據(jù)時為雙向.
(A_{16}-A_{19}):高4位地址信號,與狀態(tài)信號分時復(fù)用
(A_8-A_{15}):8位地址信號
WR 寫信號
RD 讀信號
IO/M 訪問內(nèi)存/訪問接口
DEN 低電平有效,允許讀寫操作
DT/R 傳送方向控制
READY 時鐘周期,相當(dāng)于CLK
第三個周期Ready是高電平,就表示工作結(jié)束,進(jìn)行第四個周期,如果是低電平,就要插入一個等待周期
中斷請求響應(yīng)
INTR 可屏蔽中斷請求輸入端
NMI 非屏蔽中斷請求輸入端
INTA 中斷響應(yīng)輸出端
總線保持信號
HOLD 總線保持請求信號輸入端,CPU以外的其他設(shè)備要求占用總線時,向CPU發(fā)出請求
HLDA,CPU對HOLD的響應(yīng)信號
執(zhí)行單元EU
總線接口單元BIU
從內(nèi)存中取指令到指令預(yù)取隊(duì)列
負(fù)責(zé)與內(nèi)存或者IO接口的數(shù)據(jù)傳送
在執(zhí)行轉(zhuǎn)移程序時,BIU使指令預(yù)取隊(duì)列復(fù)位,從指定的新地址取指令,并立即傳給執(zhí)行單元執(zhí)行.
MN/MX 1-最大模式,0-最小模式
8088 內(nèi)部寄存器
8個通用寄存器
數(shù)據(jù)寄存器
AX 累加器
BX 基址寄存器
CX 計(jì)數(shù)寄存器(循環(huán) 串操作)
DX 數(shù)據(jù)寄存器
地址指針寄存器
SP 堆棧指針寄存器,棧頂
BP 訪問存放在內(nèi)存單元的偏移地址
BX指向的數(shù)據(jù)段,BP指向的堆棧段
變址寄存器
SI 源
DI 目標(biāo)
IP PC
FLAGS
C 進(jìn)位
F 溢出 兩個符號數(shù),看兩個進(jìn)位是否相同就可以判斷
Z 為0時為1
S 運(yùn)算結(jié)果最高位為1時
P 1的個數(shù)為偶數(shù)時為1
A bit3向bit4有進(jìn)位時為1
T 單步工作
IF 中斷允許標(biāo)志位,為1時可以相應(yīng)可屏蔽中斷請求
D 串操作時確定方向
段寄存器(存放段基地址)
CS 代碼段 存放指令代碼
DS 數(shù)據(jù)段 存放數(shù)據(jù)
ES 附加段 存放數(shù)據(jù)
SS 堆棧段 暫時不用但是要保存的數(shù)據(jù)
實(shí)地址尋址
物理地址=段基地址*16+偏移地址
一個內(nèi)存單元在同一時刻可以屬于兩個不同類型的段.
堆棧段
該看p23
8位寄存器中存放的均為運(yùn)算的數(shù)據(jù)
AX CX一定是數(shù)據(jù),BX,DX可能是地址
匯編
MOV
MOV指令不影響標(biāo)志位
兩操作數(shù)長度相同
源操作數(shù) 寄存器 存儲器 立即數(shù) 目的操作數(shù) 寄存器 存儲器
不允許同時為存儲器
兩操作數(shù)不能同時為段寄存器
源操作數(shù)是立即數(shù)時,目標(biāo)操作數(shù)不能是段寄存器
IP和CS不作為目標(biāo)操作數(shù),FLAGS不作為操作數(shù)
不能用立即尋址給段寄存器賦值
MOV DX,09H(√)DX高八位是0,低八位是9
將 * 的ASCII碼送入內(nèi)存數(shù)據(jù)1000H開始的100個單元中
MOV DI,1000H
MOV CX,64H//常數(shù)100
MOV AL,2AH
AGAIN:MOV [DI],AL
INC DI
DEC CX
JNZ AGAIN//CX不為0就跳轉(zhuǎn)
HLT
堆棧
先進(jìn)先出
push先SP--,再存數(shù),pop先取數(shù)到AL,再SP++
以字為單位,一定是16位,沒有8位
操作數(shù)可以是寄存器和存儲器,但不能是立即數(shù),但操作指令不能是立即數(shù)ddddddddddddd
底下是高地址,上面是低地址,然后先壓低地址,再壓高地址
交換指令
沒有源操作數(shù)和目的操作數(shù),一個立即數(shù)也不能有
不允許使用段寄存器
查表指令
用BX表示首地址,AL表示位移量
BX+AL所指單元送AL
相當(dāng)于AL是數(shù)組首地址,BX是下標(biāo),進(jìn)行一次iloc訪問
字符擴(kuò)展指令
符號位擴(kuò)展到高位,無符號數(shù)補(bǔ)0,隱含的操作數(shù)AX、DX
CBW 字節(jié)到字
AL內(nèi)容擴(kuò)展到AX
最高位為1,AH=FFH
最高位為0,AH=00H
CWD 字到雙字
AX內(nèi)容擴(kuò)展到DX,AX
最高位1,DX=FFFFH
最高位0,DX=0000H
LEA指令
源操作數(shù)必須是存儲器,目的操作數(shù)通常是間址寄存器
將變量的16位偏移地址寫入到目標(biāo)寄存器
MOV讀取的內(nèi)容,LEA讀取的地址
將數(shù)據(jù)段中首地址為MEM1的50個字節(jié)的數(shù)據(jù)傳送到同一邏輯段首地址為MEM2的區(qū)域存放,編寫相應(yīng)的程序段。
LEA SI,MEM1
LEA DI,MEM2
MOV CL,50
NEXT:MOV AL,[SI]
MOV [DI],AL//兩個存儲器中間不能直接傳,需要通過寄存器
INC SI
INC DI
JNZ NEXT
HLT
LDS、LES
將一個32位的遠(yuǎn)地址指針寫入目標(biāo)寄存器
LDS:將源操作數(shù)的偏移地址送目標(biāo)寄存器
LES:將源操作數(shù)的偏移地址送目標(biāo)寄存器,將源操作數(shù)的段地址送給ES
標(biāo)志傳送指令
LAHF:將FLAGS低八位裝入AH
SAHF:AH裝入FLAGS的低八位
PUSHF:stack
POPF Flags
PUSHA 所有的Rc16入棧 POPA
Rc16:AX,CX,DX,BX,SP,BP,SI,DI
I/O端口
IO接口中用于存儲數(shù)據(jù),可以直接被CPU訪問的寄存器.
IN acc,PORT 從端口地址讀入數(shù)據(jù)到累加器
OUT PORT,acc 將累加器的值輸出到端口中,acc只能是AL/AX
8位時,直接給出8位地址,16位時,端口地址由DX指定.
算術(shù)運(yùn)算類指令
ADD
ADC 帶進(jìn)位加法 d
INC,DEC將操作數(shù)視為無符號數(shù),會影響標(biāo)志位,但是不影響進(jìn)位標(biāo)志C
無符號進(jìn)位標(biāo)志看C,有符號看O
在內(nèi)存的First和Secontd開始的區(qū)域中分別 存放著2F365H和 5E024 H兩個數(shù),要求求 其和,并存入Third中。
注意字長是32位,加完一次后需要再加2
MOV AX,First
ADD AX,Second
MOV Third,AX
MOV AX,First+2//要考慮進(jìn)位,使用ADC
ADC AX,Second+2
MOV Third+2,AX
求內(nèi)存數(shù)據(jù)段中M1為首和M2為首的兩個20字節(jié)數(shù)之和,并將結(jié)果寫入M2為首的區(qū)域.
//按字節(jié)
LEA SI,M1
LEA DI,M2
MOV CX,20
CLC//make CF = 0
NEXT:
MOV AL,[SI]
ADC [DI],AL// [DI]+Al+CF->[DI]
INC SI
INC DI
DEC CX
JNZ NEXT
HLT//暫停
//按字2
LEA SI,M1
LEA DI,M2
MOV CX,10
CLC//make CF = 0
NEXT:
MOV AX,[SI]
ADC [DI],AX// [DI]+Al+CF->[DI]
ADD SI,2
ADD DI,2
DEC CX
JNZ NEXT
HLT//暫停
SBB (OPRD1-OPRD2-CF->OPRD1)
NEG (0-OPRD->OPRD),執(zhí)行后除非操作數(shù)為0,否則CF都是1.
80H或者8000H執(zhí)行后結(jié)果不變,但是OF置1(溢出),其他情況下均置0.就是各位取反+1
CMP僅影響標(biāo)志位
在減法中,小的減大的表示有借位,C=1;
無符號數(shù) CF=0 AX>=BX, CF=1,AX
有符號數(shù) OF SF相同時,AX>=BX,否則AX
20個數(shù)中找最大數(shù)
LEA BX,MAX
LEA SI,BUF
MOV CL,20
MOV AL,[SI]
NEXT:
INC SI
CMP AL,[SI]
JNC GOON //CF=0轉(zhuǎn)移
XCHG [SI],AL
GOON:DEC CL
JNZ NEXT//如果不為0就跳轉(zhuǎn)
MOV [BX],AL
HLT
乘除運(yùn)算指令
乘法指令隱含了存放被乘數(shù)的AL或AX,以及存放結(jié)果的AX或AX DX.
無符號乘法的操作數(shù)不能是立即數(shù)
除法
OPRD字節(jié)數(shù),執(zhí)行AX/OPRD
AL=商,AH=余數(shù)
OPRD雙字節(jié)數(shù)
DXAX/OPRD
AX=商,DX=余數(shù)
INC,DEC的執(zhí)行不會影響CF,其他算術(shù)類指令會影響狀態(tài)標(biāo)志位
乘法運(yùn)算中,乘積是乘數(shù)的雙倍字長
除法要求被除數(shù)是除數(shù)的雙倍字長
邏輯運(yùn)算指令
除了"非",其余指令的執(zhí)行都會影響除AF外的標(biāo)志
無論運(yùn)算結(jié)果如何,都會使CFOF清零
AND AL,0FH 實(shí)現(xiàn)掩碼
AND AX,AX 使得CFOF清零
從地址為3F8H端口讀入一個字節(jié)數(shù),如果該數(shù)bit1位為1,則可從38FH端口將DATA為首地址的1個字輸出,否則不能進(jìn)行數(shù)據(jù)傳送
MOV DX,3F8H
WATT:IN AL,DX
AND Al,02H
JZ WATT
MOV DX,38FH
MOV AX,DATA
OUT DX,AX
OR 使得某些位為1
非運(yùn)算對標(biāo)志位無影響
XOR AX,AX 清零
TEST OPRD1,OPRD2,執(zhí)行與運(yùn)算,demo結(jié)果不寫回
從地址為3F8H端口讀入一個字節(jié)數(shù),如果該數(shù)bit1位 bit3位和bit5位同時為1,則可從38FH端口將DATA為首地址的1個字輸出,否則不能進(jìn)行數(shù)據(jù)傳送
LEA SI,DATA
MOV DX,3F8H
WATT:IN AL,DX
AND AL,2AH
XOR AL,2AH//0010 1010,如果這些位都是1,那么XOR后一定為0
JNZ WATT
MOV DX,38FH
MOV AX,[SI]
OUT DX,AX
移位操作指令
當(dāng)目標(biāo)操作數(shù)為存儲器操作數(shù)時,需要說明其字長,移動的位數(shù)只能是1或者是CL
算術(shù)左移邏輯左移:最高位移到CF,最低位為0
邏輯右移:最低位->CF,最高位0
算術(shù)右移:最低位->CF,最高位變符號位
循環(huán)移位可以戴震進(jìn)位也可以不帶CF
循環(huán)指令左右 對于某些狀態(tài)進(jìn)行測試
高位和低位的交換
與非循環(huán)移位組成32位或者更長字?jǐn)?shù)的移位
LEA SI,MI
LEA DI,M2
MOV CH,4
NEXT:MOV AL,[SI]
MOV BL,AL
AND AL,0FH
OR AL,30H
MOV [DI],AL
INC DI
MOV AL,BL//還原
MOV CL,4
SHR AL,CL
OR AL,30H
MOV [DI],AL
INC DI
INC SI
DEC CH
JNZ NEXT
HLT
串操作指令
要求兩個操作數(shù)都在存儲器,針對數(shù)據(jù)塊和存儲器的操作
串所在的區(qū)域 串的首地址 串的長度 方向
源串一般在數(shù)據(jù)段,偏移地址SI指定
目標(biāo)串必須在附加段,由DI指定
串的長度由CX指定
操作方向DF=0增地址,DF=1減地址
REP CX!=0時,REP后的指令將繼續(xù)重復(fù)執(zhí)行
REPE CX!=0且ZF=1,重復(fù)執(zhí)行
REPNE CX!=0且ZF=0,重復(fù)指令
MOVS
增地址
串傳送 指針指向串尾+1
串比較:指針指向結(jié)束位+1
減地址
串尾-1
結(jié)束位-1
串掃描指令 用于在指定存儲區(qū)域中尋找某個關(guān)鍵字
SCAS OPRD
MOV DI,2000H
MOV BX,DI
MOV CX,0AH
MOV AL,'A'
CLD//將DF清零,為增方向
REPNZ SCASB
JZ FOUND
MOV DI,0
JMP DONE
FOUND:DEC DI//注意停下的時候還在+1的位置
MOV DATA2,DI
INC DI
SUB DI,BX
DONE:
MOV DATA1,DI
HLT
LODS OPRD
AL
AX
將某個區(qū)域的數(shù)據(jù)串依次裝入累加器,以便顯示或輸出到接口,
串存儲指令
STOS OPRD
AL -> [ES:DI]
AX -> [ES:DI]
用于將內(nèi)存中的某個區(qū)域置成相同的值
注意事項(xiàng)
需要定義附加段
需要設(shè)置數(shù)據(jù)的操作方向
源串和目標(biāo)串的指針分別為SI和DI
傳送類指令前加無條件重復(fù)前綴
串比較類指令前加條件重復(fù)前綴,但前綴不影響ZF狀態(tài)
?
總結(jié)
以上是生活随笔為你收集整理的微型计算机及接口技术笔记,微机原理与接口技术笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全自动驾驶或撞车?特斯拉大召回36万辆车
- 下一篇: 计算机知识产权结合,计算机知识产权.do