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

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

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

淺談4位HRRG計算機定義的匯編語言

電子設(shè)計 ? 來源:eeweb ? 作者: Max Maxfield ? 2021-05-13 15:01 ? 次閱讀

我們要做的一件事就是為我們的4位HRRG計算機定義這樣的匯編語言,但是在我們陷入沉迷和放棄之前,我們首先需要引入一些概念。

大端與小端

當現(xiàn)實世界中的計算機使用多個字節(jié)表示數(shù)據(jù)值或內(nèi)存地址時,有兩種主要技術(shù)可將這些字節(jié)存儲在內(nèi)存中:最高有效字節(jié)(MSB)存儲在以下位置:具有最低地址的位置,在這種情況下,我們可以說它以“ big-end-first-first”存儲,或者最低有效字節(jié)(LSB)存儲在最低的地址,在這種情況下,我們可以說它是“小-最終至上?!?/p>

讓我們在HRRG計算機的上下文中考慮這兩種機制,它具有4位(1個半字節(jié))數(shù)據(jù)總線和12位(3個半字節(jié))地址總線,通過可視化我們?nèi)绾卧趦?nèi)存中存儲一??個3個半字節(jié)值$ 426來開始在$ 100的內(nèi)存位置,如下所示:

pIYBAGCczaCAY5nuAAH4fj7FVtM809.png

大端(由HRRG使用)與小端。(資料來源:馬克斯·麥克菲爾德(Max Maxfield)

HRRG采用big-endian方法。當然,您可能不會對此感到驚訝,因為出于各種技術(shù)上的原因,而這些討論超出了這些討論的范圍,一些計算機設(shè)計師偏愛一種風格,而其他計算機設(shè)計師則偏向于另一種風格。直到人們對創(chuàng)建異構(gòu)計算環(huán)境感興趣為止,這才真正變得無關(guān)緊要,在異構(gòu)環(huán)境中,將多個不同的計算機連接在一起,以便可以在它們之間傳輸文件,此后引發(fā)了許多激烈的爭論。

1980年,丹尼·科恩(Danny Cohen)撰寫的著名論文《論神圣的戰(zhàn)爭與和平》,使用大尾數(shù)法和小尾數(shù)法來指代兩種存儲數(shù)據(jù)的技術(shù)。這些術(shù)語一直沿用至今,源于盎格魯愛爾蘭諷刺作家喬納森·斯威夫特(Jonathan Swift)所著的《格列佛游記》。小尾數(shù)和大尾數(shù)的綽號來自故事的那部分,兩個國家為此展開戰(zhàn)爭,首先要吃煮雞蛋的一端-小端還是大端!

令您驚訝的是,斯威夫特(Swift)在1726年進行了出色的工作,這是發(fā)明臺球桿的九年之前(在此之前,球員習慣用小狼牙棒來擊球)。

尋址模式

術(shù)語尋址模式是指指定指令操作數(shù)的方式。這些小流氓的名字和口味有很多不同的名稱,因此以下內(nèi)容應(yīng)僅作為概述。

出于這些討論的目的,我們將假設(shè)一個HRRG類型的體系結(jié)構(gòu),具有4位(1個半字節(jié))數(shù)據(jù)總線和12位(3個半字節(jié))地址總線。但是,下面介紹的寄存器和指令助記符是虛構(gòu)的,僅用于進行這些討論時使用。

隱式(又名隱式):隱式(有時稱為隱式)尋址模式的情況下,目標本身由指令本身隱含。例如,假設(shè)我們有一個名為Q的寄存器和一個名為INCQ的指令,其目的是對寄存器Q的內(nèi)容進行遞增(加1)。在這種情況下,我們所要做的就是一個沒有操作數(shù)的INCQ操作碼,如圖所示以下:

o4YBAGCcza6ASiCYAAB1lvkZRn4683.png

隱式尋址模式(來源:Max Maxfield)

假定程序計數(shù)器(PC)從地址$ 100開始,CPU將讀取并執(zhí)行隱含的操作碼。我們最終將PC指向地址$ 101,這是CPU希望在程序中找到下一個操作碼的位置。

立即:在立即尋址模式下,數(shù)據(jù)在操作碼后立即顯示。例如,假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用立即尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中,如下所示:

pIYBAGCczcCAbVjeAACic00isVc686.png

立即尋址模式(來源:Max Maxfield)

假定程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到此操作碼使用立即模式,并將數(shù)據(jù)nybble(在此示例中為$ F)加載到Q寄存器中。我們最終將PC指向地址$ 102,這是CPU希望在程序中找到下一個操作碼的位置。

相對:在相對尋址模式下,目標地址被指定為相對于程序計數(shù)器(PC)中當前值的偏移量。這樣的偏移量將被視為可以表示正值和負值的帶符號二進制數(shù)。

假設(shè)我們的偏移量表示為2個半字節(jié)值。由于2進位字段可以表示-128到+127范圍內(nèi)的有符號數(shù),因此這意味著偏移量可以指向當前PC值之前的128個位置(即,較低的內(nèi)存地址)和之后的127個位置之間的某個存儲位置。當前的PC值(即更高的內(nèi)存地址)。

純粹是為了使示例與此處顯示的其他示例相關(guān)聯(lián),假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用相對尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中(盡管我們?nèi)绻褂孟嗤闹浄?,則該LDQ與我們在前面示例中討論的LDQ指令將具有不同的操作碼。此外,讓我們假設(shè)偏移值為$ 08(十進制為+8),如下所示:

pIYBAGCczdOAFDYTAAHsLgOHBpo131.png

具有正偏移值的相對尋址模式。(資料來源:馬克斯·麥克菲爾德(Max Maxfield)

假定程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到它使用相對模式,然后將下面兩個包含偏移值的四位字節(jié)復(fù)制到內(nèi)部(臨時)寄存器中。

接下來,它將偏移值添加到PC中的當前值,并使用結(jié)果指向包含數(shù)據(jù)nybble的位置。最后,它將數(shù)據(jù)值(在此示例中為$ F)加載到Q寄存器中。最后,PC指向地址$ 103,這是CPU希望在程序中找到下一個操作碼的位置。

純粹出于完整性考慮,讓我們考慮相對尋址的第二個示例,其中偏移值為$ F8(十進制為-8),如下所示:

o4YBAGCczeOAdpclAAEjSiMRQWU607.png

具有負偏移值的相對尋址模式。(資料來源:馬克斯·麥克菲爾德(Max Maxfield)

重要的是要注意,除了上面說明的數(shù)據(jù)操作指令外,相對尋址還可以用于執(zhí)行跳轉(zhuǎn)或分支指令。

當然,并非所有處理器都支持所有類型指令的所有尋址模式。例如,正如我們在上一專欄中所討論的那樣,6502微處理器具有8位數(shù)據(jù)總線和16位地址總線。對于其JMP(“無條件跳轉(zhuǎn)”)指令,6502僅支持使用16位(2字節(jié))地址的絕對和間接尋址(下面介紹絕對和間接模式)。但是,6502還支持一組分支指令,這些分支指令采用8位(1字節(jié))相對地址。正如我在該專欄中指出的:

程序往往會進行很多跳轉(zhuǎn),例如循環(huán)循環(huán),因此在時鐘有限的日子里,使用1字節(jié)的分支地址而不是2字節(jié)的跳轉(zhuǎn)地址可能會節(jié)省大量的時間和空間。速度,處理器周期和內(nèi)存位置。

Zilog Z80微處理器不支持相對尋址,因此您必須使用Intel 8086或更高版本才能使用相對尋址模式查看“短跳轉(zhuǎn)”指令。

最后一點,在上面的討論中,當說明要添加偏移量的值時,我們多次使用了短語“ PC中的當前值”。當“推來推去”時,我們使用了$ 103的值,這是下一個操作碼的地址。我們?yōu)槭裁词褂眠@個值?使用$ 100(原始操作碼的地址)或$ 102(偏移量中第二個小節(jié)的地址)是否更有意義。

好吧,假設(shè)我們正在執(zhí)行某種形式的分支指令,而不是執(zhí)行我們虛構(gòu)的LDQ指令。現(xiàn)在考慮如果偏移值為$ 0會發(fā)生什么。如果偏移量是從分支指令操作碼的地址$ 100開始,則偏移量$ 0將導致無限循環(huán)(如果采用了分支)。或者,如果偏移量是從地址$ 102處的操作數(shù)的第二個字節(jié)開始的,則偏移量$ 0將導致CPU將操作數(shù)的第二個nybble誤認為是一個操作碼。歸根結(jié)底,如果偏移量為$ 0,則按照我們的原始指令立即跳轉(zhuǎn)到操作碼是有意義的;因此,我們使用下一個操作碼的地址作為“ PC中的當前值”這一事實。

只是為了確認所有這些內(nèi)容,因為在我所看到的任何地方它都沒有得到很好的記錄,所以我請我的新手尼克·比爾德(Nick Bild)(基于6502的虛擬現(xiàn)實系統(tǒng)的創(chuàng)建者)提供經(jīng)驗證明。為此,尼克創(chuàng)建了一個小型的6502匯編程序,如下所示:

o4YBAGCczfGAb2zpAAG7c-WU4qk598.png

6502匯編程序(來源:Nick Bild)

請記住,6502具有8位數(shù)據(jù)總線和16位地址總線。遵守地址$ 0004的BNE(“如果不相等則分支”)指令。如果滿足分支條件,該指令將跳轉(zhuǎn)到地址$ 0008的JUMPHERE標簽?,F(xiàn)在觀察到,由匯編程序生成并存儲在地址$ 0005中的偏移值為$ 02。當然,$ 0008 – $ 02 = $ 0006,它是LDY(“裝載索引寄存器Y”)指令的地址;也就是說,緊跟在BNE指令之后的操作碼。優(yōu)質(zhì)教育

絕對(也稱為直接):在絕對(有時稱為直接)尋址模式下,目標地址在操作碼后立即顯示。例如,假設(shè)我們有一個名為Q的寄存器和一條稱為LDQ的指令,其目的是使用絕對尋址模式將數(shù)據(jù)的小節(jié)加載到寄存器Q中,如下所示(再次,盡管我們使用的是相同的助記符,但該LDQ與前面示例中討論的LDQ指令會有不同的操作碼):

pIYBAGCczgCABD4mAAGC2TmfZN8403.png

絕對尋址模式(來源:Max Maxfield)

假設(shè)程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到該操作碼使用絕對模式,然后將以下三個字節(jié)(在本示例中為$ 426)加載到內(nèi)部寄存器中。然后,CPU使用此內(nèi)部寄存器的內(nèi)容指向內(nèi)存中的數(shù)據(jù)寄存器(在此示例中為$ F),并將其裝入Q寄存器。我們最終將PC指向地址$ 104,這是CPU期望在程序中找到下一個操作碼的位置。

與我們虛構(gòu)的LDQ指令相反,假設(shè)我們的地址為$ 100的操作碼指示CPU使用絕對尋址模式執(zhí)行無條件的JMP。在這種情況下,CPU將跳轉(zhuǎn)(設(shè)置PC)以尋址$ 426。

間接的:這是開始變得有趣的地方。假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用間接尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中,如下所示:

o4YBAGCczheAG_XFAAGpYNU9dvI967.png

間接尋址模式(來源:Max Maxfield)

至于絕對模式,操作碼后面的三個字節(jié)包含一個地址,該地址被加載到內(nèi)部寄存器中。但是,在這種情況下,該地址并不直接指向數(shù)據(jù),而是指向另一個3位地址的第一個地址,而該第二個地址用于指向數(shù)據(jù)。

與我們想象中的LDQ指令相反,假設(shè)我們的地址為$ 100的操作碼指示CPU使用間接尋址模式執(zhí)行無條件的JMP。在這種情況下,CPU最終將跳轉(zhuǎn)(設(shè)置PC)以尋址$ 971。

索引(也稱為絕對索引):此模式與絕對模式非常相似,不同之處在于它還涉及索引(X)寄存器。假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用索引尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中,如下所示:

pIYBAGCcziSACwQfAAGi50qWxeg474.png

索引尋址模式(來源:Max Maxfield)

假設(shè)程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到此操作碼使用索引模式,然后將以下三個字節(jié)(在本示例中為$ 426)加載到內(nèi)部寄存器中。然后,CPU將此內(nèi)部寄存器的內(nèi)容添加到索引(X)寄存器的內(nèi)容中,并使用結(jié)果指向內(nèi)存中的數(shù)據(jù)緩沖區(qū)(在此示例中為$ F),并將其裝入Q寄存器。我們最終將PC指向地址$ 104,這是CPU期望在程序中找到下一個操作碼的位置。

與我們想象中的LDQ指令相反,假設(shè)我們的地址為$ 100的操作碼指示CPU使用索引尋址模式執(zhí)行無條件的JMP。在這種情況下,CPU最終將跳轉(zhuǎn)(設(shè)置PC)以尋址549美元。

索引間接:此模式反映了索引模式和間接模式的一種可能組合。假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用索引間接尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中,如下所示:

pIYBAGCczjaAELE1AAD1y4N6VSQ531.png

索引間接尋址模式(來源:Max Maxfield)

假定程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到此操作碼使用索引間接模式,并將以下三個字節(jié)(在本示例中為$ 426)加載到內(nèi)部寄存器中。然后,CPU將此內(nèi)部寄存器的內(nèi)容添加到索引(X)寄存器的內(nèi)容中,以生成一個新地址。但是,在這種情況下,新地址不會直接指向數(shù)據(jù),而是指向另一個3位地址的第一個地址,而這個第二地址用于指向?qū)⒁虞d到數(shù)據(jù)中的數(shù)據(jù)。 Q寄存器。

與我們虛構(gòu)的LDQ指令相反,假設(shè)我們的地址為$ 100的操作碼指示CPU使用索引間接尋址模式執(zhí)行無條件JMP。在這種情況下,CPU最終將跳轉(zhuǎn)(設(shè)置PC)以解決$ 738。

間接索引:此模式反映了索引模式和間接模式的替代組合。假設(shè)我們有一個名為Q的寄存器和一個稱為LDQ的指令,其目的是使用間接索引尋址模式將一小部分數(shù)據(jù)加載到寄存器Q中,如下所示:

o4YBAGCczkuAXwIxAAD3y23af1U725.png

間接索引尋址模式(來源:Max Maxfield)

假定程序計數(shù)器(PC)從地址$ 100開始,CPU讀取操作碼,意識到此操作碼使用間接索引模式,并將以下三個字節(jié)(在本示例中為$ 426)加載到內(nèi)部寄存器中。該地址指向另一個3位地址的第一個地址,該地址本身被復(fù)制到內(nèi)部寄存器中。然后,CPU將第二個內(nèi)部寄存器的內(nèi)容添加到索引(X)寄存器的內(nèi)容中,以生成一個新地址,該地址指向?qū)⒁虞d到Q寄存器中的數(shù)據(jù)。

與我們想象中的LDQ指令相反,假設(shè)我們的地址為$ 100的操作碼指示CPU使用間接索引尋址模式執(zhí)行無條件的JMP。在這種情況下,CPU最終將跳轉(zhuǎn)(設(shè)置PC)以尋址$ BD4。

自動遞增和自動遞減:除了上面討論的基本索引模式外,某些CPU還支持自動遞增和自動遞減版本,其中將索引寄存器的內(nèi)容添加到臨時寄存器中的地址之后,遞增或遞減索引寄存器。

實際上,由于增量/減量是在添加之后進行的,因此應(yīng)將這些模式更恰當?shù)胤Q為“自動后增量”和“自動后減量”。這是因為某些處理器還支持“預(yù)自動遞增”和“預(yù)自動遞減”,其中在將索引寄存器的內(nèi)容添加到臨時寄存器的地址之前,對索引寄存器進行遞增或遞減操作。

還要注意,自動遞增和自動遞減的所有四種形式都可以潛在地應(yīng)用于索引間接和間接索引模式。

我的天??!真的嗎?
我知道,當我們考慮上述所有可能的尋址模式時,有很多事情需要解決。不要驚慌!HRRG僅支持這些模式的子集,而這是最簡單的模式,即隱式,立即,絕對和索引模式。

另一方面,我們設(shè)計HRRG的方式意味著它有時在同一條指令中使用多種模式。我能說什么這是一個有趣的舊世界。

編輯:hfy

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

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120384
收藏 人收藏

    評論

    相關(guān)推薦

    全面解析構(gòu)建4計算機匯編語言匯編

    作為我們討論的起點,讓我們進行一個簡單的思想實驗。假設(shè)我們剛剛完成了4HRRG計算機的構(gòu)建。我們還假設(shè)它是地球上的第一臺計算機。也就是說,
    的頭像 發(fā)表于 05-13 14:52 ?2907次閱讀
    全面解析構(gòu)建<b class='flag-5'>4</b><b class='flag-5'>位</b><b class='flag-5'>計算機</b>:<b class='flag-5'>匯編語言</b>和<b class='flag-5'>匯編</b>器

    32微型計算機原理與接口技術(shù) (pdf電子書下載)

    32微型計算機原理與接口技術(shù)以Intel 80486微處理器為背景,講述32微型計算機原理、匯編語言程序設(shè)計和接口技術(shù)?!?2
    發(fā)表于 05-03 12:17

    什么是匯編語言

    基于C++寶典的學習一、什么是匯編語言匯編語言是一種功能很強的程序設(shè)計語言,也是利用了計算機所有硬件特性并能直接控制硬件的語言。在
    發(fā)表于 07-19 06:05

    匯編語言是什么?怎樣去學習匯編語言

    匯編語言是什么?怎樣去學習匯編語言呢?計算機怎么識別你寫的代碼呢?
    發(fā)表于 11-29 06:03

    什么是匯編語言

    文章目錄前言一、 匯編語言簡介1.1 什么是匯編語言1.2機器語言簡介1.3 匯編語言的演變史1.4 匯編語言的廣義組成二、硬件與軟件2.1
    發(fā)表于 02-24 07:01

    計算機組成原理與匯編語言程序設(shè)計

    計算機組成原理與匯編語言程序設(shè)計是為中央電大計算機組成原理與匯編語言程序設(shè)計課程編寫的教材。在開始學習本書之前,請大家務(wù)必先認真閱讀這篇前言,它將告訴你本課
    發(fā)表于 10-21 17:56 ?0次下載
    <b class='flag-5'>計算機</b>組成原理與<b class='flag-5'>匯編語言</b>程序設(shè)計

    計算機組成原理與匯編語言習題一

    計算機組成原理與匯編語言習題一   硬盤低格格式化是對硬盤最徹底的初始化方式,經(jīng)過低格后的硬盤,原來保護的數(shù)據(jù)將全部丟失
    發(fā)表于 04-15 16:16 ?536次閱讀

    微機原理匯編語言接口技術(shù)

    16/32微機原理匯編語言與接口技術(shù),重點大學計算機教材
    發(fā)表于 12-31 10:50 ?0次下載

    計算機語言的分類

    本視頻主要詳細介紹了計算機語言的分類,分別有機器語言、匯編語言、高級語言等。
    的頭像 發(fā)表于 12-27 16:04 ?2.6w次閱讀
    <b class='flag-5'>計算機語言</b>的分類

    計算機學習教程之指令系統(tǒng)與匯編語言程序設(shè)計課件免費下載

    本文檔的主要內(nèi)容詳細介紹的是計算機學習教程之指令系統(tǒng)與匯編語言程序設(shè)計課件免費下載包括了:1.匯編語言程序設(shè)計,2.程序設(shè)計舉例,
    發(fā)表于 01-03 08:00 ?0次下載

    計算機的機器語言匯編語言與高級語言的詳細資料介紹

    計算機語言通常是一個能完整、準確和規(guī)則地表達人們的意圖,并用以指揮或控制計算機工作的“符號系統(tǒng)”。計算機語言通常分為三類:即機器語言、匯編語言
    的頭像 發(fā)表于 02-06 16:11 ?5838次閱讀

    [從零學習匯編語言] - 計算機中的硬件與軟件

    文章目錄前言一、 匯編語言簡介1.1 什么是匯編語言1.2 機器語言簡介1.3 匯編語言的演變史1.4 匯編語言的廣義組成二、硬件與軟件2
    發(fā)表于 12-31 19:55 ?10次下載
    [從零學習<b class='flag-5'>匯編語言</b>] - <b class='flag-5'>計算機</b>中的硬件與軟件

    構(gòu)建 4 計算機匯編語言匯編器(第 2 部分)

    的大端與小端方式的概念。 我們還概述了計算機設(shè)計者可能決定支持的一些尋址模式。 現(xiàn)在是時候開始為我們的 4 HRRG 計算機考慮
    發(fā)表于 08-01 17:52 ?865次閱讀
    構(gòu)建 <b class='flag-5'>4</b> <b class='flag-5'>位</b><b class='flag-5'>計算機</b>:<b class='flag-5'>匯編語言</b>和<b class='flag-5'>匯編</b>器(第 2 部分)

    構(gòu)建 4 計算機匯編語言匯編器(第 1 部分)

    我們已經(jīng)到了需要為 4 HRRG 計算機定義匯編語言的地步,但首先我們需要考慮某些概念。 如
    發(fā)表于 08-01 17:39 ?974次閱讀
    構(gòu)建 <b class='flag-5'>4</b> <b class='flag-5'>位</b><b class='flag-5'>計算機</b>:<b class='flag-5'>匯編語言</b>和<b class='flag-5'>匯編</b>器(第 1 部分)

    匯編指令是什么 計算機語言匯編指令簡介

    匯編指令簡介 匯編語言計算機語言的一種,是一種低級語言。相比高級語言,匯編語言更接近底層硬件,
    的頭像 發(fā)表于 12-13 11:18 ?1262次閱讀
    <b class='flag-5'>匯編</b>指令是什么 <b class='flag-5'>計算機語言</b><b class='flag-5'>匯編</b>指令簡介