20192418彙編程式設計1~4章學習知識點總結
彙編程式設計
20192418張曦
組合語言一般概念
-機器語言
優點:執行速度快,程式長度短。
缺點:二進位制數表示的內容不便於記憶,難以閱讀。
-高階語言
特點:程式設計簡單,程式效率較低。
-組合語言
- 便於閱讀,效率高;
- 一條組合語言的語句與一條機器語言指令對應。
機器自檢、系統初始化、實際的輸入輸出裝置的操作等。
進位計數制及其相互轉換
- 各個位置上表示的基本數值稱為位權;
- 每個數位上能使用不同數碼的個數稱為基數。
B——二進位制
O——八進位制
D——十進位制
H——十六進位制
除基取餘法
減權定位法
乘積取整法
按權相加法
帶符號數的表示
-
真值:+和-表示正負數
-
機器數:0和1表示正數和負數
原碼
最高位表示符號,8位二進位制範圍:-127~127
補碼
帶符號數X的補碼,0為正,1為負
-
正數:與原碼相同
-
負數:取反加一
基本邏輯運算
AND
OR
非
異或XOR
IBM-PC微機基本結構
- 運算器
- 控制器
- 儲存器
- 輸入裝置
- 輸出裝置
運算器+控制器=中央處理器(CPU)
系統匯流排結構
- 地址匯流排
- 資料匯流排
- 控制匯流排
主儲存器
若干個儲存單元構成
編號地址來表示
輔助儲存器成為外存
輸入輸出裝置及介面
輸入:鍵盤滑鼠
輸出:顯示器印表機
系統匯流排
Intel 8086/8088 CPU的功能結構
CPU執行指令:
- 從儲存器中取指令
- 執行指令規定的操作
序列方式/指令流水線方式
執行單元EU
- 取出指令程式碼
- 對運算元執行算術或邏輯運算
- 向匯流排介面單元BIU傳送訪問主存或I/O的命令
匯流排介面單元BIU
- 取指令
- 存取資料
EU和BIU既分工又合作,且並行工作
CPU暫存器的結構和用途
- 通用暫存器8個
- 資料暫存器:AX BX CX DX
- 指標暫存器:SP BP
- 變址暫存器:SI DI
-
控制暫存器2個
IP FLAGS -
段暫存器4個
CS DS ES SS
CPU訪問儲存器時:
- 訪問的儲存單元屬於哪個段
- 該儲存單元與段起始地址(段基址)的偏移量
進位標誌位CF
奇偶標誌位PF
輔助進位標誌位AF
零標誌位ZF
符號標誌位SF
溢位標誌位OF
單步標誌位TF
中斷允許標誌位IF
方向標誌位DF
儲存器組織結構
儲存器的組成
- 若干個儲存單元構成
- 編號地址來表示
- 存放相同長度的二進位制數
儲存器的段結構
段基址
每16位元組單元分為一小節
1MB記憶體分為64K個小節
邏輯段
鄰接的、間隔的、部分重疊、完全重疊 四種情況
邏輯地址與實體地址及對應關係
邏輯地址:段基值、偏移量
邏輯地址轉換為實體地址:
邏輯地址的段基值左移4位,形成20位段基址然後與16位偏移量相加,結果可得20位實體地址。
堆疊及其操作方法
用途:主要用於暫存資料以及在過程呼叫或者處理中斷時儲存斷點資訊。
- 專用堆疊儲存器
- 軟體堆疊
棧底是最大地址單元
先進後出FILO
堆疊操作
- 設定堆疊
- 進棧PUSH
- 出棧POP
定址方式
- 指令:
- 操作碼
- 運算元
立即數運算元
暫存器運算元
儲存器運算元
I/O埠運算元
立即數只能作為源運算元,而不能作為目的運算元
- 立即數定址
- 暫存器定址
- 直接定址
(1)符號表示
(2)常數表示 - 暫存器間接定址
- 基址定址/變址定址
段暫存器的隱含使用規則與暫存器間接定址方式相同
相對有位移量指定的初始單元,因此也叫暫存器相對定址。 - 基址變址定址
EA=基址+變址+位移量
當基址選用BX時隱含使用段暫存器DS,而選用BP時則隱含使用段暫存器SS。 - 串操作定址方式
- I/O埠定址
特點:程式設計靈活,但需要佔用儲存地址空間。
(1)直接埠定址
(2)暫存器間接埠定址
指令系統
一種計算機能執行的各種型別的指令的集合成為計算機的指令系統
傳送類指令
- 通用資料傳送指令
MOV指令:
(1)立即數只能作源運算元,且不能傳送給段暫存器。
(2)段暫存器CS只能作源運算元,段暫存器之間不能直接傳送。
(3)儲存單元之間不能直接傳送資料。
(4)MOV指令不影響標誌位。 - 交換指令
作用:源運算元和目的運算元兩者內容相互交換。 - 標誌傳送指令
(1)取標誌暫存器指令
指令格式:LAHF
(2)儲存標誌暫存器指令
指令格式:SAHF
(3)標誌進棧指令
指令格式:PUSHF
(4)標誌出棧指令
指令格式:POPF - 地址傳送指令
(1)裝入有效地址
格式:LEA DEST,SRC
(2)裝入地址指標指令
格式:LDS DEST,SRC
LES DEST,SRC
算術運算類指令
- 加法指令
指令格式:ADD DEST,SRC - 帶進位加法指令
指令格式:ADC DEST,SRC
可實現大於16位的兩數相加
高16位在AX,低16位在BX - 加1指令
指令格式:INC DEST - 減法指令
SUB DEST,SRC - 帶借位減法
指令格式:SBB DEST,SRC - 減1指令
指令格式:DEC DEST - 求負數指令
NEG DEST
位操作類指令
- 邏輯運算指令
- 測試指令
指令格式:TEST DEST,SRC
移位/迴圈移位指令
(1)算術移位
(2)邏輯移位
(3)迴圈移位
處理器控制類指令
- 標誌位操作指令
(1)清除進位標誌
(2)置1進位標誌
(3)進位標誌取反
(4)清除方向標誌
(5)置1方向標誌
(6)清除中斷標誌
(7)置1中斷標誌 - 與外部事件同步的指令
HLT暫停指令
WAIT等待指令
ESC外部協處理器指令字首 - 空操作指令 NOP
指令編碼
彙編:將組合語言程式轉換為機器語言程式的過程
雙運算元指令編碼格式
- 一個運算元在暫存器中,另一個運算元在暫存器或儲存器中。
- 目的運算元在暫存器或儲存器中,源運算元是立即數。
- 2~6個位元組:操作特徵1,定址特徵1,位移量2,立即數2.
操作特徵部分
(1)OPCODE操作碼欄位
(2)d方向欄位
(3)W字/位元組欄位
定址特徵部分
包括MOD、REG、R/M三個欄位,REG欄位確定一個運算元
- REG欄位
暫存器定址方式 - MOD 和 R/M
位移量部分
- 沒有位移量
- 1位元組位移量disp8
- 2位元組位移量disp16
立即數部分
總是位於指令編碼的最後1~2個位元組。
單運算元指令編碼格式
2~3個位元組
操作特徵,定址特徵,位移量
與AX或AL有關的指令編碼格式
隱含指定AX/AL作為一個運算元的雙運算元指令
另一個運算元可以是立即數或儲存單元
其他指令編碼格式
組合語言程式格式
指令語句
標號-:-指令助記符-運算元-;-註釋
- 標號欄位
- 指令助記符
- 運算元欄位
- 註釋欄位(以分號開始)
偽指令語句
- 符號名欄位
- 偽指令符欄位
- 運算元欄位
- 註釋欄位
識別符號
組合語言資料
資料由數值和屬性組成
常數
二進位制
八進位制
十進位制
十六進位制
實數
字串常數
變數
存放資料的儲存單元
(1)段屬性:表示變數存放在哪一個邏輯段中
(2)偏移量屬性(OFFSET):所在位置與段起點之間的位元組數
段屬性和偏移量屬性就構造了變數的邏輯地址
(3)型別屬性:數值表示式,?表示式,字串表示式
(4)DUP表示式:重複資料操作符
變數的使用
- 在指令語句中引用
- 在偽指令語句中引用
標號
指令地址的別名
標號三屬性:段屬性,偏移量屬性,距離屬性(型別屬性)NEAR/FAR
符號定義語句
等值語句
語句格式:符號名 EQU 表示式
- 常數或數值表示式
- 地址表示式
- 變數、暫存器名或指令助記符
等號語句
格式:符號名=表示式
表示式與運算子
算術運算子
加減乘除餘 都是整數
SHR SHL 邏輯移位
邏輯運算子
關係運算符
EQ等於
NE不等於
LT小於
LE小於等於
GT大於
GE大於等於
數值返回運算子
- SEG運算子
取變數或標號所在段的段基值 - OFFSET運算子
取變數或標號在段內的偏移量 - TYPE運算子
取變數或標號的型別屬性,並用數字形式表示 - LENGTH運算子
用於取變數的長度
5.SIZE運算子
作用於變數,等於LENGTH 和TYPE 兩個運算子返回值的乘積
屬性修改運算子
- PTR運算子
型別 PTR 地址表示式 - HIGH/LOW運算子
分離高低位元組 - THIS運算子
與等值運算子EQU連用,定義型別屬性。
程式的段結構
偽指令定義和使用這些邏輯段
段定義偽指令
- 段名
符合識別符號定義規則的一個名稱,段名前後一致 - 定位型別
- PAGE:表示該段從一個頁面的邊界開始
- PARA:表示該段從一個小節的邊界開始(預設)
- WORD:該段從一個偶數字節地址開始
- BYTE:表示該段起始單元地址可以是任一地址值
- 組合型別
- 無連線關係
- PUBLIC:同名鄰接
- COMMON:產生一個覆蓋段
- STACK:把所有同名段連線成一個連續段,系統自動對SS段暫存器初始化為該連續段的段基址。並初始化堆疊指標SP。
- AT表示式:表示本段可定位在表示式所指示的小節邊界上。
- MEMORY:表示本段在儲存器中應定位在所有其他段之後的最高地址上。
- 類別名
段定址偽指令
ASSUME 段暫存器名:段名,段暫存器名:段名,……
NOTHING 將前面的設定刪除
段暫存器的裝入
- DS和ES的裝入
- SS的裝入
- CS的裝入
過程定義偽指令(PROC/ENDP)
在MASM巨集程式設計程式中,用過程(PROCEDURE)來構造子程式。
當前位置計數器$與定位偽指令ORG
$在使用上完全類似變數的使用
ORG——用於改變位置計數器的值
格式:ORG 數值表示式
標題偽指令
語句格式 TITLE 表示式
從程式返回作業系統的方法
- 使用程式段字首PSP實現返回
- 將使用者程式編製成一個過程,型別為FAR
- 將PSP的起始邏輯地址壓棧
- 使用DOS系統功能呼叫實現返回
兩條指令:
MOV AH,4CH
INT 21H