日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內(nèi)不再提示

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

冬至配餃子 ? 來源:天奇工作室 ? 作者:LRC ? 2022-08-08 14:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

pYYBAGLwr0-AOhHLAABb2VGetl4355.png

通過DMX和MUX選取對應(yīng)的運算電路

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

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


poYBAGLwr26AaijUAABqCKFS5gc590.png

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

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

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

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

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

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



審核編輯:劉清

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

    關(guān)注

    31

    文章

    5620

    瀏覽量

    130452
  • 運算電路
    +關(guān)注

    關(guān)注

    8

    文章

    117

    瀏覽量

    27641
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7841

    瀏覽量

    93492
  • DMX
    DMX
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    9170
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Clrc66303 lpcd 流向是怎樣的?

    此模式便不再返回,從而可能導(dǎo)致防碰撞機制失效。我將對此進行重寫。目前系統(tǒng)中沒有LPCD的啟用和禁用功能,不知如何處理。流程具體是怎樣
    發(fā)表于 04-17 06:23

    智能顯示模塊觸摸后可以發(fā)指令給主機嗎?智能模塊要怎樣給我們的主板發(fā)送信號?

    智能顯示模塊觸摸后可以發(fā)指令給主機嗎?智能模塊要怎樣給我們的主板發(fā)送信號?
    發(fā)表于 03-17 11:29

    UPS不間斷電源是怎樣排名的?哪家好?

      高科技的發(fā)展,讓UPS不再是單純的“備用電池”,而是保障NAS、服務(wù)器、家庭數(shù)據(jù)中心穩(wěn)定運行的“電力守門員”。面對市面上五花八門的品牌和型號,我們應(yīng)該怎樣?所謂的大品牌到底靠不靠譜?今天小編就從拓撲架構(gòu)、能效表現(xiàn)、智能
    的頭像 發(fā)表于 03-12 16:58 ?551次閱讀

    智能顯示模塊怎樣設(shè)置加密?

    智能顯示模塊怎樣設(shè)置加密?
    發(fā)表于 03-02 17:41

    怎樣開始啟用獨立看門狗?

    看門狗的原理是什么怎樣開始啟用獨立看門狗?
    發(fā)表于 01-08 06:33

    請問CW32 UART用于數(shù)據(jù)收發(fā)的具體過程怎樣的?

    CW32 UART用于數(shù)據(jù)收發(fā)的具體過程怎樣的?
    發(fā)表于 12-24 07:42

    系統(tǒng)調(diào)用和API有什么區(qū)別

    的,原因就在于系統(tǒng)調(diào)用和普通的API調(diào)用不太一樣,哪里不一樣? 相信大家都去銀行柜臺辦理過業(yè)務(wù),想一想為什么會有一道玻璃把你和工作人員隔離開來?為什么不直接讓你自己金庫里取錢?
    發(fā)表于 12-03 06:52

    蜂鳥內(nèi)核ITCM模塊以及取值過程

    的結(jié)構(gòu)以及從ITCM中取值的過程。 模塊介紹 首先,我們先得知道ITCM模塊存儲位置是在e203_CPU_top下。 而我們看ITCM的代碼下只有一個子模塊 子模塊是sram的通用模塊,也就是說
    發(fā)表于 10-24 08:29

    利用蜂鳥內(nèi)核來實現(xiàn)指令的仿真模擬

    時,r1的值改為了8,由于r0的值始終為0,所以結(jié)果與我們預(yù)期結(jié)果相符合。 附言 這次只是進行了一個很簡單的addi指令的測試,因此如果我們要進行一些擴展時,我們首先是得知道它的二進制形式怎么編寫
    發(fā)表于 10-24 08:17

    蜂鳥內(nèi)核ITCM模塊及取值過程

    的結(jié)構(gòu)以及從ITCM中取值的過程。 模塊介紹 首先,我們先得知道ITCM模塊存儲位置是在e203_CPU_top下。 而我們看ITCM的代碼下只有一個子模塊 子模塊是sram的通用模塊,也就是說
    發(fā)表于 10-24 07:27

    NICE指令的完整執(zhí)行過程

    NICE指令的完整執(zhí)行過程如下: 1、主處理器的譯碼單元提供EXU級譯碼得到指令的操作碼,以判斷其是否屬于默認的自定義指令組。 如果
    發(fā)表于 10-23 07:25

    怎樣檢測蓄電池性能

    類型是鉛酸蓄電池,這類電池屬于二次電池,廣泛應(yīng)用于汽車、摩托車等交通工具中。那么再使用蓄電池的過程中,怎樣判斷它的性能?其中最直接的方式是通過檢查電壓和啟動時的
    的頭像 發(fā)表于 09-08 08:40 ?895次閱讀
    <b class='flag-5'>怎樣</b>檢測蓄電池性能

    液晶顯示屏接口怎樣選?

    看到市面上有好多種液晶屏接口 - HDMI/VGA, LVDS, RGB, MCU Parallel, SPI... 作為用戶, 我怎樣選?
    發(fā)表于 09-02 17:44

    探索CPU架構(gòu)的奧秘,揭秘高性能計算的隱形引擎

    的深海,揭開那些隱藏在高性能計算背后的神秘面紗。1.取指令(Fetch)程序計數(shù)器(PC):CPU過程序計數(shù)器獲取下一條指令的內(nèi)存地址。指令
    的頭像 發(fā)表于 08-13 11:58 ?985次閱讀
    探索<b class='flag-5'>CPU</b>架構(gòu)的奧秘,揭秘高性能計算的隱形引擎

    怎樣使用Jlink (SEGGER) 通過SWD讀寫

    怎樣使用Jlink (SEGGER) 通過SWD讀寫?Jlink沒有找到CYPD6125的信號,官方也沒有找到CYPD6125對應(yīng)的FLM和xml 文件
    發(fā)表于 05-27 06:45
    灵璧县| 独山县| 内黄县| 浑源县| 芦溪县| 罗源县| 彰化市| 刚察县| 四川省| 崇明县| 永登县| 海口市| 和田市| 岱山县| 九龙坡区| 高唐县| 道真| 吴桥县| 郴州市| 景泰县| 灵石县| 福清市| 昌邑市| 鞍山市| 砀山县| 松江区| 辉南县| 庆安县| 新建县| 高要市| 新津县| 湖北省| 漳平市| 义乌市| 阜新市| 孟连| 汉寿县| 南投市| 松阳县| 屯昌县| 高雄县|