內(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()
-
物理地址的形成采用”段加偏移“的方式
<- 控制總線-> CPU <-地址總線 20-bit-> 存儲(chǔ)器 <-數(shù)據(jù)總線 16bit-> -
通用寄存器
- 數(shù)據(jù)寄存器AX,BX,CX,DX:均為16位寄存器闲坎,每個(gè)都可分為兩個(gè)8位寄存器崭闲,適用大多數(shù)算術(shù)運(yùn)算和邏輯運(yùn)算指令
-
標(biāo)志寄存器(標(biāo)志位兩大類)
- 狀態(tài)標(biāo)志:反映CPU的工作狀態(tài)吝岭,如執(zhí)行加法運(yùn)算時(shí)是否產(chǎn)生進(jìn)位
- 控制標(biāo)志:對(duì)CPI的運(yùn)行起特定控制作用
-
指令指針寄存器
- 保存一個(gè)內(nèi)存地址三痰,指向當(dāng)前需要取出的指令
- 當(dāng)CPU從內(nèi)存中取出一個(gè)指令后,IP會(huì)自動(dòng)增加窜管,指向下一指令地址
- IP寄存器的尋址能力散劫,8086對(duì)外有20位地址線,尋址范圍:
-
段寄存器
與其他寄存器聯(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
- ADD指令(加)
- 傳送類指令:如從存儲(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)算類指令:如加蜓肆、減颜凯、乘、除仗扬、與症概、或、非等
-
指令的運(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]
-
下列關(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ī) -
下列關(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
-
x86體系結(jié)構(gòu)中,寄存器EAX長(zhǎng)度為多少位蝇闭? 32位
x86體系結(jié)構(gòu)中呻率,寄存器AX長(zhǎng)度為多少位? 16位
-
IA-32寄存器模型中包括以下哪些寄存器呻引?(多選題)
A礼仗、通用寄存器
B、指令指針寄存器
C、頁(yè)面寄存器
D元践、標(biāo)志寄存器
E韭脊、段寄存器
-
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)
-
設(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
-
下列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)乘法
-
下列關(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ù)雜
-
MIPS按照指令的基本格式可以分為三種類型蟆沫,以下不屬于這三種類型的是籽暇?
A、R型指令
B饭庞、I型指令
C戒悠、J型指令
D、O型指令
-
某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) 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 = a1) 01000(rd = 8 = $t0) 00000 101010(可知指令類型為slt )
-
閱讀下面的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ù)镇眷? 不確定
-
如果想用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ǔ)器空間最大的是:方法一
-
很多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 (訪寸需要額外的指令)