第二講 指令系統(tǒng)體系結(jié)構(gòu)(Instruction Set Architecture)

內(nèi)容要點(diǎn):x86 ISA典鸡,MIPS ISA

構(gòu)造一臺(tái)自己的計(jì)算機(jī)


  • 指令格式
第一個(gè)字節(jié) 第二個(gè)字節(jié)
xxxx xxxx xxxx xxxx
操作碼 寄存器號(hào) 存儲(chǔ)單元地址

X86體系結(jié)構(gòu)與指令簡(jiǎn)介


X86體系結(jié)構(gòu)

  • Intel 8086 (1978年)

    • 內(nèi)部的通用寄存器為16位篷帅,即既能處理16位數(shù)據(jù)军浆,也能處理8位數(shù)據(jù)

    • 對(duì)外有16根數(shù)據(jù)線和20根地址線乱豆,可尋址的內(nèi)存空間為1MByte(2^{20}

    • 物理地址的形成采用”段加偏移“的方式

      <- 控制總線->
      CPU <-地址總線 20-bit-> 存儲(chǔ)器
      <-數(shù)據(jù)總線 16bit->
    • 通用寄存器R_0,...,R_n

      • 數(shù)據(jù)寄存器AX,BX,CX,DX:均為16位寄存器闲坎,每個(gè)都可分為兩個(gè)8位寄存器崭闲,適用大多數(shù)算術(shù)運(yùn)算和邏輯運(yùn)算指令
    • 標(biāo)志寄存器FLAGS(標(biāo)志位兩大類)

      • 狀態(tài)標(biāo)志:反映CPU的工作狀態(tài)吝岭,如執(zhí)行加法運(yùn)算時(shí)是否產(chǎn)生進(jìn)位
      • 控制標(biāo)志:對(duì)CPI的運(yùn)行起特定控制作用
    • 指令指針寄存器IP

      • 保存一個(gè)內(nèi)存地址三痰,指向當(dāng)前需要取出的指令
      • 當(dāng)CPU從內(nèi)存中取出一個(gè)指令后,IP會(huì)自動(dòng)增加窜管,指向下一指令地址
      • IP寄存器的尋址能力2^{16}=65536(64K)Byte散劫,8086對(duì)外有20位地址線,尋址范圍:2^{20}=1MByte
    • 段寄存器Segment Register

      • 與其他寄存器聯(lián)合生成存儲(chǔ)器地址

      • CS 代碼段寄存器(Code Segment)
        DS 數(shù)據(jù)段寄存器(Data Segment)
        ES 附加段寄存器(Extra Segment)
        SS 堆棧段寄存器(Stack Segment)
  • IA-32體系結(jié)構(gòu)

    • Intel 80386 (1985年)

      • 主頻12.5-33MHz幕帆,27.5萬(wàn)個(gè)晶體管

      • 80X86系列中的第一款32位微處理器

      • 支持32位的算術(shù)和邏輯運(yùn)算舷丹,提供32位的通用寄存器

      • 地址總線擴(kuò)展到32位,可尋址4GB的內(nèi)存空間

      • 實(shí)模式-保護(hù)模式-虛擬8086模式

  • X86-64體系結(jié)構(gòu)

X86指令簡(jiǎn)介

  • 指令的主要類別

    • 運(yùn)算類指令:如加蜓肆、減颜凯、乘、除仗扬、與症概、或、非等
      • ADD指令(加)
        • 格式:ADD DST早芭,SRC
        • 操作:DST<-DST+SRC
      • ADC指令(帶進(jìn)位的加)
        • 格式:ADC DST彼城,SRC
        • 操作:DST<-DST+SRC+CF
      • INC指令(加1)
        • 格式:INC OPR
        • 操作:OPR<-OPR+1
    • 傳送類指令:如從存儲(chǔ)器到通用寄存器,從通用寄存器到I/O接口等
      • 作用:把數(shù)據(jù)或地址傳送到寄存器或存儲(chǔ)器單元中
      • MOV指令(傳送)
        • 格式:MOV DST,SRC
        • 操作:DST<-SRC
        • 說(shuō)明:DST表示目的操作數(shù)募壕,SRC表示源操作數(shù)调炬,MOV指令把一個(gè)操作數(shù)從源傳送至目的,源操作數(shù)保持不變
    • 控制類指令:如暫停處理器舱馅,清除標(biāo)志位等
      • 作用:控制CPU的功能缰泡,對(duì)標(biāo)志位進(jìn)行操作
    • 轉(zhuǎn)移類指令:如無(wú)條件轉(zhuǎn)移,條件轉(zhuǎn)移代嗤,過(guò)程調(diào)用等
      • 作用:改變指令執(zhí)行順序
      • 說(shuō)明:根據(jù)是否有判斷條件棘钞,分為「無(wú)條件轉(zhuǎn)移指令」和「條件專業(yè)」指令;根據(jù)轉(zhuǎn)移目標(biāo)地址的提供方式干毅,可分為「直接轉(zhuǎn)移」和「間接轉(zhuǎn)移」
  • 指令的運(yùn)行結(jié)果

    • 改變通用寄存器的內(nèi)容:如ADD AX,DX

    • 改變存儲(chǔ)單元的內(nèi)容:如MOV [10H],CX

    • 改變標(biāo)志位:如產(chǎn)生進(jìn)位

    • 改變指令指針:如 JMP [BX]

    • 改變外設(shè)端口的內(nèi)容:如訪問(wèn)顯示端口

    • 其他...

MIPS體系結(jié)構(gòu)


  • 全稱:Microprocessor without Interlocked Piped Stages

    • 主要關(guān)注點(diǎn)

      • 減少指令的類型
      • 降低指令復(fù)雜度
    • 基本原則:A simpler CPU is a faster CPU

    • MIPS指令主要特點(diǎn)

      • 固定的指令長(zhǎng)度

      • 簡(jiǎn)單的尋址模式

      • 指令數(shù)量少宜猜,指令功能簡(jiǎn)單(一條指令只完成一個(gè)操作)

      • 只有Load和Store指令可以訪問(wèn)存儲(chǔ)器

      • 需要優(yōu)秀的編譯器支持

  • MIPS指令簡(jiǎn)介

    • 基本格式:

      • R:Register,寄存器

      • I:Immediate硝逢,立即數(shù)

      • J:Jump姨拥,無(wú)條件轉(zhuǎn)移

運(yùn)算指令 add rd, rs, rt sll rd, rt, shamt addi rt, rs, imm slti rt, rs, imm /
訪存指令 / lw rt, imm(rs) sw rt, imm(rs) /
分支指令 jr rs beq rs,rt, imm j addr
R型指令 I型指令 J型指令

Quiz [1]


  1. 下列關(guān)于CISC和RISC的描述錯(cuò)誤的是?

    A渠鸽、CISC指令長(zhǎng)度是不固定的

    B叫乌、CISC指令的操作數(shù)必須預(yù)存于寄存器中

    C、RISC指令長(zhǎng)度是固定的

    D拱绑、RISC指令的操作數(shù)必須預(yù)存于寄存器中

    E、RISC架構(gòu)的指令種類通常比CISC架構(gòu)更少

    RISC:Reduced Instruction Set Computer丽蝎,精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī)
    減少指令的類型猎拨,降低指令復(fù)雜度
    CISC:Complex Instruction Set Computer,復(fù)雜指令系統(tǒng)計(jì)算機(jī)

  2. 下列關(guān)于Intel處理器及其推出時(shí)間描述錯(cuò)誤的是屠阻?

    A红省、Intel 8086——1978年

    B、Intel 80286——1982年

    C国觉、Intel 80386——1988年

    D吧恃、Intel Pentium——1993年

    E、Intel PentiumPro——1995年

    F麻诀、Intel Core i7——2008年

    G痕寓、Intel Core 2——2006年

    Intel 80386——1985

  3. x86體系結(jié)構(gòu)中,寄存器EAX長(zhǎng)度為多少位蝇闭? 32位

    x86體系結(jié)構(gòu)中呻率,寄存器AX長(zhǎng)度為多少位? 16位

  4. IA-32寄存器模型中包括以下哪些寄存器呻引?(多選題)

    A礼仗、通用寄存器

    B、指令指針寄存器

    C、頁(yè)面寄存器

    D元践、標(biāo)志寄存器

    E韭脊、段寄存器

  5. 8086系統(tǒng)中標(biāo)志位CF的含義是? Carry Flag

    8086系統(tǒng)中標(biāo)志位ZF的含義是单旁? 零標(biāo)志(Zero Flag)

    8086系統(tǒng)中段寄存器DS的含義是沪羔?數(shù)據(jù)段寄存器(Data Segment)

    8086系統(tǒng)中段寄存器CS的含義是?代碼段寄存器(Code Segment)

    ES:附加段寄存器(Extra Segment)

    SS:堆棧段寄存器(Stack Segmeny)

  6. 設(shè)CS=2500H慎恒,DS=2400H任内,SS=2430H,BP=0200H融柬,SI=0010H死嗦,DI=0206H,計(jì)算下列x86指令源操作數(shù)的物理地址MOV AX粒氧,[2000H] *26000H*

    物理地址 = DS:2000H = 2400H16(左移4位)+2000H = 24000H + 2000H = 26000H
    CS(CodeSegment):存放當(dāng)前正在運(yùn)行的程序代碼所在段的段基址
    16 + IP存放的偏移量 = 指令的物理地址越除。

    設(shè)CS=2500H,DS=2400H外盯,SS=2430H摘盆,BP=0200H,SI=0010H饱苟,DI=0206H孩擂,計(jì)算下列x86指令源操作數(shù)的物理地址:MOV AX,[BP+SI+4] *24514H*

    2430H * 16 + 0200H + 0010H + 4H = 24300H + 0214H = 24514H

    設(shè)CS=2500H箱熬,DS=2400H类垦,SS=2430H,BP=0200H城须,SI=0010H蚤认,DI=0206H,計(jì)算下列x86指令源操作數(shù)的物理地址:MOV AX糕伐,[DI+100H] *24306H*

    2400H * 16 +0206H +100H = 24000H +0306H = 24306H

  7. 下列x86指令中砰琢,哪些屬于算術(shù)運(yùn)算指令?

    A良瞧、ADD

    B陪汽、DEC

    C、MOV

    D褥蚯、IN

    E掩缓、LEA:Load Effective Address

    I、CALL:調(diào)用子程序

    J遵岩、JNZ:條件轉(zhuǎn)移指令

    K你辣、LOOP

    L巡通、MUL:無(wú)符號(hào)乘法

  8. 下列關(guān)于MIPS指令的主要特點(diǎn)說(shuō)法錯(cuò)誤的是?

    A舍哄、指令長(zhǎng)度固定

    B宴凉、尋址模式簡(jiǎn)單

    C、只有Load和Store指令可以訪問(wèn)存儲(chǔ)器

    D表悬、需要優(yōu)秀的編譯器支持

    E弥锄、指令數(shù)量多,且功能復(fù)雜

  9. MIPS按照指令的基本格式可以分為三種類型蟆沫,以下不屬于這三種類型的是籽暇?

    A、R型指令

    B饭庞、I型指令

    C戒悠、J型指令

    D、O型指令

  10. 某MIPS指令的機(jī)器碼是0x20A5FFFF舟山,對(duì)應(yīng)的匯編指令是什么绸狐? *addi $a1,$a1,-1*

    二進(jìn)制數(shù)均以補(bǔ)碼的形式存放在計(jì)算機(jī)中

    正數(shù):補(bǔ)碼 = 原碼

    負(fù)數(shù):補(bǔ)碼 = 除符號(hào)位,原碼剩余每位取反累盗,末位+1

    FFFF= 1111 1111 1111 1111 為補(bǔ)碼形式寒矿,化為原碼

    1111 1111 1111 1110

    1000 0000 0000 0001 = -1

    0010(2) 0000(0) 1010(A) 0101(5) 1111 1111 1111 1111(FFFF) =>可知為I型

    001000(op = 8 = addi) 00101(rs = 5 = a1) 00101(rt = 5 =a1) 1111 1111 1111 1111(immediate = -1)

    某MIPS指令的機(jī)器碼是0x0005402A,對(duì)應(yīng)的匯編指令是什么若债? *slt $t0,$0,$a1*

    0000 0000 0000 0101(5) 0100(4) 0000 0010(2) 1010(A)

    000000(R型指令) 00000(rs = 0 = 0) 00101(rt = 5 =a1) 01000(rd = 8 = $t0) 00000 101010(可知指令類型為slt )

  11. 閱讀下面的x86匯編程序符相,回答問(wèn)題。

    設(shè)DS=1000H

    MOV SI, 1250H

    MOV DI, 1370H

    MOV CL, 3

    MOV AX, DS

    MOV ES, AX

    MOV BX, 5

    STD

    REP MOVSB

    請(qǐng)問(wèn)蠢琳,在這次串傳送操作中啊终,完成了第一個(gè)元素的傳送后,SI寄存器的值是什么挪凑? **124FH*

    STD(DF置為1孕索,從源串的高位開(kāi)始傳送)

    源串地址:DS:SI = 1000H * 16 + 1250H = 11250H

    因?yàn)槭菑母呶婚_(kāi)始傳送逛艰,傳送完一個(gè)元素后躏碳,SI與DI自動(dòng)減1

    11250H = 112 0101 0000 (不夠減向前借2)- 0001 = 112 4 F

    閱讀下面的x86匯編程序,回答問(wèn)題散怖。

    設(shè)DS=1000H

    MOV SI, 1250H

    MOV DI, 1370H

    MOV CL, 3

    MOV AX, DS

    MOV ES, AX

    MOV BX, 5

    CLD

    REP MOVSB

    請(qǐng)問(wèn)菇绵,這次串傳送操作,總共傳送了多少個(gè)字節(jié)的數(shù)據(jù)镇眷? 不確定

  12. 如果想用8086 CPU把內(nèi)存中某個(gè)區(qū)域的1024個(gè)字節(jié)的數(shù)據(jù)傳送到另一個(gè)區(qū)域咬最,可以選用如下三種方法:

    (1)只使用傳送指令(MOV);

    (2)使用傳送指令(MOV)欠动,并用條件轉(zhuǎn)移指令建立循環(huán)語(yǔ)句的結(jié)構(gòu)永乌;

    (3)使用串傳送指令(MOVSB)以及必要的配合指令惑申,不使用循環(huán)語(yǔ)句的結(jié)構(gòu)。

    請(qǐng)比較用這三種方法編寫(xiě)的程序翅雏,執(zhí)行時(shí)訪問(wèn)存儲(chǔ)器次數(shù)最少的是:方法三

    請(qǐng)比較用這三種方法編寫(xiě)的程序圈驼,執(zhí)行時(shí)訪問(wèn)存儲(chǔ)器次數(shù)最多的是:方法二

    請(qǐng)比較用這三種方法編寫(xiě)的程序,程序代碼占用存儲(chǔ)器空間最大的是:方法一

  13. 很多x86指令的功能比較復(fù)雜望几,往往一條x86指令可以完成的功能绩脆,需要多條MIPS指令才能實(shí)現(xiàn)。請(qǐng)問(wèn)下列x86指令中橄抹,哪些確定能夠只用一條MIPS指令完成對(duì)應(yīng)的功能靴迫?(注:只需考慮這條指令本身,不用考慮對(duì)后續(xù)指令的影響)

    A楼誓、ADD ECX, 15H

    B玉锌、MOV EAX, 28H

    C、ADD EDX, EBX

    D慌随、ADD EAX, [13H]

    E芬沉、MOV EDX, [EBX+11H]

    F、ADD [EBX+ESI*4+200H], EAX

    G阁猜、REP MOVSB

    H丸逸、JZ LOOP_1

    D/E/F (訪寸需要額外的指令)


  1. 引用自本文鏈接:https://blog.csdn.net/wydyd110/article/details/81382073 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剃袍,隨后出現(xiàn)的幾起案子黄刚,更是在濱河造成了極大的恐慌,老刑警劉巖民效,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔维,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畏邢,警方通過(guò)查閱死者的電腦和手機(jī)业扒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舒萎,“玉大人程储,你說(shuō)我怎么就攤上這事”矍蓿” “怎么了章鲤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咆贬。 經(jīng)常有香客問(wèn)我败徊,道長(zhǎng),這世上最難降的妖魔是什么掏缎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任皱蹦,我火速辦了婚禮煤杀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沪哺。我一直安慰自己怜珍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布凤粗。 她就那樣靜靜地躺著酥泛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嫌拣。 梳的紋絲不亂的頭發(fā)上柔袁,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音异逐,去河邊找鬼捶索。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灰瞻,可吹牛的內(nèi)容都是我干的腥例。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酝润,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燎竖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起要销,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤构回,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后疏咐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纤掸,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年浑塞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了借跪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酌壕,死狀恐怖掏愁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仅孩,我是刑警寧澤托猩,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布印蓖,位于F島的核電站辽慕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赦肃。R本人自食惡果不足惜溅蛉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一公浪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧船侧,春花似錦欠气、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至袁梗,卻和暖如春宜鸯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遮怜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工淋袖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锯梁。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓即碗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陌凳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剥懒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)通過(guò)執(zhí)行指令序列來(lái)使機(jī)器得以工作,所以對(duì)于每一系列的計(jì)算機(jī)都有指定的一組指令集供計(jì)算機(jī)使用合敦,這組指令...
    未來(lái)科技工作室閱讀 7,957評(píng)論 1 10
  • 指令系統(tǒng) 程序功能:求兩個(gè)數(shù)據(jù)之和并輸出 運(yùn)行結(jié)果:sum is 25 基本概念: 指令:是計(jì)算機(jī)硬件能夠直接理解...
    我可能是個(gè)假開(kāi)發(fā)閱讀 4,976評(píng)論 0 5
  • 匯編基礎(chǔ)教程 16位和32位的80x86匯編語(yǔ)言的區(qū)別 需要注意的是匯編不是一種語(yǔ)言蕊肥,不同平臺(tái)有不同的匯編語(yǔ)言對(duì)應(yīng)...
    inwunwe閱讀 9,491評(píng)論 2 19
  • 我們?cè)趯W(xué)習(xí)逆向開(kāi)發(fā)之前,我們要了解一個(gè)基本的逆向原理.首先我們是逆向iOS系統(tǒng)上面的APP.那么我們知道,一個(gè)AP...
    Colin_狂奔的螞蟻閱讀 1,837評(píng)論 4 20
  • 對(duì)生活的描述千奇百怪,各執(zhí)一詞蛤肌。 而我恰恰有“道理厭惡癥”壁却,討厭哲理小品,因?yàn)樗芴搨巍?但你又要問(wèn)我:“什么不虛...
    我是一只來(lái)自南方的狼閱讀 183評(píng)論 0 1