目錄
一、指令概述
二、指令分類
三、擴(kuò)展操作碼
四、指令尋址
五、數(shù)據(jù)尋址
六、x86匯編指令
一、指令概述
計算機(jī)指令:指示計算機(jī)硬件進(jìn)行某種操作的命令
機(jī)器指令:使用二進(jìn)制編碼來表示的計算機(jī)指令
- 能被計算機(jī)硬件系統(tǒng)識別并執(zhí)行的特殊的0/1代碼串(機(jī)器碼)
- 指定了計算機(jī)硬件的某種特定操作,不同計算機(jī)硬件能識別并執(zhí)行的機(jī)器碼也不同
指令系統(tǒng):一臺計算機(jī)的所有機(jī)器指令的集合(指令集)
匯編指令:機(jī)器指令的助記符
指令集體系架構(gòu) ISA:Instruction-Set Architecture
- 處理所支持的的指令集(匯編指令集及機(jī)器指令集)及其操作數(shù)的相關(guān)信息(寄存器、存儲器、I/O 等)
- 在系統(tǒng)軟件設(shè)計者與處理器硬件設(shè)計者之間提供了一個抽象層,軟件設(shè)計者依據(jù) ISA 知道如何編寫機(jī)器語言程序來控制與使用處理器硬件,硬件設(shè)計者依據(jù) ISA 來設(shè)計微體系結(jié)構(gòu),并實現(xiàn)能執(zhí)行機(jī)器語言的處理器硬件
指令格式:由操作碼(OP)和地址碼(A)組成
指令信息:指令的功能、操作的對象(源操作數(shù))、操作的結(jié)果(目的操作數(shù))、下一條指令地址
- 操作碼指明該指令的功能,也規(guī)定了指令格式
- 地址碼包含了源操作數(shù)、目的操作數(shù)和下一條指令地址
馮諾依曼體系結(jié)構(gòu):程序代碼順序存放在存儲器中
- 下一條指令地址:總是由程序計數(shù)器PC隱含指出
- PC:存放指令地址(指令在存儲器中的地址)
- 非轉(zhuǎn)移類指令:根據(jù)PC取指令,PC自增(指向下一條指令)
- 轉(zhuǎn)移類指令:根據(jù)PC取指令,PC自增(指向下一條指令),分析執(zhí)行指令,修改PC為要轉(zhuǎn)移到的目標(biāo)指令的地址(轉(zhuǎn)移指令的地址碼為轉(zhuǎn)移目標(biāo)地址)
- 控制器總能從PC獲取下一條指令的地址信息,保證計算機(jī)自動高速、循環(huán)往復(fù)地“取指令、分析指令、執(zhí)行指令”
指令字:機(jī)器指令的二進(jìn)制編碼,也叫機(jī)器字
指令字長:一條機(jī)器指令中所包含的二進(jìn)制碼的位數(shù),不同計算機(jī)的指令字長可能不同
機(jī)器字長:計算機(jī)一次所處理的二進(jìn)制數(shù)位數(shù)
二、指令分類
根據(jù)地址碼格式分類
根據(jù)操作類型進(jìn)行分類
三、擴(kuò)展操作碼
操作碼擴(kuò)展技術(shù):一種重要的指令優(yōu)化技術(shù),將不使用的地址碼字段擴(kuò)展為操作碼
四、指令尋址
尋址方式:確定本條指令的操作數(shù)地址(數(shù)據(jù)尋址),以及下一條要執(zhí)行的指令地址(指令尋址)
- 數(shù)據(jù)尋址:當(dāng)前指令的地址碼給出
- 指令尋址:下一條預(yù)執(zhí)行指令的地址(始終有程序計數(shù)器PC給出)
順序?qū)ぶ贩绞剑?/strong>PC + "1" -> PC,此處的 “1” 代表一個指令字長
跳躍尋址方式:當(dāng)程序順序執(zhí)行遇到轉(zhuǎn)移指令時,PC就不再是+“1”,而是由本條轉(zhuǎn)移指令的地址碼字段給出的跳躍地址,或者由指令的地址碼字段經(jīng)過相對尋址方式計算得出跳躍后的新指令地址,按該地址去取下一條指令。
五、數(shù)據(jù)尋址
數(shù)據(jù)尋址:確定本條指令的地址碼指明的真實地址
- 形式地址:指令的地址碼字段代碼,記作A,不一定是數(shù)據(jù)的真實地址
- 有效地址:操作數(shù)在存儲器中的真實地址,記作EA,由尋址方式和形式地址共同確定
立即尋址
- 在指令中的地址碼處直接給出操作數(shù),即指令的地址碼字段為操作數(shù)(立即數(shù))
- 優(yōu)點:指令的執(zhí)行速度快
- 缺點:操作數(shù)是指令的一部分,不便于修改
- 通常用“#”代表立即尋址的尋址特征
直接尋址
- 指令字中的形式地址A就是操作數(shù)的真實地址EA,即 EA = A
- 優(yōu)點:取出指令就得到了EA,執(zhí)行訪問主存1次,就得到了操作數(shù),速度較快
- 缺點:A的位數(shù)限制了該指令操作數(shù)的尋址范圍,操作數(shù)的地址不易修改
間接尋址
- 指令的地址碼字段給出的形式地址A不是操作數(shù)的真實地址,而是操作數(shù)有效地址所在的存儲單元的地址,也就是操作數(shù)地址的地址,即 EA = (A)
- 取出指令,就得到了EA在主存的地址,共訪問主存2次才得到操作數(shù)
寄存器尋址
寄存器間接尋址
隱含尋址
- 不明顯地給出操作數(shù)的地址,而是在指令中隱含著操作數(shù)的地址
- 優(yōu)點:有利于縮短指令字長
- 缺點:需增加存儲操作數(shù)或隱含地址的硬件
基址尋址
- 基址寄存器存放了程序的起始位置,由os管理,其內(nèi)容無法被程序員修改
- 優(yōu)點:便于程序“浮動”,方便實現(xiàn)多道程序并發(fā)運(yùn)行
- 適用于多用戶計算機(jī)系統(tǒng),操作系統(tǒng)給每個用戶一個基地址并放入相應(yīng)的基址寄存器,在程序執(zhí)行的過程中,以基址為基準(zhǔn)自動進(jìn)行邏輯地址到物理地址的變換
變址尋址
- 有效地址EA等于指令字中的形式地址A與變址寄存器IX的內(nèi)容之和,即 EA = (IX)+A
- IX可為變址寄存器專用,也可用通用寄存器作為變址寄存器
- 變址寄存器是面向用戶的,內(nèi)容可修改(作為偏移量),形式地址A不變(基地址)
- 變址尋址通常用來對字符串處理、數(shù)組運(yùn)算等這類成組數(shù)據(jù)處理(在數(shù)據(jù)處理過程中,設(shè)定A為數(shù)組的首地址,不斷改變變址寄存器的內(nèi)容,便可很容易形成數(shù)組中任一數(shù)據(jù)的地址,適合編制循環(huán)程序)
基址變址尋址
- 在指令中指定一個基址寄存器和一個變址寄存器,指令中的地址碼給出位移量。有效地址由基址寄存器、變址寄存器中的值和位移量三者相加而成。
- 基址 + 變址,常用于訪問二維數(shù)組。
??????
相對尋址
- 把程序計數(shù)器PC的內(nèi)容加上指令格式中的形式地址A而形成操作數(shù)的有效地址EA,即 EA = (PC)+A,其中A是相對于PC所指地址的偏移量,可正可負(fù),補(bǔ)碼表示
- 優(yōu)點:操作數(shù)的地址不是固定的,它隨著PC值的變化而變化,并且與指令地址之間總是相差一個固定值,因此便于程序“浮動”(一段代碼在程序內(nèi)部的浮動)
- 相對尋址通常應(yīng)用于轉(zhuǎn)移指令
?
堆棧尋址
- 操作數(shù)放在堆棧中,隱含使用堆棧指針SP(Stack Pointer)作為操作數(shù)地址,即 EA = (SP)
- 堆棧是存儲器(或?qū)S眉拇嫫鹘M)中一塊特定的按“后進(jìn)先出”原則管理的存儲區(qū),該存儲區(qū)中被讀/寫單元的地址是一個特定的寄存器給出的,該寄存器成為堆棧指針SP
- 堆棧尋址主要用來暫存中斷和子程序調(diào)用時現(xiàn)場數(shù)據(jù)及返回地址
數(shù)據(jù)尋址方式總結(jié)
六、x86匯編指令
x86CPU的寄存器
算術(shù)運(yùn)算指令
邏輯運(yùn)算指令
轉(zhuǎn)移指令
循環(huán)控制指令
函數(shù)調(diào)用指令文章來源:http://www.zghlxwxcb.cn/news/detail-477690.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-477690.html
到了這里,關(guān)于【計算機(jī)組成原理與體系結(jié)構(gòu)】指令系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!