1. 程式人生 > >8086/8088指令定址方式和彙編指令總結

8086/8088指令定址方式和彙編指令總結

8086/8088指令系統

  • 6個狀態標誌位
CF:進位標誌位
PF:奇偶標誌位
AF:輔助進位標誌位
ZF:零標誌位
SF:符號標誌位
OF:溢位標誌位
  • 3個控制標誌位
TF:跟蹤(陷阱)標誌位,如果為1,則CPU處於單步工作方式。
IF:中斷允許標誌位,如果為1,遮蔽中斷的控制標誌位。
DF:方向標誌位,如果為1,則操作的地址自動遞減,否則遞增。

1. 8086/8088指令定址方式

1.1運算元的種類

  • 資料運算元
1. 資料運算元是與資料有關的運算元,即指令操作的**物件是資料**2. 對於資料運算元,有的指令有兩個運算元,一個稱為源運算元,在操作過程中,其值不發生改變;另一個稱為目的運算元,操作後一般被操作結果所代替。

(1)立即數運算元:要操作的資料包含在指令中。
(2)暫存器運算元:要操作的資料存放在指定的暫存器中。
(3)儲存器運算元:要操作的資料存放在儲存單元中。
(4)I/O運算元:要操作的資料來自或送到I/O埠

  1. 地址運算元
1. 地址運算元是與程式轉移地址有關的運算元,即指令中的操作物件不是資料,而是**要轉移的目標地址**。它也分為**立即數運算元**、**暫存器運算元**和**儲存器運算元**,即要轉移的目標地址包含在**指令中**,或者**暫存器**,或者**儲存單元**中。

2. 對於地址運算元,指令只有**一個目的運算元**,它是一個提供程式轉移的**目標地址**。

1.2 定址方式

所謂定址方式,就是指令中給出的尋找運算元的方法。8086/8088的定址方式分為兩類:資料定址方式地址定址方式

1.2.1立即數定址方式

立即數定址方式又分為立即數定址方式、暫存器定址方式、儲存器定址方式和IO埠定址方式四種類型。

1. 立即數定址方式(immediate addressing)
    MOV BL,80H
    MOV AX,1090H
2. 暫存器定址方式(register addressing)
    MOV CL,DL
    MOV AX,BX
3. 儲存器定址方式(memory addressing)
    (1) 直接定址方式:MOV
AL,[1064H],資料段暫存器(DS)= 2000H,物理儲存單元地址:2000H × 10H + 1064H = 21064H,將該地址內的資料存放到AL暫存器中。 (2)暫存器間接定址方式:MOV AX,[SI],根據物理儲存地址,將其值賦值為AX暫存器。 (3)暫存器相對定址方式:MOV AL,[BP + TABLE],TABLE是一個8位或16位的位移量。 (4)基址變址定址方式:MOV AH,[BP][SI],根據基址暫存器BP、變址暫存器SI運算的和,將其內容賦值到AH暫存器中。 (5)基址變址相對定址方式:MOV AX,[BX + SI + COUNT],COUNT表示8位或16位常量。 4. IO埠定址方式 (1)IO埠直接定址方式:IN AL,21H。從地址為21H的埠讀取資料送到AL中。 (2)IO埠間接定址方式:OUT DX,AX。將AX的內容送到由DX暫存器內容所指定的埠號中。 (7

1.2.2 地址定址方式

  1. 段內直接定址方式
  2. 段內間接定址方式
  3. 段間直接定址方式
  4. 段間間接定址方式

2. 8086/8088指令系統

8086/8088的指令系統可以分為六種型別

  • 資料傳送指令;
  • 算術運算指令;
  • 位操作指令;
  • 串操作指令;
  • 程式控制指令;
  • 處理器控制指令;

2.1 資料傳送指令

2.1.1通用資料傳送指令

  • 資料傳送指令MOV
MOV dst, src    //dst表示目的運算元,src表示源運算元
  • 堆疊操作指令PUSH、POP
PUSH src    //壓棧指令,先將堆疊指標SP-2,再將src壓入棧中
POP dst //出棧指令,先將SP指向的棧頂值彈出棧頂,在將堆疊指標SP+2
  • 資料交換指令XCHG
XCHG dst, src   //將源運算元和目的運算元進行交換
  • 位元組轉換操作XLAT
XLAT    src_table   //根據表中的元素的序號,查出表中相應元素的內容

2.1.2輸入輸出指令

  • 輸入指令IN
IN acc, port    //從指定埠port中讀入一個位元組或一個字送AL或AX中
//埠地址小於0FFH
  • 間接定址的輸入指令
IN acc, DX      //由DX暫存器來指定埠號,將其埠號的8/16位資料送如AL/AX中
  • 輸出指令OUT
OUT port, acc   //將AL或AX的8位/16位資料輸出到指定的I/O埠,埠地址不大於FFH
  • 間接定址的輸出指令
OUT DX, acc //由DX暫存器指定埠號,將AL或AX的8位/16位資料輸出到該埠號中

2.1.3目的地址傳送指令

目的地址傳送指令常常用於串操作時建立初始的地址指標。

  • 取有效地址指令LEA(load effective address)
LEA reg16, mem  //將一個近地址指標寫入指定的暫存器中。目的運算元必須為16位通用暫存器

LEA BX, BUFFER
MOV BX, BUFFER
//LEA是將BUFFER的偏移地址賦值給BX,而MOV是將BUFFER的值賦值給BX,LEA等同於下面的操作
MOV BX, OFFSET BUFFER   //OFFSET BUFFER表示儲存器地址的偏移地址
  • 地址指標裝入DS指令LDS(load pointer into DS)
LDS reg16, mem32    //LDS用於傳送一個32位的遠地址指標,包括一個偏移地址和一個段地址。偏移地址送入reg16的目的暫存器,段地址送入資料段暫存器DS。
  • 地址指標裝入ES指令(load pointer into ES)
LES reg16, mem32    //LES與LDS類似,不過段地址送入附加段暫存器ES

2.1.4標誌傳送指令

8086/8088 CPU有一標誌暫存器FLAG,其中6個狀態標誌位和3個控制位。

  • 取標誌指令LAHF(load AH from Flags)
LAHF    //LAHF指令將標誌暫存器FLAG中的5個狀態標誌位SF,ZF,AF,PF,以及CF分別取出傳送到累加器AH的對應位。LAHF 對狀態標誌沒有影響。
  • 置標誌指令SAHF(store AH into Flags)
SAHF    //SAHF指令與LAHF相反,將AH的對應位傳送到標誌暫存器的對應位。SAHF對部分狀態標誌位有影響。
  • 標誌壓入堆疊指令PUSHF(PUSH Flags onto stack)
PUSHF   //指令將SP-2,然後將標誌暫存器FLAG的內容(16位)壓入堆疊。不影響狀態標誌位。
  • 標誌彈出堆疊指令POPF(POP Flags off stack)
POPF    //POPF指令操作與PUSHF相反,它將SP指向棧頂的內容彈出到暫存器,然後SP+2

2.2 算術運算指令

2.2.1二進位制數運算指令

  • 加法指令
- 不帶進位加法指令
ADD dst, src    //將源運算元和目的運算元相加然後賦值給dst目的運算元

- 帶進位加法指令ADC
ADC dst, src    //將源運算元和目的運算元相加,再加上進位標誌CF的內容,賦值給目的運算元。

-1指令
INC dst //將目的運算元+1賦值給目的運算元。
  • 減法指令
- 不帶借位減法指令
SUB dst, src    //將目的運算元減源運算元,結果賦值給目的運算元。

- 帶借位的減法指令
SBB dst, src    //將目的運算元減源運算元,然後在減進位標誌CF,結果賦值給目的運算元。

-1指令
DEC dst //將目的運算元減1,然後賦值給運算元。

- 求補指令
NEG dst //用“0” - dst,結果賦值給目的運算元。

- 比較指令CMP
CMP dst, src    //用dst減src,結果影響標誌位,不影響dst和src。
  • 乘法指令
- 無符號乘法
MUL src //MUL指令的另一個運算元在累加器(8位AL,16位AX)中,是隱含的。

- 帶符號的乘法指令IMUL
IMUL src    //IMUL操作與MUL操作類似,只是src表示的範圍是帶符號的。
  • 除法指令
- 無符號數除法指令DIV
DIV src //位元組除法中,AX除以src,被除數16位,除數8位,商在AL,餘數在AH中。字除法,DX:AX除以src,被除數32位,除數為16位。商在AX,餘數在DX中。

- 帶符號除法指令IDIV
IDIV src    //如果除數為0,會發生型別為0的終端。

- 符號擴充套件指令
位元組擴充套件指令CBW:將一個位元組(8位)按其符號擴充套件為字(16位)。它隱含的運算元為暫存器AL和AH。
字擴充套件指令CWD:將一個字(16位)按其符號位擴充套件為雙字(32位)。它隱含的運算元為暫存器AX和DX。

2.3 位操作指令

2.3.1 邏輯運算指令

  • 邏輯與指令AND
AND dst, src    //將目的運算元和源運算元按位進行邏輯與運算,並將結果賦值給目的運算元。
  • 測試指令TEST
TEST dst, src   //TEST指令操作根AND指令相似,只是,不將操作結果賦值給目的運算元,只將結果反應在狀態標誌位上。TEST指令和CMP指令作用相似,一個比較位,一個比較字或位元組。
  • 邏輯或指令OR
OR dst, src     //將目的運算元和源運算元進行按位邏輯或運算,結果賦值給目的運算元。

OR指令和AND指令:如果將一個暫存器和本身進行運算,不改變暫存器的值,隻影響狀態標誌位。
經常用暫存器與自身按位與AND或者按位或OR,根據狀態標誌位來判斷資料是否為0,用CMP指令雖然能達到同樣的效果,但是指令位元組較多,執行速度慢。
  • 邏輯異或運算指令XOR
XOR dst, src    //將dst和src進行按位異或運算,結果賦值給dst。

XOR指令的一個用途是:將暫存器或儲存器某些特定的位”求反“,使其餘位不變。**求反的位與”1“異或,不變的位與”0“異或。
  • 邏輯非運算NOT
NOT dst //運算元不能為一個立即數。

2.3.2 移位指令

  • 邏輯左移/算術左移指令SHL/SAL
SHL dst, 1/CL   //將dst邏輯左移1位或CL位
SAL dst, 1/CL   //將dst算術左移1位或CL位
SHL和SAL操作完全相同,左移一次可以實現dst乘以2操作。
  • 邏輯右移指令SHR
SHR dst, 1/CL   //將dst向右移1位或CL暫存器指定的位數,最高位補0。右移一次可以實現除以2操作。
  • 算術右移指令SAR
SAR dst, 1/CL   //將dst向右移1位或CL暫存器指定的位數,最高位保持不變。

2.3.3 迴圈移位指令

  • 迴圈左移指令ROL
ROL dst, 1/CL   //將dst向左迴圈移動1位或者CL暫存器指定的位數。
  • 迴圈右移指令ROR
ROR dst, 1/CL   //將dst向右迴圈移動1位或者CL暫存器指定的位數。
  • 帶進位迴圈左移指令RCL
RCL dst, 1/CL   //將dst與進位標誌CF一起向左迴圈1位或者CL暫存器指定的位數。
  • 帶進位迴圈右移指令RCR
RCR dst, 1/CL   //將dst與進位標誌CF一起向右迴圈1位或者CL暫存器指定的位數。

2.4 串操作指令

  • 串傳送指令
MOVS dst_string, src_string //將一個位元組或字從儲存器的某個區域傳送到另一個區域。
MOVSB                       //B代表位元組串傳送,有B這個標誌,指令後不能出現運算元。
MOVSW                       //W代表字傳送,有W這個標誌,指令後不能出現運算元。

例子: SI和DI分貝是源變址暫存器和目的變址暫存器
LEA SI, BUFFER1 ;源串首地址指標
LEA DI, BUFFER2 ;目的串首地址指標
MOV CX, 200     ;字串長度
CLD             ;清除方向標誌DF
REP MOVSB       ;傳送200位元組    REP是重複字首
HLT             ;停止
  • 串裝入指令LODS
LODS src_string //將一個字串中的位元組或字逐個裝入累加器AL或AX中。
LODSB
LODSW
  • 串送存指令STOS
STOS    dst_string  //將累加器AL或AX的值送存到記憶體緩衝區某個位置。
STOSB
STOSW
例子:將字元”#“裝入以AREA為首地址的100個位元組中
LEA DI, AREA    
MOV AX, '##'
MOV CX, 50
CLD
REP STOSW
HTL
  • 串比較指令SCAS
SCAS dst_string //SCAS指令在一個字串中搜索特定的關鍵字。字串的起始地址只能放在(ES:DI)中,不能段超越,待搜尋的關鍵字必須放在累加器AL或AX中。
SCASB
SCASW

2.5 控制轉移指令

2.5.1 轉移指令

將一種程式控制從一處改換到另一處的最直接的方法。在CPU的內部,轉移是通過將目標地址傳送給CS和IP(段間轉移)或IP(段內轉移)來實現的。

  • 無條件轉移指令JMP
- 段內直接轉移
JMP near_label  //程式碼段暫存器CS的內容不變,JMP指令計算出下一條指令的地址到目標地址之間的16位相對位移量disp,disp可正可負。範圍-32768 - 32767

- 段內直接短轉移
JMP short_label //相對位移量disp的範圍為-128 - 127,屬於短標號。

- 段內間接轉移
JMP reg16/mem16 //用指定的暫存器或儲存器的內容取代當前IP的值,以實現程式的轉移。

- 段間直接轉移
JMP far_label   //運算元是一個遠標號,該標號在另一個程式碼段內。IP和CS內容會被該程式碼段標號資訊取代。

- 段間間接轉移
JMP mem32   //將儲存器的前兩個位元組賦值給IP,後兩個位元組賦值給CS。
  • 條件轉移指令
Jcc short_babel //”cc“表示條件,首先測試規定條件,如果滿足則跳轉到目標地址,否則,繼續執行。條件可以是無符號位的高 | 低(Above | Below),帶符號數的大 | 小(Great | Less)等等。

2.5.2 迴圈控制指令

  • LOOP
LOOP short_label    //LOOP要求使用CX做暫存器的內容減一,結果不為零,則轉到指令指定的短標號處。
LOOPE short_label   //"E" 是相等equal
LOOPZ short_label   //"Z" 是等於零zero
LOOPNE short_label  //”NE“是不相等
LOOPNE short_label  //”NZ“是不為零

2.5.3 過程呼叫與返回指令

  • 過程呼叫指令CALL
- 段內直接呼叫
CALL    near_proc       //運算元是一個近過程,過程在本段內。

- 段內間接呼叫
CALL    reg16/mem16 //運算元是一個16位的暫存器或儲存器,先將IP入棧,再講運算元內容賦值給IP。

- 段間直接呼叫
CALL    far_proc        //運算元是一個遠過程,在另外的程式碼段。會先將CS和IP入棧,在更新其值為該程式碼段的資訊。

- 段間間接呼叫
CALL    mem32       //運算元是一個32位的儲存器,先將CS和IP入棧,再見運算元的後兩個位元組給CS,前兩個位元組給IP。
  • 過程返回指令RET
    一般將堆疊之前儲存的斷點值彈出,程式返回原來呼叫的地方。RET允許帶一個彈出只(pop_value),範圍是0 - 64K大小,表示返回時從堆疊捨棄的位元組數大小。

2.6 處理器控制指令

  • 標誌位操作指令
CLC:清進位標誌
STC:置進位標誌
CMC:對進位標誌求反
CLD:清方向標誌
STD:置方向標誌
CLI:清中斷允許位標誌
STI:置中斷允許標誌
  • 外部同步指令
- HLT       //使CPU進入暫停狀態
- WAIT  //使CPU進入等待狀態
- ESC   //ESC ext_op, src   使其他處理器使用8086的定址方式,並取得指令。
- LOCK  //使CPU匯流排鎖定低電平有效,直到執行完下一條指令。
  • 空操作指令NOP
    NOP指令不進行任何操作,但是會佔用3個時鐘週期。

相關推薦

8086/8088指令方式彙編指令總結

8086/8088指令系統 6個狀態標誌位 CF:進位標誌位 PF:奇偶標誌位 AF:輔助進位標誌位 ZF:零標誌位 SF:符號標誌位 OF:溢位標誌位 3個控制標誌位 TF:跟蹤(陷阱)標誌位,如果為1,則CPU處於單步工作方式。

16-8086處理器的方式

CPU作為計算機的中央處理器,每天忙忙碌碌,只要它工作著就會不斷地執行指令,處理各種資料。既然要處理資料,就會涉及兩個問題: 1. 資料在哪裡,如何獲取 2. 處理完之後,把資料送到哪裡去 而在計算機中,定址方式就是如何找到要操作的資料,以及把資料處理完存放到哪裡。對

IA-32指令方式

intel 64和IA-32架構中的指令編碼通常包括以下幾個部分:可選的指令字首(字首的順序任意),主操作碼位元組(最多3個位元組),一個定址方式指定位元組(可選,該位元組包含ModR/M位元組以及可選的SIB位元組<scale-index-base>),一個d

8086彙編學習之方式、資料型別以及幾個資料操作指令

一、and、or指令與應用: 1、描述: and指令:按位與 or指令:按位或 and register value or register value 其按位操作關係與C、C++等是一樣的,無需贅言。 eg:

MIPS的暫存器、指令方式的分類

MIPS的32個暫存器 助記符 編號 作用 zero 0 恆為0 at 1 (assembly temporary)保留給彙編器使用 v0,v1 2-3

80X86方式與常見彙編指令

1、指令      指令:操作碼和運算元組成(不定有運算元);      操作碼:執行操作,用一個唯一的助記符表示,對應著機器指令的一個二進位制編碼;      運算元:操作物件,可以是數值,暫存器或儲存器地址;      助記符格式:      操作碼  目的運算元,源

C語言的本質(29)——C語言與彙編之暫存器方式

x86的通用暫存器有eax、ebx、ecx、edx、edi、esi。這些暫存器在大多數指令中是可以任意選用的,比如movl指令可以把一個立即數傳送到eax中,也可傳送到ebx中。但也有一些指令規定只能用其中某些暫存器做某種用途,例如除法指令idivl要求被除數在eax暫存器中

資料表示、方式指令系統_計算機系統結構第二章_自考本科

概要:計算機系統結構第二章資料表示、定址方式與指令系統知識點小結 一、資料表示(應用) 1、資料表示的定義,資料表示與資料結構的關係     定義:能由計算機硬體識別和引用的資料型別,表現再它有對這種型別的資料進行操作的指令和運算部件 &nbs

組合語言——彙編的8種方式,以及2個預設段暫存器

1.立即定址方式 MOV AH, 80H(直接給暫存器賦值)2. 暫存器定址方式(源或者目的有一個是暫存器) 2.1) 源運算元是暫存器定址方式 如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。 其中:VARD、VARW和VARB是雙字,字和位元組

彙編中的方式

儲存器   儲存器(Memory)是現代資訊科技中用於儲存資訊的記憶裝置。其概念很廣,有很多層次,在數字系統中,只要能儲存二進位制資料的都可以是儲存器;在積體電路中,一個沒有實物形式的具有儲存功能的電路也叫儲存器,如RAM、FIFO等;在系統中,具有實物形式的儲存裝置也叫儲存器,如記憶體條、

Atitit 計算機系統結構 計算機系統結構 Cpu 儲存 cache 指令系統 目錄 Line 56: 第2章指令系統設計 指令格式 方式 1 Line 64: 第3章CPU及其實現

Atitit 計算機系統結構  計算機系統結構   Cpu  儲存 cache   指令系統 目錄 Line 56: 第2章指令系統設計 指令格式  定址方式 1 Line 64: 第3章CPU及其實

(王爽版)彙編實驗7 方式在結構化資料訪問中的應用

題目如下: 彙編程式碼如下: assume cs:codesg ;資料段 data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984'

關於51微控制器方式的個人總結困惑點記錄及自答

在學習MCS-51定址方式時,對定址的含義、定址中操作硬體(暫存器、ROM、RAM)又產生了一些新的困惑和理解,先進性如下總結。 在大二學習計算機組成原理時只是粗略的知道CPU中存在暫存器

彙編方式

處理資料的兩個基本問題 1 處理的資料在什麼地方 2 處理的資料有多長 用符號reg表示一個暫存器 reg集合 : AX,BX,CX,DX,AH,BH,CH,DH,AL,BL,CL,DL,SP,BP,SI,DI 用符號sreg表示一個段暫存器 sreg集合

彙編方式總結

一,暫存器定址        例如:mov ax,bx         運算元在cpu的兩個暫存器中。 二, 立即數定址       例如:mov ax,1234h        指令直接存放

ZigBee傳輸方式方式的理解

利用空閒時間做一個總結: 傳輸方式: 直接傳輸:zigbee 協調器、路由器、終端節點之間相互傳輸。他們之間的資料直接轉移。 間接傳輸:ZigBee不直接把資料傳輸給某個目標節點,而是通過信標的方式,

微機原理 暫存器七種方式

16位cpu 八個通用暫存器 指令指標IP 標誌暫存器FR 段暫存器 AX BX  CX DX BP SP SI DI 其中前四個又分為高八位和低八位 AX 累加器 BX 基址暫存器 CX 計數暫存器 DX 資料暫存器 BP 基址指標暫存器 SP 堆疊指標暫存器 

彙編的8種方式,以及2個預設段暫存器

16位CPU所含有的暫存器有(見圖2.1中16位暫存器部分): 4個數據暫存器(AX、BX、CX和DX) 2個變址和指標暫存器(SI和DI) 2個指標暫存器(SP和BP) ,32位CPU增加2個16位的段暫存器:FS和GS。 4個段暫存器(ES、CS、SS和DS) 1個指令

彙編--運算元方式

一:直接記憶體運算元 num DWORD 200h mov eax, num mov ebx,[num] ;==mov ebx, num 因為num資料標號本身就代表著地址 二:直接偏移運算元 arrayB  BYTE 10h,20h,30h,40h,50h mov al

程式的機器級表示:方式指令及棧的執行機制

程式的機器級表示 時隔一年把 CS:APP 再看一遍,尤其針對棧的執行機制加深理解。 訪問資訊 16個通用暫存器 一個 x86-64 CPU 包含一組16個儲存64位值的通用目的暫存器。雖然是通用暫存器,但也有一些約定成俗的用法。r8 r9 ... 為80386之後擴充套件的8個暫存器 \(rax\), 返