1. 程式人生 > 其它 >20192418彙編程式設計1~4章學習知識點總結

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執行指令:

  1. 從儲存器中取指令
  2. 執行指令規定的操作

序列方式/指令流水線方式

執行單元EU

  • 取出指令程式碼
  • 對運算元執行算術或邏輯運算
  • 向匯流排介面單元BIU傳送訪問主存或I/O的命令

匯流排介面單元BIU

  • 取指令
  • 存取資料

EU和BIU既分工又合作,且並行工作


CPU暫存器的結構和用途

  • 通用暫存器8個
  1. 資料暫存器:AX BX CX DX
  2. 指標暫存器:SP BP
  3. 變址暫存器:SI DI
  • 控制暫存器2個
    IP FLAGS

  • 段暫存器4個
    CS DS ES SS

CPU訪問儲存器時:

  1. 訪問的儲存單元屬於哪個段
  2. 該儲存單元與段起始地址(段基址)的偏移量

進位標誌位CF
奇偶標誌位PF
輔助進位標誌位AF
零標誌位ZF
符號標誌位SF
溢位標誌位OF
單步標誌位TF
中斷允許標誌位IF
方向標誌位DF


儲存器組織結構

儲存器的組成

  1. 若干個儲存單元構成
  2. 編號地址來表示
  3. 存放相同長度的二進位制數

儲存器的段結構

段基址
每16位元組單元分為一小節
1MB記憶體分為64K個小節

邏輯段
鄰接的、間隔的、部分重疊、完全重疊 四種情況

邏輯地址與實體地址及對應關係

邏輯地址:段基值、偏移量

邏輯地址轉換為實體地址:
邏輯地址的段基值左移4位,形成20位段基址然後與16位偏移量相加,結果可得20位實體地址。


堆疊及其操作方法

用途:主要用於暫存資料以及在過程呼叫或者處理中斷時儲存斷點資訊。

  • 專用堆疊儲存器
  • 軟體堆疊

棧底是最大地址單元
先進後出FILO

堆疊操作

  • 設定堆疊
  • 進棧PUSH
  • 出棧POP

定址方式

  • 指令:
  1. 操作碼
  2. 運算元
    立即數運算元
    暫存器運算元
    儲存器運算元
    I/O埠運算元

立即數只能作為源運算元,而不能作為目的運算元

  1. 立即數定址
  2. 暫存器定址
  3. 直接定址
    (1)符號表示
    (2)常數表示
  4. 暫存器間接定址
  5. 基址定址/變址定址
    段暫存器的隱含使用規則與暫存器間接定址方式相同
    相對有位移量指定的初始單元,因此也叫暫存器相對定址。
  6. 基址變址定址
    EA=基址+變址+位移量
    當基址選用BX時隱含使用段暫存器DS,而選用BP時則隱含使用段暫存器SS。
  7. 串操作定址方式
  8. I/O埠定址
    特點:程式設計靈活,但需要佔用儲存地址空間。
    (1)直接埠定址
    (2)暫存器間接埠定址

指令系統

一種計算機能執行的各種型別的指令的集合成為計算機的指令系統

傳送類指令

  1. 通用資料傳送指令
    MOV指令:
    (1)立即數只能作源運算元,且不能傳送給段暫存器。
    (2)段暫存器CS只能作源運算元,段暫存器之間不能直接傳送。
    (3)儲存單元之間不能直接傳送資料。
    (4)MOV指令不影響標誌位。
  2. 交換指令
    作用:源運算元和目的運算元兩者內容相互交換。
  3. 標誌傳送指令
    (1)取標誌暫存器指令
    指令格式:LAHF
    (2)儲存標誌暫存器指令
    指令格式:SAHF
    (3)標誌進棧指令
    指令格式:PUSHF
    (4)標誌出棧指令
    指令格式:POPF
  4. 地址傳送指令
    (1)裝入有效地址
    格式:LEA DEST,SRC
    (2)裝入地址指標指令
    格式:LDS DEST,SRC
    LES DEST,SRC

算術運算類指令

  1. 加法指令
    指令格式:ADD DEST,SRC
  2. 帶進位加法指令
    指令格式:ADC DEST,SRC
    可實現大於16位的兩數相加
    高16位在AX,低16位在BX
  3. 加1指令
    指令格式:INC DEST
  4. 減法指令
    SUB DEST,SRC
  5. 帶借位減法
    指令格式:SBB DEST,SRC
  6. 減1指令
    指令格式:DEC DEST
  7. 求負數指令
    NEG DEST

位操作類指令

  1. 邏輯運算指令
  2. 測試指令
    指令格式:TEST DEST,SRC

移位/迴圈移位指令

(1)算術移位
(2)邏輯移位
(3)迴圈移位

處理器控制類指令

  1. 標誌位操作指令
    (1)清除進位標誌
    (2)置1進位標誌
    (3)進位標誌取反
    (4)清除方向標誌
    (5)置1方向標誌
    (6)清除中斷標誌
    (7)置1中斷標誌
  2. 與外部事件同步的指令
    HLT暫停指令
    WAIT等待指令
    ESC外部協處理器指令字首
  3. 空操作指令 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. 指令助記符
  3. 運算元欄位
  4. 註釋欄位(以分號開始)

偽指令語句

  1. 符號名欄位
  2. 偽指令符欄位
  3. 運算元欄位
  4. 註釋欄位

識別符號


組合語言資料

資料由數值和屬性組成

常數

二進位制
八進位制
十進位制
十六進位制
實數
字串常數

變數

存放資料的儲存單元
(1)段屬性:表示變數存放在哪一個邏輯段中
(2)偏移量屬性(OFFSET):所在位置與段起點之間的位元組數
段屬性和偏移量屬性就構造了變數的邏輯地址
(3)型別屬性:數值表示式,?表示式,字串表示式
(4)DUP表示式:重複資料操作符

變數的使用

  1. 在指令語句中引用
  2. 在偽指令語句中引用

標號

指令地址的別名
標號三屬性:段屬性,偏移量屬性,距離屬性(型別屬性)NEAR/FAR


符號定義語句

等值語句

語句格式:符號名 EQU 表示式

  1. 常數或數值表示式
  2. 地址表示式
  3. 變數、暫存器名或指令助記符

等號語句

格式:符號名=表示式


表示式與運算子

算術運算子

加減乘除餘 都是整數
SHR SHL 邏輯移位

邏輯運算子

關係運算符

EQ等於
NE不等於
LT小於
LE小於等於
GT大於
GE大於等於

數值返回運算子

  1. SEG運算子
    取變數或標號所在段的段基值
  2. OFFSET運算子
    取變數或標號在段內的偏移量
  3. TYPE運算子
    取變數或標號的型別屬性,並用數字形式表示
  4. LENGTH運算子
    用於取變數的長度
    5.SIZE運算子
    作用於變數,等於LENGTH 和TYPE 兩個運算子返回值的乘積

屬性修改運算子

  1. PTR運算子
    型別 PTR 地址表示式
  2. HIGH/LOW運算子
    分離高低位元組
  3. THIS運算子
    與等值運算子EQU連用,定義型別屬性。

程式的段結構

偽指令定義和使用這些邏輯段

段定義偽指令

  1. 段名
    符合識別符號定義規則的一個名稱,段名前後一致
  2. 定位型別
  • PAGE:表示該段從一個頁面的邊界開始
  • PARA:表示該段從一個小節的邊界開始(預設)
  • WORD:該段從一個偶數字節地址開始
  • BYTE:表示該段起始單元地址可以是任一地址值
  1. 組合型別
  • 無連線關係
  • PUBLIC:同名鄰接
  • COMMON:產生一個覆蓋段
  • STACK:把所有同名段連線成一個連續段,系統自動對SS段暫存器初始化為該連續段的段基址。並初始化堆疊指標SP。
  • AT表示式:表示本段可定位在表示式所指示的小節邊界上。
  • MEMORY:表示本段在儲存器中應定位在所有其他段之後的最高地址上。
  1. 類別名

段定址偽指令

ASSUME 段暫存器名:段名,段暫存器名:段名,……
NOTHING 將前面的設定刪除

段暫存器的裝入

  1. DS和ES的裝入
  2. SS的裝入
  3. CS的裝入

過程定義偽指令(PROC/ENDP)

在MASM巨集程式設計程式中,用過程(PROCEDURE)來構造子程式。

當前位置計數器$與定位偽指令ORG

$在使用上完全類似變數的使用
ORG——用於改變位置計數器的值
格式:ORG 數值表示式

標題偽指令
語句格式 TITLE 表示式


從程式返回作業系統的方法

  1. 使用程式段字首PSP實現返回
  • 將使用者程式編製成一個過程,型別為FAR
  • 將PSP的起始邏輯地址壓棧
  1. 使用DOS系統功能呼叫實現返回
    兩條指令:
MOV AH,4CH
INT 21H