指令寻址方式与数据寻址方式
【README】
1.本文總結自bilibili《計算機組成原理(哈工大劉宏偉)》的視頻講解,非常棒,墻裂推薦;
2. cpu訪存寄存器耗費 10ns,訪問緩存(高速緩沖寄存器)耗費20ns,訪問主存200ns;訪問磁盤1ms;一般情況下,CPU內部執(zhí)行指令最長耗時是在訪問內存(外設除外),所以本文列出了尋址方式是否訪存的情況;
【1】指令尋址
- 方式1: 順序尋址 , PC+1 -> PC ;PC程序計數(shù)器寄存器用于存儲要執(zhí)行的下一條指令的地址;
- 方式2:跳躍尋址, 如 JMP 7;無條件跳轉到7號地址的指令;
【2】數(shù)據(jù)尋址
【2.1】 指令格式
| 操作碼 | 尋址特征 | 形式地址A |
形式地址 A:機器指令中操作數(shù)的形式地址;
有效地址EA:操作數(shù)的真實地址; effective address;
約定: 指令字長=存儲字長=機器字長;
【2.2】數(shù)據(jù)尋址方式(10種)
【2.2.1】立即尋址
形式地址A就是操作數(shù);(無需訪存)
【2.2.2】直接尋址
形式地址A就是有效地址EA;(無需訪存)
【2.2.3】 隱含尋址
操作數(shù)地址隱含在操作碼中;根據(jù)操作碼隱含指出操作數(shù)在某寄存器中;(如操作數(shù)在寄存器中,無需訪存)
【2.2.4】間接尋址
通過訪存取出形式地址A指向的內存單元的操作數(shù)有效地址EA;再通過訪存取出有效地址EA指向的內存單元的操作數(shù);(需要2次訪存)
【2.2.5】寄存器尋址
形式地址就是寄存器編號,操作數(shù)存儲在寄存器中;(無需訪存)
【2.2.6】寄存器間接尋址
形式地址就是寄存器編號,但操作數(shù)有效地址存儲在寄存器中;(需要1次訪問寄存器,1次訪存);
【2.2.7】基址尋址
操作數(shù)有效地址EA等于基址+形式地址A;其中基址存儲在專用寄存器或通用寄存器中,形式地址作為偏移量;專用寄存器或BR,通用寄存器如R0;(1次計算,1次訪存);(注意,基址不變,但形式地址改變,通常用于多道程序設計);
【2.2.8】變址尋址
操作數(shù)有效地址EA等于變址+形式地址A;其中變址存儲在變址寄存器IX(或通用寄存器)中;(1次計算,1次訪存);(注意,變址可變,但形式地址不變,通常用于遍歷數(shù)組);
【2.2.9】相對尋址
以pc寄存器作為基址寄存器,形式地址作為偏移量;
【2.2.10】堆棧尋址
操作數(shù)存儲在堆棧的棧頂中,其中棧底是低地址,棧頂是高地址(SP寄存器存儲);
Push:入棧;把ACC累加器的數(shù)據(jù)壓入棧頂(內存);
Pop:出棧:把棧頂元素出棧并存入ACC累加器;
【3】尋址示例:求數(shù)組N個元素均值
【3.1】 直接尋址實現(xiàn)
直接尋址步驟(共計N+2條指令):
| 序號 | 指令 | 描述 |
| 1 | LDA D | 把操作數(shù)存入ACC累加器中; |
| 2 | ADD D+1 | 把ACC內容與D+1內容相加;和存入ACC; |
| 3 | ADD D+2 | 把ACC內容與D+2內容相加;和存入ACC; |
| 4 | …… | 此處省略100字 |
| 5 | ADD D+(N-1) | 把ACC內容與(N-1)內容相加;和存入ACC; 至此,N個數(shù)據(jù)的累加和已完成,結果存入到ACC中; |
| 6 | DIV #N | 求ACC中和的均值 |
| 7 | STA ANS | 保存結果到內存單元 |
【3.2】變址尋址實現(xiàn)
變址尋址步驟(共計8條指令):
| 序號 | 指令 | 描述 |
| 1 | LDA #0 | 把ACC累加器清零; |
| 2 | LDX #0 | 把IX變址寄存器清零; |
| 3 | ADD X, D | 把變址寄存器IX的內容和指令中的形式地址存儲的操作數(shù)做加法,結果存入累加器ACC;D為形式地址,如數(shù)組0號元素地址; |
| 4 | INX | 變址寄存器IX自增1; |
| 5 | CPX #N | Compare-變址寄存器IX 與 N做比較; |
| 6 | BNE M | Not equal-若不等,則跳轉到M號指令(M=3); 通過這個循環(huán),我們累加; |
| 7 | DIV #N | 求和的均值 |
| 8 | STA ANS | 保存結果到內存單元 |
【小結】直接尋址和變址尋址對比:
直接尋址需要n+2條指令;而變址尋址只需要8條指令即可(變址尋址性能更優(yōu));
總結
以上是生活随笔為你收集整理的指令寻址方式与数据寻址方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 源码怎么制作成app(源码怎么制作成软件
- 下一篇: SpringBoot连接多RabbitM