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

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

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

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

該怎樣去編寫(xiě)CPU指令呢?過(guò)程是怎樣的

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

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

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

pYYBAGLwr0-AOhHLAABb2VGetl4355.png

通過(guò)DMX和MUX選取對(duì)應(yīng)的運(yùn)算電路

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

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


poYBAGLwr26AaijUAABqCKFS5gc590.png

左:通過(guò)MUX選擇要運(yùn)算的寄存器

右:通過(guò)DMX選擇要寫(xiě)回的寄存器

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

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

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

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



審核編輯:劉清

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

    關(guān)注

    31

    文章

    5425

    瀏覽量

    123559
  • 運(yùn)算電路
    +關(guān)注

    關(guān)注

    8

    文章

    117

    瀏覽量

    27083
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7636

    瀏覽量

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    8984
收藏 人收藏

    評(píng)論

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

    怎樣使用Jlink (SEGGER) 通過(guò)SWD讀寫(xiě)

    怎樣使用Jlink (SEGGER) 通過(guò)SWD讀寫(xiě)?Jlink沒(méi)有找到CYPD6125的信號(hào),官方也沒(méi)有找到CYPD6125對(duì)應(yīng)的FLM和xml 文件
    發(fā)表于 05-27 06:45

    CPU的各種指令和執(zhí)行流程

    在集成電路設(shè)計(jì)中,CPU指令是指計(jì)算機(jī)中央處理單元(CPU)用來(lái)執(zhí)行計(jì)算任務(wù)的基本操作指令集。這些指令
    的頭像 發(fā)表于 04-18 11:24 ?649次閱讀

    噪聲與ADC的范圍和位數(shù)是什么關(guān)系怎樣選用和匹配?

    以上三者是什么關(guān)系怎樣選用和匹配?ADC的動(dòng)態(tài)輸入范圍一般都有多大的?謝謝
    發(fā)表于 02-08 07:14

    ldc1000使用的具體時(shí)序是怎樣

    ldc1000 evm,測(cè)得它的波形均是在上跳變接收數(shù)據(jù)和發(fā)送數(shù)據(jù),這與ldc1000的芯片手冊(cè)中的時(shí)序圖不同,想問(wèn)下您ldc1000的使用的具體時(shí)序是怎樣? 2.我最開(kāi)始是使用pic16f887
    發(fā)表于 01-13 07:59

    使用RDATAC指令后,ADS131E04傳送的數(shù)據(jù)格式以及內(nèi)容是怎樣的?

    請(qǐng)問(wèn)使用RDATAC指令后,ADS131E04傳送的數(shù)據(jù)格式以及內(nèi)容是怎樣的,數(shù)據(jù)手冊(cè)是按照ADS131E08為例來(lái)說(shuō)明有27個(gè)BYTE,不知道ADS131E04是不是只用15個(gè)BYTE?
    發(fā)表于 01-10 07:19

    ADS1256的輸出電路是怎樣設(shè)計(jì)的

    對(duì)于ADS1256的輸出電路是怎樣設(shè)計(jì)的?一般ADC測(cè)試中為了提高輸出的驅(qū)動(dòng)能力,防止發(fā)射和振鈴現(xiàn)象,應(yīng)該怎樣進(jìn)行設(shè)計(jì)輸出電路
    發(fā)表于 11-22 06:01

    怎樣選擇合適的MOSFET

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

    使用放大器時(shí),放大高頻小信號(hào),怎樣設(shè)計(jì)電路來(lái)減小噪聲的影響?

    你好。我在使用放大器時(shí),放大高頻小信號(hào),怎樣設(shè)計(jì)電路來(lái)減小噪聲的影響。 謝謝。。
    發(fā)表于 09-25 07:01

    OPA211 SHUTDOWN這個(gè)引腳起什么作用,應(yīng)該怎樣連接

    第一次使用OPA211芯片,對(duì)SHUTDOWN這個(gè)引腳不是很理解,引腳起什么作用,應(yīng)該怎樣連接
    發(fā)表于 09-11 08:29

    OPA842增益是怎樣算的,怎么確定各個(gè)阻值的參數(shù)

    只有當(dāng)Rf和R1是253到256歐時(shí)候,增益才是1倍,可是芯片手冊(cè)上面推薦的數(shù)據(jù)是402歐,請(qǐng)問(wèn)這個(gè)芯片的增益是怎樣算的,怎么確定各個(gè)阻值的參數(shù)? 新手剛上道,問(wèn)題膚淺,請(qǐng)不要見(jiàn)怪。
    發(fā)表于 09-11 07:53

    單端輸入應(yīng)用中如何連接差分放大器?怎樣計(jì)算阻值?

    單端輸入應(yīng)用中如何連接差分放大器?怎樣計(jì)算阻值?
    發(fā)表于 09-04 07:39

    LMH7322怎樣改善輸出波形

    圖一 我按照LMH7322資料中,按照上圖一 畫(huà)的 PCB圖 (見(jiàn)圖二) 圖二 測(cè)試時(shí)輸出的波形為: 請(qǐng)問(wèn)工程師 怎樣改善輸出波形
    發(fā)表于 09-02 06:57

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

    你好下圖是我 放大脈沖信號(hào)后的輸出波形 ,輸入的脈沖信號(hào)為100HZ占空比為 34%,請(qǐng)問(wèn)我怎樣改善波形
    發(fā)表于 08-29 06:13

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

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

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

    怎樣選擇電流探頭?直接買一個(gè)示波器能不能測(cè)量電流信號(hào)?電流探頭是連接示波器和測(cè)試點(diǎn),實(shí)現(xiàn)電流信號(hào)測(cè)量的關(guān)鍵工具,本文將為您揭示電流探頭的選擇要點(diǎn),并解答一個(gè)常見(jiàn)疑問(wèn):示波器能否直接測(cè)量電流?
    的頭像 發(fā)表于 07-01 17:45 ?1208次閱讀
    電流探頭<b class='flag-5'>該</b><b class='flag-5'>怎樣</b>選擇,示波器可以直接測(cè)量電流嗎?
    主站蜘蛛池模板: 天堂网传媒 | 天天草夜夜骑 | 国产毛片哪里有 | 毛片大全高清免费 | 扒开双腿爽爽爽视频www | 亚洲高清中文字幕一区二区三区 | 久久伊人精品青青草原高清 | 国产精品亚洲一区二区三区在线播放 | 黄色v片| 国产女同| 亚洲国产婷婷综合在线精品 | 日本三级a| 天天舔天天 | 亚洲射图 | 日本一线a视频免费观看 | 婷婷亚洲五月琪琪综合 | 欲香欲色| 国产在线视频你懂得 | 日本国产中文字幕 | 色综合色狠狠天天综合色hd | 中文字幕成人乱码在线电影 | 国产人人看| 亚洲爱婷婷色婷婷五月 | 1024手机看片欧美日韩 | 四虎成人影院网址 | 亚洲hhh| 清纯唯美亚洲综合欧美色 | 97天天做天天爱夜夜爽 | 色综合久久久久久久久五月性色 | 91啦视频在线 | 一本到在线观看视频不卡 | 免费一区二区 | 日本人的色道www免费一区 | 天堂中文在线最新版地址 | 色噜噜噜噜噜 | 91九色porny蝌蚪| 国产在线五月综合婷婷 | 四虎国产精品视频免费看 | 日韩一级片免费在线观看 | www.色涩| 国产三级在线观看视频 |