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. 地址運算元是與程式轉移地址有關的運算元,即指令中的操作物件不是資料,而是**要轉移的目標地址**。它也分為**立即數運算元**、**暫存器運算元**和**儲存器運算元**,即要轉移的目標地址包含在**指令中**,或者**暫存器**,或者**儲存單元**中。
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 地址定址方式
- 段內直接定址方式
- 段內間接定址方式
- 段間直接定址方式
- 段間間接定址方式
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\), 返