《匯編語言》學(xué)習(xí)筆記_第1頁
《匯編語言》學(xué)習(xí)筆記_第2頁
《匯編語言》學(xué)習(xí)筆記_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、清華大學(xué)匯編語言(王爽)讀書筆記第一章 基礎(chǔ)知識匯編語言由 3 類指令組成 匯編指令:機(jī)器碼的助記符,有對應(yīng)機(jī)器碼。 偽指令:沒有對應(yīng)機(jī)器碼,由編譯器執(zhí)行,計算機(jī)并不執(zhí)行 其他符號:如 +-*/ ,由編譯器識別,沒有對應(yīng)機(jī)器碼一個 CPU 有 n 根地址線,則可以所這個 CPU 的地址線寬度為 n ,這樣的 CPU 最多可以尋找 2 的 n 次方個內(nèi)存單元。 1K=2A10B 1M=2A20B 1G=2A30B 8086 CPU 地址總線寬度為 20 ,尋址范圍為 00000FFFFF 000009FFFF 主存儲器地址空間 (RAM)A0000BFFFF 顯存地址空間 C0000FFFFF

2、各類 ROM 地址空間第二章 寄存器( CPU 工作原理) 16 位結(jié)構(gòu)描述了一個 CPU 具有下面幾個方面的結(jié)構(gòu)特性 運(yùn)算器一次最多可以處理 16 位的數(shù)據(jù)寄存器的最大寬度為 16 位 寄存器和運(yùn)算器之間的通路為 16 位 8086 有 20 位地址總線,可以傳送 20 位地址,達(dá)到 1M 的尋址能力。采用在內(nèi)部用兩個 16 位地址 合成的方法來形成一個 20 位的物理地址物理地址=段地址 X 16 + 偏移地址在編程是可以根據(jù)需要,將若干地址連續(xù)的內(nèi)存單元看作一個段,用段地址X16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段中的內(nèi)存單元。段地址 X16 必然是 16 的倍數(shù),所以一個段的

3、起始地 址也一定是 16 的倍數(shù);偏移地址位 16 位, 16 位地址的尋址能力為 64KB ,所以一個段的長度最大為 64KB8086 有四個段寄存器 CS 、DS 、SS、ESCS 為代碼段寄存器, IP 為指令指針寄存器。任意時刻,設(shè) CS 中內(nèi)容為 M、IP 中內(nèi)容為 N, 8086CPU 從內(nèi)存 MX 16+N 讀取一條指令執(zhí)行不能用 mov 修改 CS、IP ,因為 8086CPU 沒有提供這樣功能,可用指令 JMP 段地址 :偏移地址。 JMP 2AE3:3 JMP AX 修改 IP第三章 寄存器(內(nèi)存訪問)DS 數(shù)據(jù)段寄存器。不能將數(shù)據(jù)直接送入段寄存器,所以MOV DS, 1

4、不正確字在存儲時要兩個連續(xù)的內(nèi)存單元,低位在低地址,高位在高地址 address 表示一個偏移地址為 address 的內(nèi)存單元 SS:SP 指向棧頂元素 PUSH AX :(1 ) SP = SP - 2;( 2 ) AX 送入 SS:SPPOP AX:(1) SS:SP 送入 AX;(2) SP = SP + 2 PUSH/POP 寄存器 PUSH/POP 段寄存器 PUSH/POP 內(nèi)存單元第四章 第 1 個程序 可執(zhí)行文件包含兩部分:程序和數(shù)據(jù),相關(guān)的描述信息 程序加載后, ds 中存放這程序所在內(nèi)存區(qū)的段地址,這個內(nèi)存區(qū)的偏移地址為 0,策程序所在的內(nèi) 存區(qū)的地址為 ds:0 ;這個

5、內(nèi)存區(qū)的前 256 個字節(jié)中存放的是 PSP, dos 用來和程序進(jìn)行通信。從 256 字節(jié)處向后的空間存放的是程序。第五章 BX 和 loop 指令 BX表示一個內(nèi)存單元,它的段地址在 ds中,偏移地址在bx中。MOV AX,BX MOV AL,BXMOV BX,AXloop 要進(jìn)行兩步操作, CX=CX-1 ;判斷 cx 中值,不為零則轉(zhuǎn)至標(biāo)號處執(zhí)行程序,為零則向下執(zhí) 行。 masm 將指令 mov ax,0 當(dāng)作 mov ax,0 處理解決方法可以為 mov bx,0 使用寄存器 mov ax,bx或 mov ax,ds:0直接給出段地址所在的段寄存器 loop 中不可使用 mov cx

6、,cx第六章 包含多個段的程序dw 定義字型數(shù)據(jù) end 標(biāo)號 定義程序入口點(diǎn)定義多個段,同定義代碼段相同。定義僅僅是為了程序閱讀方便 assume cs:code,ds:data,ss:stack是偽指令,將定義的具有一定用途的段和相關(guān)的寄存器聯(lián)系起來對于段,如果數(shù)據(jù)占 N 個字節(jié),則程序加載后實際占有空間為: (N/16+1)*16 ,N 的 16 整數(shù)第七章 更靈活的定位內(nèi)存地址的方法 and 按位與 and al, 0EFh or 按位或 or al, 20h字母大小寫轉(zhuǎn)換:大寫( xx0x xxxx ) and al, 0EFh小寫( xx1x xxxx ) or al, 20h m

7、ov ax,200+bx = mov ax,bx+200 = mov ax,200bx = mov ax,bx.200段地址為 ds ,偏移地址為 bx+200 si 和 di 示 8086CPU 中和 bx 功能相近的寄存器, si 和 di 不能分成兩個 8 位寄存器來使用 一般來說,在需要暫存數(shù)據(jù)的時候,都應(yīng)該使用棧第八章 數(shù)據(jù)處理的兩個基本問題bx,si,di,bp1 。在 8086CPU 中,只有這 4 個寄存器可以用在 . 中來進(jìn)行內(nèi)存單元的尋址正確: mov ax,bx | mov ax,bp錯誤: mov ax,cx | mov ax,dx | mov ax,ax | mov

8、ax,ds2 。在. 中,這 4 個寄存器可以單個出現(xiàn),或只能以四種組合出現(xiàn): bx 和 si、bx 和 di、bp 和 si、 bp 和 di錯誤: mov ax,bx+bp | mov ax,si+di3 。只要在. 中使用寄存器 bp ,而指令中沒有顯性地給出段地址,段地址就默認(rèn)在 ss 中 mov ax,bp ax=ss*16+bp(取地址值)在沒有寄存器名存在的情況下,用操作符 X ptr 指明內(nèi)存單元的長度, X 在匯編指令中可以位 word 或 byte :mov word ptr ds:0,1 | add word ptr bx,2 | inc byte ptr ds:2div

9、 ,除法指令 div 除數(shù)除數(shù) 8 位 16 位被除數(shù) AX DX-> 高 16 位 AX-> 低 16 位商 AL AX余數(shù) AH DX dd 偽指令,定義雙字 dword dup 偽指令,用來進(jìn)行數(shù)據(jù)的重復(fù)db 3 dup (0) = db 0,0,0db 3 dup (0,1,2) = db 0,1,2,0,1,2,0,1,2db 3 dup ('ab','CD') = db 'abCDabCDabCD'第九章 轉(zhuǎn)移指令的原理可以修改 ip ,或同時修改 cs 和 ip 的指令統(tǒng)稱為轉(zhuǎn)移指令 8086CPU 的轉(zhuǎn)移行為有一下幾類

10、: 只修改 ip 時,稱為段內(nèi)轉(zhuǎn)移,如 jmp ax 同時修改 cs 和 ip 時,稱為段間轉(zhuǎn)移,如 jmp es:dx 由于轉(zhuǎn)移指令對 ip 的修改范圍不同,段內(nèi)轉(zhuǎn)移又分為:短轉(zhuǎn)移和近轉(zhuǎn)移 短轉(zhuǎn)移 ip 的修改范圍為 -128127近轉(zhuǎn)移 ip 的修改范圍為 -32768327678086CPU 的轉(zhuǎn)移指令分為以下幾類: 無條件轉(zhuǎn)移指令(如 jmp ) 條件轉(zhuǎn)移指令循環(huán)指令(如 loop )過程中斷 offset 取得標(biāo)號的偏移地址 jmp short 標(biāo)號 實現(xiàn)段內(nèi)短轉(zhuǎn)移,對 ip 的修改范圍為 -128127 對應(yīng)機(jī)器碼中包含轉(zhuǎn)移的位移 EB 地址 jmp near ptr標(biāo)號 實現(xiàn)段內(nèi)

11、近轉(zhuǎn)移,對 ip 的修改范圍為 -3276832767 對應(yīng)機(jī)器碼包含轉(zhuǎn)移的位移 jmp far ptr標(biāo)號 實現(xiàn)段間轉(zhuǎn)移 對應(yīng)機(jī)器碼中高地址為段地址,低地址為偏移地址 EA 偏移地址段地址 jmp word ptr內(nèi)存單元地址(段內(nèi)轉(zhuǎn)移) jmp dword ptr內(nèi)存單元地址(段間轉(zhuǎn)移)高地址存放目的段地址,低地址存放目的偏移地址 jcxz 標(biāo)號 cx 為 0 時跳轉(zhuǎn) 所有有條件跳轉(zhuǎn)指令都是短轉(zhuǎn)移,對 ip 的修改范圍都為 -128127 loop 標(biāo)號 所有循環(huán)指令都是短轉(zhuǎn)移,對 ip 修改范圍都為 -128127 80 X 25彩色字符顯示模式顯示緩沖區(qū)結(jié)構(gòu):內(nèi)存地址空間中,B8000

12、hBFFFFFh 共32KB的空間,為80X 25彩色顯示緩沖區(qū)。向這個地址寫入 數(shù)據(jù),寫入的內(nèi)容將立即出現(xiàn)在顯示器上。在 80X 25 彩色字符模式下,顯示器可以顯示 25 行,每行 80 個字符,每個字符可以有 256 種屬性。 一個字符在緩沖區(qū)占兩個字節(jié),一屏內(nèi)容共占4000個字節(jié)。顯示緩沖區(qū)分8頁,每頁4KB,顯示器可以顯示任意一頁的內(nèi)容,一般顯示第 0 頁,即 B8000hB8F9Fh。在一行中,一個字符占兩個字節(jié)的存儲空間,低位字節(jié)存儲字符的 ASCII 碼,高位字節(jié)存儲字符的屬 性,一行 80 字符,占 160 字節(jié)屬性字節(jié)的格式:7 6 5 4 3 2 1 0BL_(閃爍)RG

13、B (背景)I RGB (前景)顯示在 M 行 N 列的字符為 B800:160*M + 2*N第十章 call 和 ret 指令 ret 用棧中數(shù)據(jù)修改 ip ,實現(xiàn)近轉(zhuǎn)移(ip) = (ss) * 16 + (sp)(sp) = (sp) + 2相當(dāng)于:POP ip retf 用棧中數(shù)據(jù)修改 cs 和 ip ,實現(xiàn)遠(yuǎn)轉(zhuǎn)移(ip) = (ss) * 16 + (sp)(sp) = (sp) + 2(cs) = (ss) * 16 + (sp)(sp) = (sp) + 2 相當(dāng)于:POP ipPOP cscall 指令, call 指令不能實現(xiàn)短轉(zhuǎn)移,實現(xiàn)轉(zhuǎn)移的方法和假名牌指令原理相同1 。

14、 call 標(biāo)號,段內(nèi)轉(zhuǎn)移機(jī)器指令中沒有轉(zhuǎn)移的目的地址,而是相對于當(dāng)前 ip 的轉(zhuǎn)移位移(補(bǔ)碼),相當(dāng)于 1.push ip 2.jmp near ptr 標(biāo)號2 。 call far ptr 標(biāo)號,段間轉(zhuǎn)移 機(jī)器指令中包含轉(zhuǎn)移目的地址,相當(dāng)于 1.push cs 2.push ip 3.jmp far ptr 標(biāo)號3。call 16位寄存器相當(dāng)于 1.push ip 2.jmp 16 位寄存器,機(jī)器指令不包含目的地址注意: 1.push ip ip 先變成 call 后第一個字節(jié)的偏移地址,然后入棧4 。 call word ptr 內(nèi)存地址相當(dāng)于 1.push ip 2.jmp word

15、ptr 內(nèi)存地址5 。 call dword ptr 內(nèi)存地址相當(dāng)于 1.push cs 2.push ip 3.jmp dword ptr內(nèi)存地址注意: 2.push ip ip 先變成 call 后第一個字節(jié)的偏移地址,然后入棧 mul指令,乘法a xba 8 位 16 位b AL AX結(jié)果 AX 高位 DX, 低位 AX第十一章 標(biāo)志寄存器 11 10 9 8 7 6 4 2 0OF DF IF TF SF ZF AF PF CF ZF 零標(biāo)志位,如果運(yùn)算結(jié)果為零,則 ZF=1 PF 奇偶標(biāo)志位,相關(guān)指令執(zhí)行后, 1 的個數(shù)為偶數(shù) PF=1 SF 符號標(biāo)志位,執(zhí)行后,計算結(jié)果為負(fù) SF=

16、1 CF 進(jìn)位標(biāo)志位,無符號加減發(fā)生最高有效位之外的進(jìn)、接位時 CF=1 OF 溢出標(biāo)志位,有符號運(yùn)算發(fā)生溢出時 CF=1 adc 帶進(jìn)位加法, adc ax,bx = (ax)=(ax)+(bx)+CF sbb 帶借位減法, sbb ax,bx = (ax)=(ax)-(bx)-CF cmp 比較指令,相當(dāng)于減法,但是不保存結(jié)果,只影響標(biāo)志寄存器cmp ax,bx無符號比較時:ax=bx, ZF=1ax<>bx, ZF=0ax< bx, CF=1ax> bx, CF=0 and ZF=0ax<=bx, CF=1 or ZF=1ax>=bx, CF=0 有符

17、號比較時(反向說明) cmp ah,bh :SF=0 and OF=0, ah>=bhSF=0 and OF=1, ah< bhSF=1 and OF=0, ah< bhSF=1 and OF=1, ah> bh無符號比較跳轉(zhuǎn)指令je, ZF=1 jne, ZF=0jb, CF=1jnb, CF=0ja, CF=0 and ZF=0jna, CF=1 or ZF=1 DF 方向標(biāo)志位,在串處理指令中,控制每次操作后 si di 的增減, DF=1 操作后 si di 遞減 使用 cld,std 設(shè)置: cld, DF=0. std, DF=1 movsb 將 ds:si

18、 內(nèi)存單元字節(jié)送入 es:di相當(dāng)于:mov es:di, byte ptr ds:si ;非 8086 指令DF=0: inc si, inc diDF=1: dec si, dec di 類似的還有 movsw ,傳送一個字 一般使用格式為 rep movsb相當(dāng)于 s:movsb, loop s ,所以要在之前設(shè)置 cx pushf 將標(biāo)志寄存器值入棧, popf 將標(biāo)志寄存器值出棧標(biāo)志寄存器在 debug 中的表示0 OV DN NG ZR PE CY1 NV UP PL NZ PO NCOF DF XX SF ZF XX PF CF第十二章 內(nèi)中斷中斷類型碼: 除法錯誤: 0 單步執(zhí)

19、行: 1 int0 指令: 4 int n : n中斷向量表 0000:00000000:03E8,1000 個單元, N 號中斷偏移地址為 4N ,段地址為4N+2 ,高地址為段地址,低地址為偏移地址中斷處理過程:1. 取得中斷類型碼 N2. pushf3. TF=0, IF=04. push CS5. push IP6.ip=4N, cs=4N+2 中斷處理程序的編寫和子程序類似,常規(guī)步驟為:1. 保存用到的寄存器2. 處理中斷3. 恢復(fù)用到的寄存器4. 用 iret 返回( iret = pop ip, pop cs, popf)第十三章 int 指令 10 中斷mov ah, 2 ;

20、置光標(biāo), 2 號子例程為設(shè)置光標(biāo)位置mov bh, 0 ; 第 0 頁mov dh, 5 ; 行號mov dl, 12 ; 列號int 10h mov ah, 9 ;9 號子例程為在光標(biāo)位置顯示字符mov al, 'a' 字符mov bl, 7 ; 顏色屬性mov bh, 0 ; 第 0 頁mov cx, 3 ; 字符重復(fù)個數(shù)int 10h第十四章 端口 端口的讀寫只能用 in (讀入)和 out (寫入)在 in 和 out 指令中,只能使用 ax 或 al 來存放從端口中讀入的數(shù)據(jù)或要發(fā)送到端口中的數(shù)據(jù)。訪問8 位端口時用 al ,訪問 16 位端口時用 dxin al,

21、20h ; 從 20h 端口讀入一個字節(jié)out 20h,al ; 向 20h 端口寫入一個字節(jié)mov dx, 3F8h ; 端口號送入 dx ( 16 位)in al, dx ; 讀入一個字節(jié)out dx, al ; 寫入一個字節(jié)第十五章 外中斷 PC 機(jī)鍵盤處理過程掃描碼端口為 60h ,斷碼 = 通碼 + 80h鍵盤輸入到達(dá) 60h 端口時,相關(guān)芯片發(fā)送 9 號中斷,如果這時 IF=1 ,則響應(yīng)中斷 BIOS 提供 int 9 中斷例程,用來進(jìn)行基本的鍵盤輸入處理1. 讀出 60h 端口中的掃描碼2. 如果時字符鍵的掃描碼,將掃描碼對應(yīng)的 ASCII 碼送入內(nèi)存中 BIOS 鍵盤緩沖區(qū);如果是控制鍵,將 其轉(zhuǎn)為狀態(tài)字節(jié)寫入 0040:17 單元BIOS 鍵盤緩沖區(qū)中,一個鍵盤輸入用一個字單元存放,高位存放掃描碼,低位存放 ASCII 碼 狀態(tài)字節(jié)含義:0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論