汇编语言程序设计---期末复习大纲知识点总结(王爽第二版)
文章目錄
- @[toc]
- 第一~三章 概述
- 第四~六章 基本程序結構
- 第七章 更靈活的訪存方法
- 第八章 數據處理的兩個基本問題
- 第九章 轉移指令的原理
- 第十章 call和ret指令
- 第十一章 標志寄存器
- 第十二章 中斷
- 第十三章 中斷程序設計 + 宏
- 第十四~十六章 端口、外中斷、
- @[toc]
- 第一~三章 概述
- 第四~六章 基本程序結構
- 第七章 更靈活的訪存方法
- 第八章 數據處理的兩個基本問題
- 第九章 轉移指令的原理
- 第十章 call和ret指令
- 第十一章 標志寄存器
- 第十二章 中斷
- 第十三章 中斷程序設計 + 宏
- 第十四~十六章 端口、外中斷、
第一~三章 概述
1.機器語言、匯編語言、高級語言的概念
機器語言:直接用二進制代碼的機器指令表示的語言
匯編語言:用指令助記符、符號地址、標號等符 號書寫程序的語言
高級語言:一種類似于人類語言的語言
2.匯編語言特點
占用空間少、執行速度快、直接控制硬 件能力強,但不容易掌握、開發周期較長且 可移植性差。
3.匯編語言工作過程
4.8086寄存器組
8086CPU有14個寄存器 :
AX、BX、CX、DX、SI、DI、SP、BP、
IP、CS、SS、DS、ES、PSW(FLAGS)
(1)通用寄存器:AX、BX、CX、DX
AX:累加寄存器,通常用于運算,在乘除指令中指定用來存放操作數,另外,所有的I/O指令都使用這一寄存器與外界設備傳輸數據。
BX:基址寄存器,常用于地址索引。
CX:計數寄存器,常用于計數;常用于保存計算值,如位移指令,循環(loop)和串處理指令中作隱含的計數器。
DX:數據寄存器,常用于數據傳遞。
(2)段寄存器:CS、DS、SS、ES
當8086CPU要訪問內存時,由這4個段寄 存器提供內存單元的段地址。
匯編指令不區分大小寫
5.三大總線
地址總線: CPU是通過地址總線來指定存 儲單元的。
總線的寬度決定了物理尋址的范圍。
一個CPU有N根地址總線,CPU最多可以尋找 2^N個內存單元
數據總線 :數據總線的寬度決定了CPU和外界進行一次數 據傳送的位數。
控制總線 :不同控制線的集合,控制總線的寬度決定了 CPU對外部器件的控制能力
6.物理地址 = 段地址×16+偏移地址
CPU可以用不同的段地址和偏移 地址形成同一個物理地址
7.8086PC工作過程
(1)從CS:IP指向內存單元讀取指令,讀取 的指令進入指令緩沖器;
(2)IP = IP + 所讀取指令的長度,從而 指向下一條指令;
(3)執行指令。 轉到步驟 (1),重復這 個過程。
8086CPU 加電啟動或復位后( 即 CPU剛開 始工作時)CS和IP被設置為CS=FFFFH, IP=0000H,即FFFF0H單元中的指令是 8086PC機開機后執行的第一條指令。
8.從80386開始,Intel的CPU具有3種運行模式:實模式、 保護模式和虛擬8086模式
9.存儲器中數據的組織方式
大端方式 :高位字節排放在內存的低地址端,低位字節存放在高地址端。
小端方式 :低位字節存放在內存的低地址端,高位字節存放在高地址端
10.mov指令的格式: mov 寄存器名,內存單元地址
執行指令時,8086CPU自動取DS中的數據 為內存單元的段地址
11.
12.mov指令的幾種形式:
mov 寄存器,數據
mov 寄存器,寄存器
mov 寄存器,內存單元
mov 內存單元,寄存器
mov 段寄存器,寄存器
13.8086CPU提供入棧和出棧指令:
PUSH (入棧)
POP (出棧)
如:
push ax
pop ax
8086CPU的入棧和出棧操作以**字**為單位進行。
14.任意時刻,SS:SP指向棧頂元素
15.push指令的執行過程
push ax
(1)SP=SP–2;
(2)將ax中的內容送入SS:SP指向的內存單元處,SS:SP此時指向新棧頂
16.pop指令的執行過程
pop ax
(1)將SS:SP指向的內存單元處的數據送入ax中;
(2)SP = SP+2
17.8086CPU不保證對棧的操作不會超界
18.push和pop指令是可以在寄存器和內存 之間傳送數據的。
19.push、pop 實質上是一種內存傳送指令,可以在寄存器和內存之間傳送數據。不過,push和pop指令訪問的內存單元的地址是由SS:SP指出的同時,push和pop指令還要改變 SP ,棧頂sp的變化范圍為:0~FFFFH。
20.對于數據段,將它的段地址放在 DS中。對于代碼段,將它的段地址放在 CS中,將段中第一條指令的偏移地址放在IP中。對于棧段,將它的段地址放在SS中,將棧頂單元的偏移地置放在 SP 中。
第四~六章 基本程序結構
1.一個匯編語言程序從寫出到最終執行的簡要過程:編寫 --〉編譯 --〉連接 --〉執行
2.
3.匯編程序從寫出到執行的過程
4.用R命令可以看各個寄存器的設置情況
用U命令查看一下其他指令
用T命令單步執行程序中的每一條指令,并觀察每條指令的執行結果,到了 int 21,我們要用P命令執行
使用Q命令退出Debug,將返回到command中,因為Debug是由command加載運行的
5.要完整地描述一個內存單元,需要兩種信息:
(1)內存單元的地址;
(2)內存單元的長度(類型)
6.mov ax,[bx]
功能:bx 中存放的數據作為一個偏移地址,段地址 默認在ds 中,將ds:[bx]處的數據送入ax中。
即: (ax)=(ds *16 +(bx));
7.mov [bx],ax
功能:bx中存放的數據作為一個偏移地址,段地址默認在ds中,將ax中的數據送入內存ds:[bx]處。
即:(ds *16 +(bx)) = (ax)
8.CPU 執行loop指令的時候,要進行兩步操作:
① (cx)=(cx)-1;
② 判斷cx中的值,不為零則轉至標號處執行程序,如果為零則向下執行。
9.通常,我們可以用loop指令來實現循環功能,cx 中存放循環次數
10.我們在Debug中寫過類似的指令:
mov ax,[0]
表示將ds:0處的數據送入al中。
但是在匯編源程序中,指令“mov ax,[0]”被編譯器當作指令“mov ax,0”處理
11.顯式地指明內存單元的段地址的“ds:”、“cs:”、“ss:”或“es:”,在匯編語言中稱為段前綴
12.一般,DOS方式下,DOS和其他合法的程序一般都不會使用0:200~0:2FF( 0:200h~0:2FFh)的256 個字節的空間。所以,我們使用這段空間是安全的.
13.end的作用:end 除了通知編譯器程序結束外,還可以通知編譯器程序的入口在什么地方。
14.end start:說明了程序的入口,可執行文件中的程序被加載入內存后,CPU的CS:IP被設置指向這個入口,從而開始執行程序中的第一條指令
15.inc bx 表示bx自加一,比add bx,1要快不少
第七章 更靈活的訪存方法
1.大、小寫字母的ASCII碼值相差**20H**
2.通過and和or指令,進行大小寫轉換
3.[bx+ idata]:也可表示一個內存單元,偏移地址為(bx)+ idata
用[bx+idata]的方式進行數組處理如下:
4.SI和DI是8086CPU中和bx功能相近的寄存器,SI和DI不能分成兩個8位寄存器來使用。
5.更靈活的方式:[bx+si]、[bx+di]、[bx+si+idata]
6.一般來說, 在需要暫存數據的時候,我們都應該使用**棧**。
7.在8086CPU中,只有4個寄存器(bx、 bp、si、di) 可以用在“[…]"中來進行內存單元的尋址。
可以單個出現,或只能以四種組合出現:bx和si、bx和di、bp和si、bp和di
8.只要在[…]中使用寄存器bp,而指令中沒有顯性的給出段地址,段地址就默認在ss中。比如:
mov ax,[bp+ si+idata]
含義: (ax)=((sS)*16+(bp)+(si)+ idata)
第八章 數據處理的兩個基本問題
1.8086CPU的指令,可以處理Byte、word兩種長度的數據
(1)寄存器指明
mov al,ds:[0]
(2)用操作符X ptr指明
(X =word/byte)
add word ptr [bx],2
mov byte ptr ds:[0],1
push [1 000H]
(3)其他方法(如堆棧默認以字為單位)
3.div 是除法指令,使用div 做除法的時候要注意以下問題。
(1)除數:有8位和16位倆種,在一個reg或內存單元中
(2)被除數:默認放在AX 或 DX和AX中,如果除數為8位,被除數則為16位,默認放在AX中;如果除數位16位,被除數則位32位,存放在DX和AX中,DX存放高16位,AX存放低16位。
(3)結果,若除數為8為,則AL存放商,AH存放余數。若除數為16位,AX存放商,DX存放余數。
例子如下
4.db 和 dw 定義字節型數據和字型數據。dd是用來定義dword(double word,雙字)型數據的,占倆個字。
5.dup是一一個操作符,在匯編語言中同db、dw、dd等一樣,由編譯器識別處理,和db、dw、dd等偽指令配合使的,用來進行數據的重復。
第九章 轉移指令的原理
1.offset的功能是取得標號的偏移地址,偽操作符
2.jmp為無條件轉移指令,可以只修改IP也可以同時修改CS和IP。
jmp指令要給出兩種信息:
(1)轉移的目的地址
(2)轉移的距離(段間轉移、段內短轉移、段內近轉移)
3.jmp near ptr標號實現段內近轉移。
指令jmp near ptr標號”的功能為: (IP)=(IP)+ 16位位移。
4.jmp far ptr標號:
(CS)=標號所在段的段地址;
(IP)=標號所在段中的偏移地址。
far ptr指明了指令用標號的段地址和偏移地址修改CS和IP。
5.jmp short 標號(轉移到標號處執行指令)
這種實現的是段內短轉移,它對IP的修改范圍為-128 ~ 127,也就是說它向前最多轉移128個字節,向后轉移最多127個字節。jmp指令中的“short”符號說明指令是短轉移。jmp指令中的“標號”是代碼段中的標號,指明了指令要轉移的目的地,轉移指令結束后,CS:IP應該指向標號處的指令。
6.轉移地址在內存中的jmp指令有兩種格式。
(1)jmp word ptr 內存單元地址(段內轉移)
功能:從內存單元地址處開始存放著一個字,是轉移的目的偏移地址。
(2)jmp dword ptr 內存單元地址(段間轉移)
功能:從內存單元地址處開始存放著兩個字,高地址處的字是轉移的目的段地址,低地址處是目標的偏移地址。
(CS)=(內存單元地址+2)
(IP)=(內存單元地址)
7.jcxz指令是一個有條件轉移指令,所有的條件住哪一指令都是短轉移。 IP的修改范圍都為:-128 ~ 127。
指令格式:jcxz 標號(如果(CX) = 0,轉移到標號處執行)
其功能的解釋相當于:if((CX) == 0) jmp short 標號。
8.loop 指令為循環指令,所有的循環指令都是短轉移。IP修改的范圍為:-128 ~ 127.
指令格式:loop 標號((CX) = (CX) - 1, 如果(CX) != 0,轉移到標號處執行)
9.“jmp 2000:0100”,是在Debug中使用的匯編指令,匯編編譯器并不認識,如果在源程序中使用,編譯時也會報錯。
第十章 call和ret指令
1.Ret指令用棧中的數據,修改IP的內容,從而實現近轉移;
(1) (IP)=((SS)x16+(sp))
(2) (sp)=(sp)+2
2.Retf指令用棧中的數據,修改CS和IP的內容,從而實現遠轉移;
(1) (IP)=((SS)x16+(sp))
(2) (sp)=(sp)+2
(3) (CS)=((SS)x16+(sp))
(4) (sp)=(sp)+ 2
3.CPU執行call指令,進行兩步操作:
(1)將當前的IP或CS和IP壓入棧中;
(2)轉移。
call指令不能實現短轉移,除此之外,call指令實現轉移的方法和jmp指令的原理相同.
4.call標號
(將當前的IP壓棧后,轉到標號處執行)
(1)(sp) = (sp)- 2
((SS)x16+(sp)) = (IP)
(2) (IP) = (IP) + 16位位移
16位位移=“標號”處的地址 一 call指令后的第一個字節的地址;
16位位移的范圍為-32768~32767, 用補碼表示;
16位位移由編譯程序在編譯時算出。
5.CPU執行指令“call 標號”時,相當于進行:
push IP
jmp near ptr 標號
6.指令“call far ptr標號”實現的是段間轉移。
call far ptr標號:
(1) (sp) = (sp)- 2
((ss) X16+(sp)) = (CS)
(sp) = (sp)- 2
((ss) X16+(sp)) = (IP)
(2)(CS)=標號所在的段地址
(IP)=標號所在的偏移地址
7.call 16位寄存器
功能:
(sp) = (sp)- 2
((ss)*16+(sp)) = (IP)
(IP) = (16位寄存器)
8.轉移地址在內存中
(1)call word ptr 內存單元地址
push IP
jmp word ptr 內存單元地址
(2) call dword ptr內存單元地址
push CS
push IP
jmp dword ptr 內存單元地址
9.call和ret來實現子程序
10.偽指令PROC
過程定義偽指令格式:
子程序名 PROC 屬性
…
子程序名 ENDP
說明:屬性分為NEAR屬性和FAR屬性。默認為NEAR.
11.主程序和子程序在同一個代碼段使用NEAR屬性。否則,使用FAR屬性。
Call指令執行時,系統根據子程序名的屬性決定保存斷點的段地址和偏移地址。
12.mul指令
格式:
mul reg
mul 內存單元
相乘的兩個數:要么都是8位,要么都是16位。
8位:AL中和8位寄存器或內存字節單元中;
16位:AX中和16位寄存器或內存字單元中。
結果:如果是8位乘法,結果默認放在AX中;如果是16位乘法,結果高位默認在DX中存放,低位在AX中放。
13.內存單元可以用不同的尋址方式給出,比如:
mul byte ptr ds:[0]
含義為:
(ax)=(al)x((ds)x16+0);
mul word ptr [bx+si+ 8]
含義為:
(ax)=(al)x((ds)x16 +(bx)+ (si)+ 8)結果的低16位;
(dx)=(al)x((ds)x16+(bx)+(si)+ 8)結果的高16位;
14.xchg指令
指令格式: XCHG OPRD1, OPRD2
???????? 目的 ??? 源
功能:將一個字節或一個字的源操作數和目的操作數相交換。
交換指令可以在寄存器之間,寄存器與存儲器之間進行。
15.XCHG指令不允許的情況有以下四種:
(1)不能同時都為內存操作數
(2)任何一個操作數都不能為段寄存器
(3)任何一個操作數不能為立即數
(4)兩個操作數的長度必須相等
16.
17.
第十一章 標志寄存器
1.
2.
3.ZF標志
flag的第6位是ZF,零標志位。
它記錄相關指令執行后,結果為0,ZF=1;結果不為0,ZF =0
示例如下
mov ax, 1 mov aX, 1
sub ax, 1 and ax,0
指令執行后,結果為0,則ZF = 1。
mov ax,2 mov aX,I
sub ax, 1 or aX, 1
指令執行后,結果為1,則ZF = 0。
4.PF標志
flag的第2位是PF,奇偶標志位。
它記錄指令執行后,結果的所有二進制位中1的個數:
為偶數,PF=1;
為奇數,PF=0。
示例如下
指令:mov al,1
add al,10
執行后,PF=0;
指令:mov al,1
or al,10
執行后,PF=1 ;
5.SF標志
flag的第7位是SF。符號標志位。
它記錄指令執行后,結果為負,SF=1;結果為正,SF=0。
6.CF標志
flag的第0位是CF,進位標志位。
一般,在進行無符號數運算的時候,它記錄運算結果的最高有效位向更高位的進位值,或從更高位的借位值。
示例如下
mov al,98H
add al,al
執行后: (al)=30H, CF= 1
7.OF標志
溢出:在進行有符號數運算的時候,如結果超過了機器所能表示的范圍稱為溢出。
注意CF和OF的區別:
CF是對無符號數運算有意義的標志位;
而OF是對有符號數運算有意義的標志位。
示例如下
mov al, 0F0H
add al, 88H
執行后:
CF=1,OF=1。
對于無符號數運算,0F0H+ 88H有進位,CF=1 ;
對于有符號數運算,0F0H+ 88H發生溢出,OF=1。
8.adc指令
adc是帶進位加法指令,它利用了CF位上記錄的進位值。
格式:adc操作對象1 ,操作對象2
功能:操作對象1=操作對象1 +操作對象2+ CF
示例如下
mov ax,2
mov bx,1
sub bx,ax
adc ax,1
執行后,(ax)=4。
9.adc指令和add指令相配合可以對更大的數據進行加法運算。
10.sbb指令
sbb是帶借位減法指令,它利用了CF位上記錄的借位值。
格式:sbb操作對象1 ,操作對象2
功能:操作對象1=操作對象1-操作對象2-CF
11.cmp指令
cmp是比較指令,功能相當于減法指令只是不保存結果。
cmp指令執行后,將對標志寄存器產生影響。
格式:cmp操作對象1 ,操作對象2
功能:計算操作對象1-操作對象2
12.
13.cmp ah,bh
(1)如果SF=1,而OF=0
OF=0,說明沒有溢出,邏輯上真正結果的正負=實際結果的正負;
因SF=1,實際結果為負,所以邏輯上真正的結果為負,所以(ah) <(bh)。
(2)如果SF=1,而OF= 1因為溢出導致了實際結果為負,那么邏輯上真正的結果必然為正。
SF=1,OF = 1,說明了(ah)>(bh)。.
(3)如果SF=0,而OF= 1,因為溢出導致了實際結果為正,那么邏輯上真正的結果必然為負。
這樣,SF=0,OF=1,說明了(ah)<(bh)。
(4) 如果SF=0,而OF=0(ah)≥(bh)。
14.
15.DF標志
flag的第10位是DF,方向標志位。
在串處理指令中,控制每次操作后si, di的增減。
DF = 0:每次操作后si,di遞增;
DF = 1:每次操作后si,di遞減。
16.串傳送指令
格式1 :movsb
功能:(以字節為單位傳送)
(1) ((es)X16 + (di)) = ((ds) X 16 + (si))
(2)如果DF=0則:(si)=(si)+1
(di)=(di)+1
如果DF=0則:(si)=(si)-1
(di)=(di)-1
格式2:movsw
功能:(以字為單位傳送)
將ds:si指向的內存字單元中word送入es:di中,然后根據標志寄存器DF位的值,將si和di遞增2或遞減2。
17.一般,movsb和movsw都和rep配合使用。
rep movs b
用匯編語法來描述rep movsb的功能就是:
S:movsb
loop S
rep movsw
用匯編語法來描述rep movsw的功能就是:
S: movsw
loop S
18.對DF位進行設置:
cld指令:將標志寄存器的DF位置0
std指令:將標志寄存器的DF位置1
19.pushf :將標志寄存器的值壓棧;
popf :從棧中彈出數據,送入標志寄存器中。
第十二章 中斷
1.中斷源分為軟件中斷和硬件中斷,軟件中斷又稱為內中斷,硬件中斷稱為外部中斷。
2.軟件中斷
(1)由中斷指令int n引起。n指出中斷類型
(2)由CPU的某些錯誤引起:除法錯中斷(類型號0)、溢出中斷( 類型號4)
(3)為調試程序DEBUG設置的中斷:單步中斷(類型號1)、斷點中斷(類型號3)
3.CPU用8位的中斷類型碼通過中斷向量表找到相應的中斷處理程序的入口地址。
4.
5.80 86CPU的中斷過程:
(1)取得中斷類型碼;
(2)標志寄存器的值入棧
(3)設置標志寄存器的第8位TF和第9位IF的值為0
(4) CS的內容入棧;
(5) IP的內容入棧;
(6)從內存地址為中斷類型碼x4和中斷類型碼x4+2的兩個字單元中讀取中斷處理程序的入口地址設置IP和CS。
6.中斷處理程序的編寫方法:
(1)保存用到的寄存器。
(2)處理中斷。
(3)恢復用到的寄存器。
(4)用iret指令返回。
iret指令的功能用匯編語法描述為:
pop IP
pop CS
7.編譯處理0號中斷
8.Debug利用單步中斷來實現T命令的功能,也就是說,用T命令執行一條指令后,CPU響應單步中斷,執行Debug設置好的處理程序,才能在屏幕上顯示寄存器的狀態,并等待命令的輸入。
9.有幾種特殊情況CPU不能響應中斷: .
(1) 當執行到STI指令時,CPU不會馬上響應中斷。STI指令是開中斷指令,要求在開放中斷后再執行后續的一條指令后才能響應中斷;
(2)IRET指令是中斷子程序返回指令,它也要求再執行一條后續指令后才能響應中斷。這樣做的目的是保護系統能夠正常運行;
(3)當執行MOV SS,AX指令,即向SS段寄存器傳送數據時,即使發生了中斷,CPU也不會響應;直到本條執行完后,接著再執行一條指令才響應中斷。
第十三章 中斷程序設計 + 宏
1.軟件中斷子程序的編寫
(1)保存現場;
(2) STI開中斷指令 ;如允許中斷嵌套,則開中斷
(3)處理中斷;
(4) CLI關中斷指令;
(5)恢復現場;
(6) IRET指令,返回被中斷的程序
2.屏幕及光標控制INT 10H
(1)光標大小設置
格式: AH=01H
CH=光標開始行
CL=光標結束行
INT 10H
(2)設置光標位置
格式: AH=02H
DH=行號
DL=列號
BH=頁號
INT10H
(3)讀光標位置
格式: AH=03H
BH=頁號
INT 10H
返回值:DH=行號,DL=列號,CX=光標大小
3.宏是源程序中一段有獨立功能的程序代碼。宏也可以稱為宏指令、宏操作。
宏的使用需要經過三個步驟:宏定義、宏調用和宏展開。
4.
5.宏與子程序都是編寫結構化程序的重要手段,兩者各有特色。
●相同之處:宏和子程序都可以定義為一段功能程序,可以被其他程序調用。
●不同之處:
(1)宏指令利用啞元和實元進行參數傳遞。宏調用時用實元取代啞元,避免了子程序因參數傳遞帶來的麻煩。使宏匯編的使用增加了靈活性。
(2)實元還可以是指令的操作碼或操作碼的一部分,在編譯匯編的過程中指令可以改變。
(3)宏調用的工作方式和子程序調用的工作方式是完全不同的。
第十四~十六章 端口、外中斷、
1.CPU可以直接讀寫3個地方的數據:(1) CPU內部的寄存器;(2)內存單元;(3)端口。
2.端口的讀寫指令只有兩條:In、Out
3.注意:在in和out指令中,只能使用ax或al來存放從端口中讀入的數據或要發送到端口中的數據。
訪問8位端口時用al,訪問16位端口時用ax。
4.shl邏輯左移指令,功能為:
(1)將一個寄存器或內存單元中的.數據向左移位;
(2)將最后移出的一位寫入CF中;
(3)最低位用0補充。
5.shr邏輯右移指令,sh|剛好相反:
(1)將一個寄存器或內存單元中的數據向右移位;
(2)將最后移出的一-位寫入CF中;
(3)最高位用0補充。
6.內中斷所弓|發的中斷過程:
(1)取中斷類型碼n;
(2)標志寄存器入棧,|F=0,,TF=0;
(3) CS、IP入棧;
(4) (IP)=(nx4), (CS)=(nx4 +2)
由此轉去執行中斷處理程序。
7.PC機鍵盤的處理過程
按下一個鍵時,開關接通,產生一個掃描碼(通碼),松開按下的鍵時,也產生一個掃描碼(斷碼)。掃描碼說明了松開的鍵在鍵盤上的位置。掃描碼被送入主板中60H端口的寄存器中。
8.斷碼=通碼+80H
9.鍵盤輸入的處理過程:
(1)鍵盤產生掃描碼;
(2)掃描碼送入60h端口;
(3)引發9號中斷;
(4) CPU執行int 9中斷例程處理鍵盤輸入。
10.數據傳送指令
比如:mov、push、 pop、pushf、 popf、 xchg等都是數據傳送指令,這些指令實現寄存器和內存、寄存器和寄存器之間的單個數據傳送。
11.算術運算指令
比如:add、sub、 adC、sbb、 inC、 deC、 cmp、imul、idiv、 aaa等都是算術運算指令,
這些指令實現寄存器和內存中的數據的算數運算。
它們的執行結果影響標志寄存器的: sf、 zf、of、cf、pf、af位。
12.邏輯指令
比如:
and、or、not、xor、test、shl、 shr、sal、sar、rol、 ror、rcl、 rcr 等都是邏輯指令。
除了not指令外,它們的執行結果都影響標志寄存器的相關標志位。
13.轉移指令
可以修改IP或同時修改CS和IP的指令統稱為轉移指令。轉移指令分為以下幾類:
(1)無條件轉移指令,比如: jmp;
(2)條件轉移指令,
比如: jCXZ、 je、jb、ja、, jnb、 jna等;
(3)循環指令,比如: loop;
(4)過程,比如: call、 ret、retf;
(5) 中斷,比如int、iret。
14.處理機控制指令
這些指令對標志寄存器或其他處理機狀態進行設置,
比如:cld、std、cli、 sti、 nop、clc、 cmC、stc、hlt、wait、esc、lock等都是處理機控制指令。
15.串處理指令
對內存中的批量數據進行處理
比如: movsb、 m0vSW、cmps、sCaS、 lods、stos等。
)鍵盤產生掃描碼;
(2)掃描碼送入60h端口;
(3)引發9號中斷;
(4) CPU執行int 9中斷例程處理鍵盤輸入。
10.數據傳送指令
比如:mov、push、 pop、pushf、 popf、 xchg等都是數據傳送指令,這些指令實現寄存器和內存、寄存器和寄存器之間的單個數據傳送。
11.算術運算指令
比如:add、sub、 adC、sbb、 inC、 deC、 cmp、imul、idiv、 aaa等都是算術運算指令,
這些指令實現寄存器和內存中的數據的算數運算。
它們的執行結果影響標志寄存器的: sf、 zf、of、cf、pf、af位。
12.邏輯指令
比如:
and、or、not、xor、test、shl、 shr、sal、sar、rol、 ror、rcl、 rcr 等都是邏輯指令。
除了not指令外,它們的執行結果都影響標志寄存器的相關標志位。
13.轉移指令
可以修改IP或同時修改CS和IP的指令統稱為轉移指令。轉移指令分為以下幾類:
(1)無條件轉移指令,比如: jmp;
(2)條件轉移指令,
比如: jCXZ、 je、jb、ja、, jnb、 jna等;
(3)循環指令,比如: loop;
(4)過程,比如: call、 ret、retf;
(5) 中斷,比如int、iret。
14.處理機控制指令
這些指令對標志寄存器或其他處理機狀態進行設置,
比如:cld、std、cli、 sti、 nop、clc、 cmC、stc、hlt、wait、esc、lock等都是處理機控制指令。
15.串處理指令
對內存中的批量數據進行處理
比如: movsb、 m0vSW、cmps、sCaS、 lods、stos等。
若要使用這些指令方便地進行批量數據的處理,則需要和rep、repe、 re pne等前綴指令配合使用。
總結
以上是生活随笔為你收集整理的汇编语言程序设计---期末复习大纲知识点总结(王爽第二版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类常用指标整理
- 下一篇: html鼠标悬停区域拉伸,html –