彙編筆記

彙編源程序中數據不能以字母開頭,所以一般在前面加個0,eg: mov ax,0ffffh

;---------------------------------------------------------------------------------------------------------

寄存器:(14個)AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES

通用寄存器:

AX,BX,CX,DX 稱作爲數據寄存器:(可拆分)

AX (Accumulator):累加寄存器,也稱之爲累加器;

BX (Base):基地址寄存器;

CX (Count):計數器寄存器;

DX (Data):數據寄存器;

SP 和 BP 又稱作爲指針寄存器:

SP (Stack Pointer):堆棧指針寄存器;

BP (Base Pointer):基指針寄存器;

注:bp:基址寄存器(stack pointer),一般在函數中用來保存進入函數時的sp的棧頂基址

它的用途有點特殊,是和堆棧指針SP聯合使用的,作爲SP校準使用的,

只有在尋找堆棧裏的數據和使用個別的尋址方式時候才能用到

SP,BP一般與段寄存器SS 聯用,以確定堆棧寄存器中某一單元的地址,

SP用以指示棧頂的偏移地址,而BP可 作爲堆棧區中的一個基地址,用以確定在堆棧中的操作數地址。

每次子函數調用時,系統在開始時都會保存這個兩個指針並在函數結束時恢復sp和bp的值。如下

在函數進入時:

push bp           // 保存bp指針

mov bp,sp       // 將sp指針傳給bp,此時bp指向sp的基地址。

// 這個時候,如果該函數有參數,則[bp + 2*4]則是該子函數的第一個參數,

   [bp+3*4]則是該子函數的 第二個參數,以此類推,有多少個參數則[bp+(n-1)*4]。

.....

.....

函數結束時:

mov sp,bp // 將原sp指針傳回給sp

pop bp // 恢復原bp的值。

ret                    // 退出子函數

SI 和 DI 又稱作爲變址寄存器:

SI (Source Index):源變址寄存器;

DI (Destination Index):目的變址寄存器;

控制寄存器:

IP (Instruction Pointer):指令指針寄存器;

FLAG:標誌寄存器;

標誌位 標誌位名稱及外語全稱 =1 =0

CF 進位標誌/Carry Flag CY/Carry/進位         NC/No Carry/無進位

PF 奇偶標誌/Parity Flag PE/Parity Even/偶         PO/Parity Odd/奇

AF 輔助進位標誌/Auxiliary Carry Flag         AC/Auxiliary Carry/進位         NA/No Auxiliary Carry/無進位

ZF 零標誌/Zero Flag ZR/Zero/等於零 NZ/Not Zero/不等於零

SF 符號標誌/Sign Flag NG/Negative/負 PL/Positive/非負

TF 跟蹤標誌/Trace Flag

IF 中斷標誌/Interrupt Flag EI/Enable Interrupt/允許                 DI/Disable Interrupt/禁止

DF 方向標誌/Direction Flag DN/Down/減少 UP/增加

OF 溢出標誌/Overflow Flag OV/Overflow/溢出         NV/Not Overflow/未溢出

15    14    13    12    11    10    09    08    07    06    05    04    03    02    01    00

                                OF    DF    IF    TF    SF    ZF             AF           PF            CF

pushf 將FLAG壓入棧

popf 將棧內數據放到FLAG

段寄存器:

CS (Code Segment):代碼段寄存器;

DS (Data Segment):數據段寄存器;

SS (Stack Segment):堆棧段寄存器;

ES (Extra Segment):附加段寄存器;

尋址:

bx,bp,si,di都可單獨出現

在[...]中,這4個寄存器可以單個出現或只能以四種組合出現:bx和si,bx和di,bp和si,bp和di

bx是數據基址寄存器,缺省時使用ds段寄存器,它可以和ds或es段寄存器顯式的聯合使用

bp是棧基址寄存器,缺省時使用ss段寄存器,也可以和ds、es段寄存器顯式的聯合使用

si、di分別是源、目的變址寄存器,缺省分別使用ds、es段寄存器,均可以顯式的和ds、es段寄存器聯合使用


;-----------------------------------------------------------------------------------------------------------

安全空間 0:0200-0:0300

;-----------------------------------------------------------------------------------------------------------

80X25彩色字符模式顯示緩衝區的結構:

      在內存地址結構中,B8000H~BFFFFH共32KB的空間,爲80x25彩色字符模式的顯示緩衝區。

     向這個地址空間寫入數據,寫入的內容將立即出現在顯示器上。

      在80x25彩色模式下,顯示器可以顯示25行,每行80個字符,每個字符可以由256中屬性。

      80x25模式下,一屏的內容在顯示緩衝區共4000個字符。每個字符佔一個字,高8位爲字符的ASCII碼,低8位爲字符的屬性

           字符屬性含義: 

               7        6    5    4        3        2    1    0

               BL      R   G    B         I        R    G    B

             閃爍         背景          高亮        前景 

           RGB,R:red、G:green、B:blue

            閃爍效果在全屏DOS下才能看到


0040:17單元儲存鍵盤狀態字節,記錄控制鍵和切換鍵的狀態:

0 右shift 置1表示按下右shift鍵

1 左shift 置1表示按下左shift鍵

2 Ctrl 置1表示按下Ctrl鍵

3 Alt 置1表示按下Alt鍵

4 ScrollLock 置1表示按下ScrollLock指示燈亮

5 NumLock 置1表示小鍵盤輸入的是數字

6 CapsLock 置1表示輸入大寫字母

7 Insert 置1表示處於刪除狀態


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章