在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

該怎樣去編寫CPU指令呢?過程是怎樣的

冬至配餃子 ? 來源:天奇工作室 ? 作者:LRC ? 2022-08-08 14:41 ? 次閱讀

計算機是用來做什么的?顧名思義用來計算的。不過在現代的計算機應用中,計算不是計算機主要工作內容(這個是后話)。

要計算我們就需要計算電路。計算電路有很多比如加法電路,減法電路,當然還有乘法除法等等。這些電路都是建立在與或非門的基礎之上的,這個在前面的章節有講解過。向這些電路輸入運算的數值,我們就能在輸出端很快(需要時間)得到我們想要的結果。但在計算之前計算機需要知道我們要做什么運算,用哪兩個數字做運算。

pYYBAGLwr0-AOhHLAABb2VGetl4355.png

通過DMX和MUX選取對應的運算電路

所以我們需要通過輸入相應的指令來通知計算機。我們都知道計算機內部處理的都是0和1的電壓信號,所以我們給計算機的指令也得是0和1。假設我們規定加法是000,減法是001,乘法是010,除法是011,當然還有100、101等等別的運算。如此輸入計算機內,那么計算機就能夠區分我們要做哪些運算了。還記得MUX和DMX嗎?就是用這個部件來區分的。只能夠區分哪些運算還不夠,還得知道是哪些數。那也很簡單,我們把要輸入的數字和指令一起給計算機,比如11111(加數一) 00000(加數二) 000(加法),它的意思就是把11111和00000(二進制數)加起來。當然你也可以把000放到最前面,只要你的計算機能理解就行。

那么我們得出答案了,這個結果是11111(顯而易見),這個數字會出現在加法器末端。那我想接著把這個數字乘二要怎么辦呢?你當然可以再輸11111 00001 010,這樣就可以把11111乘2了。但是能不能更快一點呢?比如直接調用加法器結果11111?我們這里就需要用到寄存器來暫時存住數據。寄存器原理我們在之前的章節也曾講過。我們現在設置32個寄存器分別命名為00000、00001……11111。


poYBAGLwr26AaijUAABqCKFS5gc590.png

左:通過MUX選擇要運算的寄存器

右:通過DMX選擇要寫回的寄存器

我們重寫之前的加法命令,現在可以是11111 00000 000 00000(寄存器編號)。意思是把11111和00000相加,結果放到00000寄存器里。那么我們接下來想把相加后的結果乘二,指令是不是就可以這樣寫:00000 10 010 00001 ?你應該懂得意思是把00000寄存器里的數字和10相乘,把積放到00001寄存器里。但是計算機不懂得,而你也只是結合了上下文才能如此理解。我同樣可以把這個指令認為是00和10相乘,把積放到01寄存器里。再者,我們輸入進計算機的數字是連續的,之間才不會有這么有愛的空格,這就出現歧義了。怎么處理這個問題呢?也很簡單。我們規定一下,這種直接寫入在指令的運算的數字我們稱之為立即數,這種立即數的長度必須是5位,因為如果不是和寄存器序號一樣是五位的話,計算機設計起來比較麻煩。我們只約定了長度還不夠,你還得告訴我這個五位數字是立即數還是寄存器序號。所以我們要再給指令加長兩位。如果是前一個五位數是立即數,那么第一個標志位是1。第二個同理。所以上面的這個乘二指令可以這樣寫了:00000 00010 010 0000101(指示第二個五位數是立即數)。

還沒結束,一般我們進行計算機編程的時候,代碼最好是干練的,這樣運行效率才最高。所以像第一個例子中的兩個立即數相加的情況是很少出現的,因為沒什么必要,程序員完全可以直接把兩個數字的和直接寫進程序中,不會讓計算機每次運行程序時為此再重算一遍。況且這種兩數相加完全可以通過兩次使用立即數的方法得到。所以我們可以把上述乘2指令簡化成00010 00000 010 00001 1。可以看到,前面兩個五位數字調換了順序,最后面的標志位變成了一位,其原因就是現在只會由第一個五位數字來充當立即數,而第二個永遠是寄存器數字。有人會問,這樣有什么好處嗎?有的,指令少了一位。意味著十條指令少了十位,以前內存可是按位賣的……所以在能滿足需求的情況下,要盡可能的短。但是這樣也有弊病。

這樣還不夠,有人認為立即數就五位夠什么用?這樣的立即數太小了。那我們把立即數擴充到十二位,范式是000000000000 00000 000 00000 0,我們把第一個五位數擴充到了十二位。那計算機每次遇到指令的時候就先看一下最后的標準位,判斷這條指令是立即數指令還是寄存器指令。如果是立即數指令,那就用得到十二位全部的數據,如果是寄存器指令,那就直接取最后五位數據,并對前面七位數字不作理會。有人有疑惑:不對啊,你前面剛說內存按位來賣,指令大小應該越少越好。那立即數指令長就長點,寄存器指令保持原長不好嗎,這樣不是很省內存空間嗎?有道理,所以這種變長(長度變化)指令是之前的x86的做法。可是時代變了,今昔不同往日,內存早已不是按位來賣的,這點空間浪費問題不大,定長指令是現在的主流。(注意,定長指令并不是極其嚴格的長度一致。64位的計算機可以執行32位指令甚至16位指令,為的是軟件的兼容性)更重要的是,這讓硬件解碼的工作來得輕松的多。并且想象一下,計算機指令是頭尾相連在一起的,如果指令長度不一樣,你甚至不知道第一個指令有多長,還得瘋狂斷句才能讀懂(文言文即視感)。

今天應該算是把指令編寫思路大致給講清楚了,我們下次具體看看risc-v指令集,即人家是怎么設計CPU指令的,和我今天講的有什么不同,以及如何在硬件中實現解碼指令。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120377
  • 運算電路
    +關注

    關注

    8

    文章

    115

    瀏覽量

    26713
  • 計算機
    +關注

    關注

    19

    文章

    7494

    瀏覽量

    87961
  • DMX
    DMX
    +關注

    關注

    0

    文章

    10

    瀏覽量

    8876
收藏 人收藏

    評論

    相關推薦

    ADS1256的輸出電路是怎樣設計的

    對于ADS1256的輸出電路是怎樣設計的?一般ADC測試中為了提高輸出的驅動能力,防止發射和振鈴現象,應該怎樣進行設計輸出電路
    發表于 11-22 06:01

    怎樣選擇合適的MOSFET

    怎樣選擇合適的MOSFET
    的頭像 發表于 10-01 08:01 ?276次閱讀
    <b class='flag-5'>怎樣</b>選擇合適的MOSFET

    OPA211 SHUTDOWN這個引腳起什么作用,應該怎樣連接

    第一次使用OPA211芯片,對SHUTDOWN這個引腳不是很理解,引腳起什么作用,應該怎樣連接
    發表于 09-11 08:29

    OPA842增益是怎樣算的,怎么確定各個阻值的參數

    只有當Rf和R1是253到256歐時候,增益才是1倍,可是芯片手冊上面推薦的數據是402歐,請問這個芯片的增益是怎樣算的,怎么確定各個阻值的參數? 新手剛上道,問題膚淺,請不要見怪。
    發表于 09-11 07:53

    單端輸入應用中如何連接差分放大器?怎樣計算阻值?

    單端輸入應用中如何連接差分放大器?怎樣計算阻值?
    發表于 09-04 07:39

    LMH7322怎樣改善輸出波形

    圖一 我按照LMH7322資料中,按照上圖一 畫的 PCB圖 (見圖二) 圖二 測試時輸出的波形為: 請問工程師 怎樣改善輸出波形
    發表于 09-02 06:57

    以下是放大脈沖信號后的輸出波形 ,輸入的脈沖信號為100HZ 占空比為 34% ,怎么改善波形

    你好下圖是我 放大脈沖信號后的輸出波形 ,輸入的脈沖信號為100HZ占空比為 34%,請問我怎樣改善波形
    發表于 08-29 06:13

    OPA735加OPA333,怎樣用TINA TI仿真?

    當輸入信號VG1從7.06V慢慢變化到7.22V時。 輸出電壓Vout的變化必須是接近線性變化的。我想知道我怎樣用TINA TI仿真?怎樣設置那個輸入信號VG1才能達到我的目的。因
    發表于 08-02 08:39

    電流探頭怎樣選擇,示波器可以直接測量電流嗎?

    怎樣選擇電流探頭?直接買一個示波器能不能測量電流信號?電流探頭是連接示波器和測試點,實現電流信號測量的關鍵工具,本文將為您揭示電流探頭的選擇要點,并解答一個常見疑問:示波器能否直接測量電流?
    的頭像 發表于 07-01 17:45 ?706次閱讀
    電流探頭<b class='flag-5'>該</b><b class='flag-5'>怎樣</b>選擇,示波器可以直接測量電流嗎?

    遇到液晶拼接屏幕左右黑屏的問題應該怎樣應對

    如今放眼望與商顯市場中,液晶拼接屏現在已廣泛的被應用于各個行業領域。在液晶拼接屏被廣泛應用的同時,用戶對液晶拼接屏的“五臟”并不了解,不管液晶拼接屏的性能有多么的穩定,但是日常中小故障也是難免會有的,比如,液晶拼接屏左右黑屏的現象就是問題常見之一。如果遇到此種問題,用戶應該怎樣應對
    的頭像 發表于 06-04 14:37 ?648次閱讀
    遇到液晶拼接屏幕左右黑屏的問題應該<b class='flag-5'>怎樣</b>應對<b class='flag-5'>呢</b>?

    st的foc電機庫怎樣調速呀?

    各位大神們,st的foc電機庫怎樣調速呀?
    發表于 05-17 07:18

    怎樣利用普通的IO口模擬串口通訊

    怎樣利用普通的IO口模擬串口通訊,只用兩根線,一根數據線,一根底線
    發表于 05-15 07:11

    ADAU1777有沒有AGC,怎樣設置?

    ADAU1777有沒有AGC(自動增益控制),怎樣設置?麻煩能不能給個例程?
    發表于 03-06 07:24

    烘缸軸磨損怎樣

    電子發燒友網站提供《烘缸軸磨損怎樣修.docx》資料免費下載
    發表于 02-23 10:00 ?0次下載

    示波器電流鉗怎樣測電流

    示波器電流鉗怎樣測電流? 示波器電流鉗是一種常用于測量交流電路中電流的工具。它可以通過將電流鉗夾在被測電路的導線上,利用電磁感應原理來測量電流。本文將詳細介紹示波器電流鉗的工作原理、使用方法以及
    的頭像 發表于 01-08 15:40 ?1731次閱讀
    主站蜘蛛池模板: 国产三片高清在线观看| 四虎最新网站| 日本黄色站| 日韩成人黄色| 97久久人人| h小视频在线| 四虎亚洲精品| 欧美色图色就是色| 午夜免费理论片在线看| 4438x色| 超h高h文污肉| 久久综合五月婷婷| 免费观看成年欧美1314www色| 男啪女r18肉车文| 免费a级网站| 一级特黄aaa大片在线观看视频| 深夜影院一级毛片| 男啪女色黄无遮挡免费观看| 特黄三级| 亚洲va中文va欧美va爽爽| 在线观看免费精品国产| 欧美日韩高清一区| 男人资源| 亚洲精品电影天堂网| 免费一级特黄特色黄大任片| ww欧洲ww在线视频看| 久久久久国产午夜| 亚洲黄色三级视频| 不卡一级毛片免费高清| 中文字字幕码一二区| 免费人成在线| 国产福利影视| 一级片在线免费播放| 沟沟人体一区二区| 777黄色片| 久久青青成人亚洲精品| avtom影院永久地址人人影院| www.一区二区三区| 国产精品一区二区三区免费视频 | 狠狠干天天| 四虎在线成人免费网站|