?? 匯編速查手冊.txt
字號:
匯編速查手冊 匯編語言總結(jié) 概要
寄存器與存儲器
1. 寄存器功能
. 寄存器的一般用途和專用用途
. CS:IP 控制程序執(zhí)行流程
. SS:SP 提供堆棧棧頂單元地址
. DS:BX(SI,DI) 提供數(shù)據(jù)段內(nèi)單元地址
. SS:BP 提供堆棧內(nèi)單元地址
. ES:BX(SI,DI) 提供附加段內(nèi)單元地址
. AX,CX,BX和CX寄存器多用于運(yùn)算和暫存中間計(jì)算結(jié)果,但又專用于某些指令(查閱 指令表)。
. PSW程序狀態(tài)字寄存器只能通過專用指令(LAHF, SAHF)和堆棧(PUSHF,POPF)進(jìn)行存取。
2. 存儲器分段管理
. 解決了16位寄存器構(gòu)成20位地址的問題
. 便于程序重定位
. 20位物理地址=段地址 * 16 + 偏移地址
. 程序分段組織: 一般由代碼段,堆棧段,數(shù)據(jù)段和附加段組成,不設(shè)置堆棧段時(shí) 則使用系統(tǒng)內(nèi)部的堆棧。
3. 堆棧
. 堆棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu) , 數(shù)據(jù)的存取在棧頂進(jìn)行 , 數(shù)據(jù)入棧使堆棧向地址減小的方向擴(kuò)展。
. 堆棧常用于保存子程序調(diào)用和中斷響應(yīng)時(shí)的斷點(diǎn)以及暫存數(shù)據(jù)或中間計(jì)算結(jié)果 。
. 堆棧總是以字為單位存取
指令系統(tǒng)與尋址方式
1. 指令系統(tǒng)
. 計(jì)算機(jī)提供給用戶使用的機(jī)器指令集稱為指令系統(tǒng),大多數(shù)指令為雙操作數(shù)指令。執(zhí)行指令后,一般源操作數(shù)不變,目的操作數(shù)被計(jì)算結(jié)果替代。
. 機(jī)器指令由CPU執(zhí)行,完成某種運(yùn)算或操作,8086/8088指令系統(tǒng)中的指令分為6類: 數(shù)據(jù)傳送,算術(shù)運(yùn)算,邏輯運(yùn)算,串操作,控制轉(zhuǎn)移和處理機(jī)控制。
2. 尋址方式
. 尋址方式確定執(zhí)行指令時(shí)獲得操作數(shù)地址的方法
. 分為與數(shù)據(jù)有關(guān)的尋址方式(7種)和與轉(zhuǎn)移地址有關(guān)的尋址方式(4)種。
. 與數(shù)據(jù)有關(guān)的尋址方式的一般用途:
(1) 立即數(shù)尋址方式--將常量賦給寄存器或存儲單元
(2) 直接尋址方式--存取單個變量
(3) 寄存器尋址方式--訪問寄存器的速度快于訪問存儲單元的速度
(4) 寄存器間接尋址方式--訪問數(shù)組元素
(5) 變址尋址方式
(6) 基址變址尋址方式
(7) 相對基址變址尋址方式
(5),(6),(7)都便于處理數(shù)組元素
. 與數(shù)據(jù)有關(guān)的尋址方式中,提供地址的寄存器只能是BX,SI,DI或BP
. 與轉(zhuǎn)移地址有關(guān)的尋址方式的一般用途:
(1) 段內(nèi)直接尋址--段內(nèi)直接轉(zhuǎn)移或子程序調(diào)用
(2) 段內(nèi)間接尋址--段內(nèi)間接轉(zhuǎn)移或子程序調(diào)用
(3) 段間直接尋址--段間直接轉(zhuǎn)移或子程序調(diào)用
(4) 段間間接尋址--段間間接轉(zhuǎn)移或子程序調(diào)用
匯編程序和匯編語言
1. 匯編程序
. 匯編程序是將匯編語言源程序翻譯成二進(jìn)制代碼程序的語言處理程序,翻譯的過程稱為匯編。
2. 匯編語言
. 匯編語言是用指令助記符,各種標(biāo)識變量,地址,過程等的標(biāo)識符書寫程序的語言, 匯編語言指令與機(jī)器指令一 一對應(yīng)。
. 偽指令,宏指令不是由CPU執(zhí)行的指令,而是由匯編程序在匯編期間處理的指令。
. 偽指令指示匯編程序如何完成數(shù)據(jù)定義,存儲空間分配,組織段等工作。
. 宏指令可簡化程序并減少程序書寫量。
. 條件匯編偽指令的功能是確定是否匯編某段源程序,而不是實(shí)現(xiàn)程序分支,對未匯編的程序?qū)⒉划a(chǎn)生相應(yīng)的目標(biāo)代碼。
. 結(jié)構(gòu)作為一種數(shù)據(jù)結(jié)構(gòu)可將一組類型不同但有邏輯關(guān)聯(lián)的數(shù)據(jù)組織在一起,便于 整體處理數(shù)據(jù)。
. 記錄可用于提高存儲單元的利用率,將若干不足一個字節(jié)或字且有邏輯關(guān)聯(lián)的信 息壓縮存放在一個字節(jié)或字中。
. 指令中的表達(dá)式在匯編期間計(jì)算,并且只能對常量或地址進(jìn)行計(jì)算。
程序設(shè)計(jì)基礎(chǔ)
1. 分支程序設(shè)計(jì)
. 程序分支由條件轉(zhuǎn)移指令或無條件轉(zhuǎn)移指令實(shí)現(xiàn)
. 存放若干目的轉(zhuǎn)移地址或跳轉(zhuǎn)指令的跳轉(zhuǎn)表常用于實(shí)現(xiàn)多路分支
. 條件轉(zhuǎn)移指令只能實(shí)現(xiàn)偏移量為-128至+127字節(jié)范圍的轉(zhuǎn)移
. 無條件轉(zhuǎn)移指令根據(jù)尋址方式可實(shí)現(xiàn)短轉(zhuǎn)移(偏移量為-128至+127字節(jié)),段內(nèi)轉(zhuǎn) 移,段間轉(zhuǎn)移。
2. 循環(huán)程序設(shè)計(jì)
. 可由循環(huán)控制指令或條件轉(zhuǎn)移指令組織循環(huán)結(jié)構(gòu)
. 內(nèi)層循環(huán)結(jié)構(gòu)必須完全包含在外層循環(huán)結(jié)構(gòu)內(nèi),并不能發(fā)生從循環(huán)結(jié)構(gòu)外向循環(huán) 結(jié)構(gòu)內(nèi)的轉(zhuǎn)移。
3. 子程序設(shè)計(jì)
. 子程序中應(yīng)保護(hù)寄存器內(nèi)容,并正確使用堆棧, 成對執(zhí)行PUSH和POP指令,保證執(zhí)行RET指令時(shí)堆棧棧頂為返回地址。
. 主程序可通過寄存器,參數(shù)表,或堆棧傳遞參數(shù)給子程序
4. EXE文件和COM文件
. 二者都是可執(zhí)行文件
. COM文件源程序的特點(diǎn)是: 第一條可執(zhí)行指令的起始存放地址必須是100H,不能分段,不用定義堆棧,所有過程為NEAR類型,直接用INT 20H 指令返回DOS。
5. DOS功能調(diào)用與BIOS中斷調(diào)用
. 二者都是完成DOS系統(tǒng)提供給用戶的輸入/輸出等常用功能,通過執(zhí)行軟中斷指令 完成一次軟中斷服務(wù)。
. DOS功能調(diào)用的中斷服務(wù)程序是操作系統(tǒng)的一部分,存于RAM中; 而BIOS中斷調(diào)用的中斷服務(wù)程序存放在ROM中。
輸入/輸出與中斷系統(tǒng)
1. 輸入/輸出的方式
. 程序直接I/O方式: 用IN和OUT指令直接在端口級上進(jìn)行I/O操作,數(shù)據(jù)傳送方式 分為無條件傳送方式和查詢傳送方式。
. 中斷傳送方式: 由CPU響應(yīng)中斷請求完成中斷服務(wù)。
. DMA傳送方式: 直接在存儲器與外設(shè)之間傳送數(shù)據(jù)。
2. 有關(guān)中斷的概念
. 中斷、中斷源、中斷請求、中斷服務(wù)、中斷向量、中斷向量表、中斷響應(yīng)過程、中斷指令、開中斷、關(guān)中斷、內(nèi)部中斷、外部中斷、可屏蔽中斷、非屏蔽中斷。
3. 鍵盤I/O、顯示器I/O操作
. 鍵盤的輸入操作用BIOS的16H中斷調(diào)用控制,也可直接訪問60H端口(數(shù)據(jù)端口), 61H端口(狀態(tài)端口)檢測鍵盤的按鍵操作。
. 對于特殊鍵(如Shift , Ctrl , Alt , NumLock , ScrollLock等鍵)的按動情況,可以直接從來40:17H單元取得有關(guān)信息。
. 顯示器的圖形顯示可以用BIOS的10H中斷調(diào)用實(shí)現(xiàn),另一種速度更快的方法是直 接讀寫視頻緩沖區(qū)。
4. 打印機(jī)I/O操作由 INT 17H中斷調(diào)用實(shí)現(xiàn), 串行通訊口操作由 INT 14H中斷調(diào)用實(shí)現(xiàn)。
CLD Clear the direction flag (set to forward direction)
將方向標(biāo)志置0,使si和di增量,串處理從低地址向高地址處理
8088 匯編速查手冊
一、數(shù)據(jù)傳輸指令
它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).
1. 通用數(shù)據(jù)傳送指令.
MOV 傳送字或字節(jié).
MOVSX 先符號擴(kuò)展,再傳送.
MOVZX 先零擴(kuò)展,再傳送.
PUSH 把字壓入堆棧.
POP 把字彈出堆棧.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
PUSHAD 把EAX,ECX,EDX, EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX, ECX,EAX依次彈出堆棧.
BSWAP 交換32位寄存器里字節(jié)的順序
XCHG 交換字或字節(jié).( 至少有一個操作數(shù)為寄存器,段寄存器不可作為操作數(shù))
CMPXCHG 比較并交換操作數(shù).( 第二個操作數(shù)必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結(jié)果在第一個操作數(shù)里 )
XLAT 字節(jié)查表轉(zhuǎn)換.
── BX 指向一張 256 字節(jié)的表的起點(diǎn), AL 為表的索引值 (0-255,即0-FFH); 返回 AL 為查表結(jié)果. ( [BX+AL]->AL )
2. 輸入輸出端口傳送指令.
IN I/O端口輸入. ( 語法: IN 累加器, {端口號│DX} )
OUT I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 )
輸入輸出端口由立即方式指定時(shí), 其范圍是 0-255; 由寄存器 DX 指定時(shí),其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 傳送目標(biāo)指針,把指針內(nèi)容裝入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 傳送目標(biāo)指針,把指針內(nèi)容裝入ES.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -