国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
計(jì)算機(jī)指令系統(tǒng)的指令格式、尋址方式、指令種類及與C代碼的對(duì)照


https://m.toutiaocdn.com/group/6728944023559471627/?app=news_article&timestamp=1566713768&req_id=20190825141607110249203143D4ECBD51&group_id=6728944023559471627



早期的計(jì)算機(jī)很不靈活,每個(gè)設(shè)備要執(zhí)行的步驟都作為機(jī)器的一部分內(nèi)置在控制單元中了。為了提高靈活性,一些早期的電子計(jì)算機(jī)將CPU設(shè)計(jì)為可以方便地重新布線。這種靈活性是通過插拔裝置體現(xiàn)的,類似于老式電話交換臺(tái),跳線的端子插到接線孔中。

意識(shí)到程序可以像數(shù)據(jù)一樣編碼并存儲(chǔ)到主存中,這是一個(gè)重大的突破。如果控制單元被設(shè)計(jì)為從存儲(chǔ)器中獲取程序,解碼指令并執(zhí)行指令,那么只要更改計(jì)算機(jī)主存的內(nèi)容,就可以改變計(jì)算機(jī)運(yùn)行的程序,而不需要重寫CPU。

將計(jì)算機(jī)程序存入主存的想法被稱為存儲(chǔ)程序概念(Stored-Program Concept)。

為了應(yīng)用存儲(chǔ)程序概念,CPU被設(shè)計(jì)為可以識(shí)別編碼成位模式的指令。這組指令及相應(yīng)的編碼系統(tǒng)被稱為機(jī)器語言(Machine Language)。用機(jī)器語言表達(dá)的指令就叫作機(jī)器級(jí)指令,或機(jī)器指令(Machine Instruction)。

CPU所能完成的操作是由其執(zhí)行的指令決定的,這些指令稱為機(jī)器指令。CPU能執(zhí)行的所有機(jī)器指令的集合稱為該CPU的指令系統(tǒng)。指令系統(tǒng)設(shè)計(jì)的好壞、功能的強(qiáng)弱,會(huì)對(duì)整個(gè)計(jì)算機(jī)產(chǎn)生很大的影響,指令系統(tǒng)是計(jì)算機(jī)中硬件與軟件之間的接口。

1 指令系統(tǒng)指令格式

指令是指揮計(jì)算機(jī)完成各種操作的基本命令,一般來說,一條指令包括兩個(gè)基本組成部分:操作碼和地址碼。

操作碼說明指令的功能及操作性質(zhì)。地址碼用來指出指令的操作對(duì)象,它指出操作數(shù)或操作數(shù)的地址及指令執(zhí)行結(jié)果的地址,類似于C語言的表達(dá)式及賦值語句。

按照指令中地址碼的數(shù)量,指令格式分為以下幾種:

三地址指令格式:OP A B C

A OP B → C

二地址指令格式:OP A B

A OP B → A

一地址指令格式:OP A

OP A → A

零地址指令格式:OP

2 尋址方式

如何對(duì)指令中的地址字段進(jìn)行解釋,以獲得操作數(shù)的方法或轉(zhuǎn)移地址的方法,操作數(shù)的位置可能在指令中、寄存器中、存儲(chǔ)器中或I/O端口中,常用的尋址方式有立即數(shù)尋址、直接尋址、寄存器尋址、寄存器間接尋址等。

2.1 立即數(shù)尋址方式

操作數(shù)作為指令的一部分而直接寫在指令中,這種操作數(shù)稱為立即數(shù),這種尋址方式也就稱為立即數(shù)尋址方式。

立即數(shù)可以是8位、16位或32位,該數(shù)值緊跟在操作碼之后。

在匯編語言中,規(guī)定:立即數(shù)不能作為指令中的第二操作數(shù)。該規(guī)定與高級(jí)語言中“賦值語句的左邊不能是常量”的規(guī)定相一致。

立即數(shù)尋址方式通常用于對(duì)通用寄存器或內(nèi)存單元賦初值。

如: MOV AX,2346H ;將16位立即數(shù)2346H送入寄存器AX。

2.2 寄存器尋址方式

指令所要的操作數(shù)已存儲(chǔ)在某寄存器中,或把目標(biāo)操作數(shù)存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助憶符)的尋址方式稱為寄存器尋址方式。

指令中可以引用的寄存器及其符號(hào)名稱如下:

8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;

16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;

32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。

寄存器尋址方式是一種簡單快捷的尋址方式,源和目的操作數(shù)都可以是寄存器。

2.3 直接尋址方式

直接尋址方式是指操作數(shù)在存儲(chǔ)器中,操作數(shù)的有效地址(16位偏移量)直接包含在指令中。

2.4 寄存器間接尋址方式

寄存器間接尋址是將指定的寄存器內(nèi)容為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。

例如,設(shè)將內(nèi)部RAM的65H單元內(nèi)容(47H)送A,可執(zhí)行指令:MOV A,@R0,其中R0內(nèi)容為65H。

指令的執(zhí)行過程為:當(dāng)程序執(zhí)行到本指令時(shí),就以指令中所指定的工作寄存器R0的內(nèi)容(65H)為指針,將內(nèi)部數(shù)據(jù)存儲(chǔ)器65H單元的內(nèi)容(47H)送累加器A。

2.5 寄存器相對(duì)尋址方式

該尋址方式是以指定的寄存器內(nèi)容,加上指令中給出的位移量(8位或16位),并以一個(gè)段寄存器為基準(zhǔn),作為操作數(shù)的地址。指定的寄存器一般是一個(gè)基址寄存器或變址寄存器。

假設(shè)指令:MOV BX, [SI+100H],在執(zhí)行它時(shí),(DS)=1000H,(SI)=2345H,內(nèi)存單元12445H的內(nèi)容為2715H。

根據(jù)寄存器相對(duì)尋址方式的規(guī)則,在執(zhí)行本例指令時(shí),源操作數(shù)的有效地址EA為:

EA=(SI)+100H=2345H+100H=2445H

該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2445H=12445H。

所以,該指令的執(zhí)行效果是:把從物理地址為12445H開始的一個(gè)字的值傳送給BX。

2.6 基址加變址尋址方式

基址加變址尋址方式是指將寄存器(該寄存器一般指基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。

假設(shè)指令:MOV BX, [BX+SI],在執(zhí)行時(shí),(DS)=1000H,(BX)=2100H,(SI)=0011H,內(nèi)存單元12111H的內(nèi)容為1234H。

根據(jù)基址加變址尋址方式的規(guī)則,在執(zhí)行本例指令時(shí),源操作數(shù)的有效地址EA為:

EA=(BX)+(SI)=2100H+0011H=2111H

該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2111H=12111H

所以,該指令的執(zhí)行效果是:把從物理地址為12111H開始的一個(gè)字的值傳送給BX。

2.7 相對(duì)基址加變址尋址方式

在相對(duì)基址變址尋址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作變址寄存器。它是把一個(gè)基址寄存器BX或BP的內(nèi)容,加上變址寄存器SI或DI的內(nèi)容,再加上指令中給定的8位或16位位移量,并以一個(gè) 段寄存器 作為地址基準(zhǔn),作為 操作數(shù) 的地址。

假設(shè)指令:MOV AX, [BX+SI+200H],在執(zhí)行時(shí),(DS)=1000H,(BX)=2100H,(SI)=0010H,內(nèi)存單元12310H的內(nèi)容為1234H。

根據(jù)相對(duì)基址加變址尋址方式的規(guī)則,在執(zhí)行本例指令時(shí),源操作數(shù)的有效地址EA為:

EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H

該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2310H=12310H

所以,該指令的執(zhí)行效果是:把從物理地址為12310H開始的一個(gè)字的值傳送給AX。

3 指令種類

3.1 數(shù)據(jù)傳送指令

這是一種常用的指令,用以實(shí)現(xiàn)寄存器與寄存器,寄存器與存儲(chǔ)單元以及存儲(chǔ)器單元與存儲(chǔ)器單元之間的數(shù)據(jù)傳送,對(duì)于存儲(chǔ)器來說,數(shù)據(jù)傳送包括對(duì)數(shù)據(jù)的讀(相當(dāng)于取數(shù)指令)和寫(相當(dāng)于存數(shù)指令)操作。

3.2 算術(shù)運(yùn)算指令

計(jì)算機(jī)指令系統(tǒng)一般都設(shè)有二進(jìn)制數(shù)加、減、比較和求補(bǔ)等最基本的指令,此外還設(shè)置了乘、除法運(yùn)算指令、浮點(diǎn)運(yùn)算指令以有十進(jìn)制動(dòng)算指令等。

3.3 邏輯運(yùn)算指令

一般計(jì)算機(jī)都具有與、或、非(求反)、異或(按位加)和測(cè)試等邏輯運(yùn)算指令。

3.4 移位操作指令

移位操作指令分為算術(shù)移位、邏輯移位和循環(huán)移位三種,可以實(shí)現(xiàn)對(duì)操作數(shù)左移或右移一位或若干位。

3.5 程序控制(轉(zhuǎn)移)類指令

主要有以下類別:

無條件轉(zhuǎn)移指令(比如:jmp);條件轉(zhuǎn)移指令;循環(huán)指令;調(diào)用和返回指令;中斷指令;

3.6 輸入輸出(I/O)指令。

計(jì)算機(jī)本身是數(shù)據(jù)處理和管理機(jī)構(gòu),不能產(chǎn)生原始數(shù)據(jù),也不能長期保存數(shù)據(jù)。所處理的一切原始數(shù)據(jù)均來自輸入設(shè)備,所得的處理結(jié)果必須通過外總設(shè)備輸出。

指令的功能是從I/O端口輸入(讀)數(shù)據(jù)到微處理器的累加器中,OUT指令的功能是將微處理器的累加器中的數(shù)據(jù)輸出(寫)到I/O端口中。

3.7 堆棧操作指令

堆棧是由若干個(gè)連續(xù)存儲(chǔ)單元組成的先進(jìn)后出(FILO)存儲(chǔ)區(qū),第一個(gè)送入堆棧中的數(shù)據(jù)存放在棧底,最后送入堆棧中的數(shù)據(jù)存放在棧頂。棧底是固定不變的,而棧頂卻是隨著數(shù)據(jù)的入棧和出棧在不斷變化。

堆棧指針sp總是指向已經(jīng)存入數(shù)據(jù)的棧頂(不是空單元),所以PUSH指令是將(SP)減2,后將內(nèi)容壓棧(即先修改SP是指指向空單元,后壓入數(shù)據(jù)),而POP是先從棧頂彈出一個(gè)字,后將堆棧指針SP加2。

3.8 字符串處理指令

字符串處理指令就是一種非數(shù)值處理指令,一般包括字符串傳送,字符串轉(zhuǎn)換(把一種編碼的字符串轉(zhuǎn)換成另一種編碼的字符串),字符串比較,字符串查找(查找字符串中某一子串),字符串匹配,字符串的抽取(提取某一子串)和替換(把某一字符串用另一字符串替換)等。

4 C代碼與匯編指令

可以在代碼中設(shè)置斷點(diǎn)進(jìn)行調(diào)試然后查看調(diào)試窗口(Alt+8),即可看到C語言與匯編代碼的對(duì)照。

1: #include <iostream>

2: using namespace std;

3: int max(int a,int b)

4: {

00401550 push ebp

00401551 mov ebp,esp

00401553 sub esp,40h

00401556 push ebx

00401557 push esi

00401558 push edi

00401559 lea edi,[ebp-40h]

0040155C mov ecx,10h

00401561 mov eax,0CCCCCCCCh

00401566 rep stos dword ptr [edi]

5: if(a>=b)

00401568 mov eax,dword ptr [ebp+8]

0040156B cmp eax,dword ptr [ebp+0Ch]

0040156E jl max+25h (00401575)

6: return a;

00401570 mov eax,dword ptr [ebp+8]

00401573 jmp max+28h (00401578)

7: else

8: return b;

00401575 mov eax,dword ptr [ebp+0Ch]

9: }

00401578 pop edi

00401579 pop esi

0040157A pop ebx

0040157B mov esp,ebp

0040157D pop ebp

0040157E ret

10: void main()

11: {

00401590 push ebp

00401591 mov ebp,esp

00401593 sub esp,44h

00401596 push ebx

00401597 push esi

00401598 push edi

00401599 lea edi,[ebp-44h]

0040159C mov ecx,11h

004015A1 mov eax,0CCCCCCCCh

004015A6 rep stos dword ptr [edi]

12: int i = 0;

004015A8 mov dword ptr [ebp-4],0

13: i=max(3,4);

004015AF push 4

004015B1 push 3

004015B3 call @ILT+500(max) (004011f9)

004015B8 add esp,8

004015BB mov dword ptr [ebp-4],eax

14: cout<<i;

004015BE mov eax,dword ptr [ebp-4]

004015C1 push eax

004015C2 mov ecx,offset std::cout (0047be90)

004015C7 call @ILT+245(std::basic_ostream<char,std::char_traits<char> >::operator<<) (004010fa)

15:

16: }

004015CC pop edi

004015CD pop esi

004015CE pop ebx

004015CF add esp,44h

004015D2 cmp ebp,esp

004015D4 call __chkesp (00420310)

004015D9 mov esp,ebp

004015DB pop ebp

004015DC ret

-End-

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
微機(jī)原理——3.8086指令系統(tǒng)
80386ASM程序設(shè)計(jì)基礎(chǔ)(二)
匯編的8種尋址方式,以及2個(gè)默認(rèn)段寄存器
51單片機(jī)指令系統(tǒng):指令尋址方式(4)
單片機(jī)試題庫及答案
第4章指令與匯編語言
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服