青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

思勤無邪

上學(xué)時,因我年齡最小,個頭也最小,上課時,就像大猩猩堆里的猴一般。如今,這猴偶爾也把最近的一些情況寫在這里。

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

公告

     吾日常三省吾身,曰思、曰勤、曰無邪。

積分與排名

  • 積分 - 186424
  • 排名 - 140

最新隨筆

最新評論

閱讀排行榜

評論排行榜

??? 學(xué)習(xí)清華大學(xué)計算機系網(wǎng)絡(luò)課程中的匯編語言程序設(shè)計。準備花兩周來學(xué)習(xí),這周主要是理論知識,下周加以實踐,寫一些Demo。

12-17:
??? ★ 第一章 基礎(chǔ)知識
??????? ◇第一節(jié) 進位計數(shù)制
??????? ◇第二節(jié) 不同基數(shù)的數(shù)之間的轉(zhuǎn)換
??????? ◇第三節(jié) 二進制數(shù)和十六進制數(shù)的運算
??????? ◇第四節(jié) 數(shù)和字符的表示
??? ★ 第二章 8086計算機組織
??????? ◇第一節(jié) 80x86微處理器系列概況
??????? ◇第二節(jié) 基于8086的微計算機系統(tǒng)
??????? ◇第三節(jié) 8086寄存器組
??????? ◇第四節(jié) 8086微處理器的存儲器管理?
??????? ◇第五節(jié) 外部設(shè)備?
??? ★ 第三章 8086的尋址方式和指令系統(tǒng)?
??????? ◇第一節(jié) 8086的尋址方式
??????? ◇第二節(jié) 機器語言指令的轉(zhuǎn)換
??????? ◇第三節(jié) 8086的指令系統(tǒng)
12-18:
??? ★ 第四章 匯編語言程序格式?
??????? ◇第一節(jié) 匯編程序功能
??????? ◇第二節(jié) 偽指令
??????? ◇第三節(jié) 匯編語言程序格式
??????? ◇第四節(jié) 匯編語言程序的上機過程?
12-19:
??? ★ 第五章 循環(huán)與分支程序設(shè)計?
??????? ◇第一節(jié) 循環(huán)程序設(shè)計
??????? ◇第二節(jié) 分支程序設(shè)計
12-20:
??? ★ 第六章 子程序結(jié)構(gòu)?
??????? ◇第一節(jié) 子程序的設(shè)計方法
??????? ◇第二節(jié) 嵌套與遞歸子程序
??????? ◇第三節(jié) 子程序舉例
12-21:
??? ★ 第七章 高級匯編語言技術(shù)?
??????? ◇第一節(jié) 宏匯編
??????? ◇第二節(jié) 重復(fù)匯編
??????? ◇第三節(jié) 條件匯編
??????? ◇第四節(jié) 高級語言結(jié)構(gòu)?
12-22:
??? ★ 第八章 輸入/輸出程序設(shè)計?
??????? ◇第一節(jié) I/O設(shè)備的數(shù)據(jù)傳送方式
??????? ◇第二節(jié) 程序直接控制I/O方式
??????? ◇第三節(jié) 中斷傳送方式
12-23:
??? ★ 第九章 BIOS和DOS中斷?
??????? ◇第一節(jié) 鍵盤I/O
??????? ◇第二節(jié) 顯示器I/O
??????? ◇第三節(jié) 打印機I/O
??????? ◇第四節(jié) 串行通信口I/O?
??? ★ 第十章 模塊化程序設(shè)計?
??????? ◇第一節(jié) 匯編程序概述
??????? ◇第二節(jié) 連接程序及對程序設(shè)計的要求
??????? ◇第三節(jié) 匯編語言程序與高級語言程序的連接
??????? ◇第四節(jié) 模塊化程序設(shè)計概述??
下周的計劃:
??? ★ 第十一章 80x86匯編語言簡介?
??????? ◇第一節(jié) 80x86的寄存器結(jié)構(gòu)
??????? ◇第二節(jié) 80x86的指令系統(tǒng)和尋址方式
??????? ◇第三節(jié) 80x86處理器選擇偽操作
??????? ◇第四節(jié) 保護模式下的80x86?
??????? ◇第五節(jié) 虛擬8086(V86)方式
??????? ◇第六節(jié) 保護方式下的中斷處理?
?

posted on 2006-12-17 08:59 思勤無邪 閱讀(1637) 評論(5)  編輯 收藏 引用 所屬分類: 業(yè)余時間學(xué)習(xí)周計劃

Feedback

# 2006-12-17 筆記 2006-12-17 10:27 思勤無邪
第一章 基礎(chǔ)知識

1.1 進位計數(shù)制

1.2 不同基數(shù)的數(shù)之間的轉(zhuǎn)換
1.2.1 二進制數(shù)和十進制數(shù)之間的轉(zhuǎn)換
1.2.1.1 二進制轉(zhuǎn)換為十進制
    各位按權(quán)求和
1.2.1.2 十進制轉(zhuǎn)換為二進制
    除2取余
1.2.2 二進制和十六進制數(shù)之間的轉(zhuǎn)換
    對于一個二進數(shù),將它從低位到高位每4位一組,每組用一個十六進制數(shù)來表示。
    對于一個十六進制數(shù),將它的每一位用4位二進制數(shù)表示。
    例: 0011  0101  1011 1111 
          3   5   B   F 
         即 0011010110111111B = 35BFH

    例: A    1    9   C 
        1010  0001  1001 1100 
        即 A19CH = 1010000110011100B
1.2.3 十六進制和十進制之間的轉(zhuǎn)換
1.2.3.1 十六進制轉(zhuǎn)換為十進制
        各位按權(quán)求各
1.2.3.2 十進制轉(zhuǎn)換為十六進制
        除16取余

1.3 二進制數(shù)和十六進制數(shù)的運算

1.4 數(shù)和字符的表示
1.4.1 計算機中數(shù)的表示
1.4.1.1 補碼表示法
    原碼:最高位為符號位。0的表示不唯一
    反碼:正數(shù)的反碼同原碼,負數(shù)的反碼數(shù)值位與原碼相反。0的表示不唯一。
    補碼:正數(shù)的補碼與原碼相同;負數(shù)的補碼表示:相應(yīng)的正數(shù)按位求反,末位加1。
    符號擴展:是指一個數(shù)從位數(shù)較少擴展到位數(shù)較多,如從8位擴展到16位,或從16位擴展到32位。
    對于用補碼表示的數(shù),正數(shù)的符號擴展在前面補0,負數(shù)的符號擴展在前面補1,假設(shè)機器字長為16位,[+46]補碼 = 002EH,[-46]補碼 = FFD2H。
1.4.1.2 n位補碼的表數(shù)范圍
    n位補碼的表數(shù)范圍N是:
    -2的n-1次方 <= N <= 2的n-1次方-1
    如:用8位二進制補碼表示帶符號的數(shù)的表數(shù)范圍是-128 <= N <= 127
1.4.1.3 補碼的加、減法
    在機器里,補碼減法是通過對減數(shù)求補后把減法轉(zhuǎn)換為加法進行的。符號位參加運算,能自動得到正確結(jié)果。
    例:假設(shè)機器字長為8位,計算25+(-32)
        0001 1001
      + 1110 0000
      ------------
        1111 1001
    結(jié)果為-7的補碼。
    在某些情況下,要處理的數(shù)全是正數(shù)(比如表示地址的數(shù)),就沒有必要保留符號位了,可以把最高有效位也作為數(shù)值處理,這樣的數(shù)稱為無符號數(shù)。
1.4.2 計算機中字符的表示
    ASCII碼用一個字節(jié)(8位二進制碼)來表示一個字符,其中低7位為字符的ASCII值,最高位一般用作校驗位。


第二章 8086計算機組織

2.1 80x86微處理器系列概況

2.2 基于8086的微計算機系統(tǒng)
2.2.1 8086微處理器的基本組成
    1. 執(zhí)行部件(EU)
    2. 總線接口部件(BIU)
2.2.2 微型計算機的軟件系統(tǒng)
    1. 系統(tǒng)軟件
    2. 應(yīng)用軟件

2.3 8086寄存器組
    1. 通用寄存器
    通用寄存器包括了8個16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情況下作為通用的數(shù)據(jù)寄存器,用來暫時存放計算過程中所用到的操作數(shù)、結(jié)果或其他信息。它們還可分為兩個獨立的8位寄存器使用,命名為AL、AH、BL、BH、CL、CH、DL和DH。這4個通用數(shù)據(jù)寄存器除通用功能外,還有如下專門用途:
        AX作為累加器用,所以它是算術(shù)運算的主要寄存器。在乘除指令中指定用來存放操作數(shù)。另外,所有的I/O指令都使用AX或AL與外部設(shè)備傳送信息。
        BX在計算存儲器地址時,可作為基址寄存器使用。
        CX常用來保存計數(shù)值,如在移位指令、循環(huán)指令和串處理指令中用作隱含的計數(shù)器。
        DX在作雙字長運算時,可把DX和AX組合在一起存放一個雙字長數(shù),DX用來存放高16位數(shù)據(jù)。此外,對某些I/O操作,DX可用來存放I/O的端口地址。
    SP、BP、SI、DI四個16位寄存器可以象數(shù)據(jù)寄存器一樣在運算過程中存放操作數(shù),但它們只能以字(16位)為單位使用。此外,它們更經(jīng)常的用途是在存儲器尋址時,提供偏移地址。因此,它們可稱為指針或變址寄存器。
        SP稱為堆棧指針寄存器,用來指出棧頂?shù)钠频刂贰?
        BP稱為基址指針寄存器,在尋址時作為基地址寄存器使用,但它必須與堆棧段寄存器SS聯(lián)用來確定堆棧段中的存儲單元地址。
        SI為源變址寄存器,在串處理指令中,SI作為隱含的源變址寄存器與DS聯(lián)用,以確定數(shù)據(jù)段中的存儲單元地址,并有自動增量和自動減量的變址功能。
        DI為目的變址寄存器,在串處理指令中,DI和附加段寄存器ES聯(lián)用,以達到在附加段中尋址的目的,然后DI自動增量或減量。
2. 專用寄存器
    8086的專用寄存器包括IP、SP和FLAGS三個16位寄存器。
    IP為指令指針寄存器,它用來存放將要執(zhí)行的下一條指令地址的偏移量,它與段寄存器CS聯(lián)合形成代碼段中指令的物理地址。
    SP為堆棧指針寄存器,它與堆棧段寄存器聯(lián)用來確定堆棧段中棧頂?shù)牡刂罚簿褪钦fSP用來存放棧頂?shù)钠频刂贰?
    FLAGS為標志寄存器,這是一個存放條件碼標志、控制標志的16位寄存器。
3. 段寄存器
    8086微處理器共有4個16位的段寄存器,在尋址內(nèi)存單元時,用它們直接或間接地存放段地址。
        代碼段寄存器CS:存放當前執(zhí)行的程序的段地址。
      數(shù)據(jù)段寄存器DS:存放當前執(zhí)行的程序所用操作數(shù)的段地址。
      堆棧段寄存器SS:存放當前執(zhí)行的程序所用堆棧的段地址。
      附加段寄存器ES:存放當前執(zhí)行程序中一個輔助數(shù)據(jù)段的段地址。

2.4 8086微處理器的存儲器管理
    1.存儲單元的地址和內(nèi)容
    在存儲器里以字節(jié)為編址單位,地址在機器中用無符號二進制數(shù)表示。
    對于字、雙字、四字數(shù)據(jù)類型,其低地址中存放低位字節(jié)數(shù)據(jù),高地址中存放高位字節(jié)數(shù)據(jù)。在讀寫數(shù)據(jù)時只需給出最低單元的地址號即可,然后依次存取后續(xù)字節(jié)。所以,同一個地址既可看作字節(jié)單元的地址,又可看作字單元、雙字單元或4字單元的地址,這要根據(jù)使用時的情況來確定。而且多字節(jié)數(shù)據(jù)在存儲器中是"逆序存放"的。
    在8086中,訪問存儲器(要求取數(shù)或存數(shù))都是以字為單位進行的,也就是說,機器是以偶地址訪問存儲器的。這樣,對于奇地址的字單元,要取一個字需要訪問二次存儲器,這就需要花費較多的時間。
2.存儲器分段管理
    在8086中,物理地址是指由地址引線送出的20位地址碼。這20位地址碼送到存儲器經(jīng)過譯碼,最終選定一個存儲單元進行讀/寫。
    偏移地址是相對于某段首地址的段內(nèi)偏移量。
    邏輯地址是在程序中對存儲器地址的一種表示方法,由某段的段地址和段內(nèi)偏移地址組成。寫成:段地址 : 偏移地址。
    存儲器地址分段的具體做法是:把1MB的存儲器空間分成若干段,每段的容量最大64KB,這樣段內(nèi)地址就可以用16位來表示。實際上,可以根據(jù)編程的需要來確定段的大小,它可以是64K字節(jié)范圍內(nèi)的任意多個字節(jié)。
  8086規(guī)定:從0地址開始,每16個字節(jié)為一小段,段的起始地址必須從任一小段(paragraph)的首地址開始,也就是說,段地址表示成20位的二進制地址碼,其最低4位必須是"0"。
  存儲器采用分段管理后,每個段的首地址(稱為段基地址或段地址)保存在8086內(nèi)部的CS、DS、SS和ES四個16位的寄存器中,可以對段寄存器設(shè)置不同的值以指向不同的段。
    16位的段地址和16位的偏移地址組合形成20位的物理地址,這就是8086的工作方式,這在80x86的尋址模式中稱為實模式。
2.5 外部設(shè)備
    外部設(shè)備與主機(微處理器和存儲器)的通信是通過外設(shè)接口進行的。每個接口包括一組寄存器。一般說來,這些寄存器有三種不同的用途:
      1. 數(shù)據(jù)寄存器:用來存放要在外設(shè)和主機間傳送的數(shù)據(jù),這種寄存器實際上起緩沖器的作用。
      2. 狀態(tài)寄存器:用來保存外部設(shè)備或接口的狀態(tài)信息,以便微處理器在必要時測試外設(shè)狀態(tài),了解外設(shè)的工作情況。 
      3. 命令寄存器:CPU給外設(shè)或接口的控制命令通過此寄存器送給外部設(shè)備。例如,CPU要啟動磁盤工作,必須發(fā)出啟動命令等。
  各種外部設(shè)備都有以上三種類型的寄存器,只是每個接口所配備的寄存器數(shù)量是根據(jù)設(shè)備的需要確定的。
  為了便于主機訪問外設(shè),外設(shè)中的每個寄存器給予一個端口地址(又稱端口號),由這些端口地址組成了一個獨立于內(nèi)存儲器的I/O地址空間。80x86的I/O地址空間可達64KB,所以端口地址的范圍是0000~FFFFH,用16位二進制代碼來表示。端口可以是8位或16位。
  在80x86系列機中,由于I/O地址空間是獨立編址的,所以系統(tǒng)提供了訪問外設(shè)的輸入/輸出指令I(lǐng)N和OUT。
  為了便于用戶使用外設(shè),8086提供了兩種類型的例行程序供用戶調(diào)用。一種是BIOS(Basic Input/Output System),另一種是DOS(Disk Operating System)功能調(diào)用。它們都是系統(tǒng)編制的子程序,通過中斷方式轉(zhuǎn)入所需要的子程序去執(zhí)行。


第三章 8086的尋址方式和指令系統(tǒng)
3.1 8086的尋址方式
    計算機中的指令由操作碼字段和操作數(shù)字段兩部分組成。
    操作數(shù)字段可以有一個、二個或三個,通常稱為一地址、二地址或三地址指令。
3.1.1 與數(shù)據(jù)有關(guān)的尋址方式
3.1.1.1 立即尋址方式(Immediate addressing)
    操作數(shù)直接存放在指令中,緊跟在操作碼之后,它作為指令的一部分存放在代碼段里,這種操作數(shù)稱為立即數(shù)。
    如:MOV AX, 3064H
     指令執(zhí)行后,(AX)= 3064H
    不能直接給段寄存器和標志寄存器賦予立即數(shù)。如:MOV DS, 1250H是錯誤的。
3.1.1.2 寄存器尋址方式(Register addressing)
    它使用寄存器來存放要處理的操作數(shù),寄存器號由指令指定。
    如:MOV  AX, BX
    源寄存器和目的寄存器的位數(shù)必須一致。如:MOV CL, BX是錯誤指令。
有效地址EA(Effective Address)的概念:在8086里,把操作數(shù)的偏移地址稱為有效地址。
3.1.1.3 直接尋址方式(Direct addressing)
    操作數(shù)存放在存儲單元中,而這個存儲單元的有效地址就在指令的操作碼之后,操作數(shù)的物理地址可通過((DS)×16)再加上這個有效地址形成。
    在匯編語言指令中,可以用符號地址(變量名或標號)代替數(shù)值地址。
  例如: MOV AX, DATA
    或 MOV AX, [DATA]
    這里DATA是存放操作數(shù)單元的符號地址。
    直接尋址方式默認操作數(shù)在數(shù)據(jù)段中,如果操作數(shù)定義在其它段中,則應(yīng)在指令中指定段跨越前綴。
  例如: MOV AX, ES:NUMBER
    或 MOV AX, ES:[NUMBER]
    這里NUMBER是附加段中的字變量。
3.1.1.4 寄存器間接尋址方式(Register indirect addressing)
    這種尋址方式通過基址寄存器BX、BP或變址寄存器SI、DI來保存操作數(shù)的有效地址。如果指令中使用的寄存器是SI、DI和BX,則操作數(shù)在數(shù)據(jù)段中,((DS)×16)再加上存器中的有效地址形成20位物理地址;如果指令中使用的寄存器是BP,則操作數(shù)在堆棧段中,((SS)×16)再加上BP中的有效地址形成20位物理地址。
    指令中也可以指定段跨越前綴來取得其他段中的數(shù)據(jù)。
  例如:MOV AX, ES:[BX]
3.1.1.5 寄存器相對尋址方式(Register relative addressing)
    這種尋址方式通過基址寄存器BX、BP或變址寄存器SI、DI與一個位移量相加形成有效地址,計算物理地址的缺省段仍然是SI、DI和BX為DS,BP為SS。
    如:MOV AX, COUNT[SI](也可表示為MOV AX, [COUNT+SI]),其中COUNT為16位位移量的符號地址。
3.1.1.6 基址變址尋址方式 (Based indexed addressing)
    操作數(shù)的有效地址是一個基址寄存器(BP或BX)和一個變址寄存器(SI或DI)的內(nèi)容之和。如基址寄存器為BX時,與DS形成的物理地址指向數(shù)據(jù)段;如基址寄存器為BP時,與SS形成的物理地址指向堆棧段。
3.1.1.7 相對基址變址尋址方式(Relative based indexed addressing)
    基址加變址再加上一個位移量形成操作數(shù)的有效地址。缺省段的使用仍然是DS與BX組合,SS與BP組合。這種尋址方式通常用于對二維數(shù)組的尋址。如,存儲器中存放著由多個記錄組成的文件,則位移量可指向文件之首,基址寄存器指向某個記錄,變址寄存器則指向該記錄中的一個元素。
    如: MOV AX, MASK[BX][SI](或 MOV AX, MASK[BX+SI],或 MOV AX, [MASK+BX+SI])
有效地址可以由以下三種成分組成:
  · 位移量(Displacement)是存放在指令中的一個8位或16位數(shù),但它不是立即數(shù),而是一個地址。
  · 基址(Base)是存放在基址寄存器(BX或BP)中的內(nèi)容。它是有效地址中的基址部分,通常用來指向數(shù)據(jù)段中數(shù)組或字符串的首地址。 
  · 變址(Index)是存放在變址寄存器(SI或DI)中的內(nèi)容。它通常用來訪問數(shù)組中的某個元素或字符串中的某個字符。
    有效地址的計算可用下式表示:
  EA = 基址 + 變址 + 位移量
    這三種成分都可正可負,以保證指針移動的靈活性。它們?nèi)我饨M合使用,可得到不同的尋址方式。
3.1.2 與轉(zhuǎn)移地址有關(guān)的尋址方式
順序執(zhí)行的指令地址是由指令指針寄存器IP自動增量形成的,而程序轉(zhuǎn)移的地址必須由轉(zhuǎn)移類指令和CALL指令指出,這類指令表示轉(zhuǎn)向地址的尋址方式包括:段內(nèi)直接尋址、段內(nèi)間接尋址、段間直接尋址、段間間接尋址。
    因為CS:IP寄存器總是指向下一條將要執(zhí)行的指令的首地址(稱為IP當前值),當轉(zhuǎn)移指令執(zhí)行后,必須修改IP或CS、IP的值。當轉(zhuǎn)移指令給出位移量時,用IP當前值加上位移量即為新的IP的值。
  SHORT轉(zhuǎn)移,稱為短轉(zhuǎn)移,位移量用一個字節(jié)(8位)來表示。位移量在-128~127字節(jié)之間。
  NEAR轉(zhuǎn)移,稱為近轉(zhuǎn)移,位移量用16位表示,因為程序控制仍然在當前代碼段,所以只修改IP的值,CS的值不變。位移量在-32768~32767字節(jié)范圍內(nèi)。
  FAR轉(zhuǎn)移,稱為遠轉(zhuǎn)移,因為程序控制超出了當前代碼段,所以CS和IP都必須修改為新的值。轉(zhuǎn)移距離超過±32K字節(jié),或是在不同段之間轉(zhuǎn)移。
  與轉(zhuǎn)移地址有關(guān)的4種尋址方式就是告訴CPU如何修改CS和IP的值,以達到控制程序轉(zhuǎn)移的目的。
3.1.2.1 段內(nèi)直接尋址(Intrasegment direct addressing)
    這種尋址方式在指令中直接指出轉(zhuǎn)向地址,如:
    JMP SHORT NEXT 
    JMP NEAR PTR AGAIN 
    其中,NEXT和AGAIN均為轉(zhuǎn)向的符號地址。在機器指令中,操作碼之后給出的是相對于當前IP值的位移量(轉(zhuǎn)移距離),所以,轉(zhuǎn)向的有效地址是當前IP值與指令中給出的位移量(8位或16位)之和。
3.1.2.2 段內(nèi)間接尋址(Intrasegment indirect addressing)
    JMP BX 
    JMP NEAR PTR [BX] 
    JMP TABLE[SI]
3.1.2.3 段間直接尋址(Intersegment direct addressing)
    段間直接尋址和段內(nèi)直接尋址類似,指令中直接給出轉(zhuǎn)向地址,不同的是,在符號地址之前要加上表示段間遠轉(zhuǎn)移的操作符FAR PTR。
    指令格式如下:
    JMP FAR PTR OUTSEG
3.1.2.4 段間間接尋址(Intersegment indirect addressing)
    用相繼兩個字的內(nèi)容裝入IP和CS來達到段間的轉(zhuǎn)移目的的,但這兩個字的存儲器地址是通過指令中的數(shù)據(jù)尋址方式(除立即尋址方式和寄存器尋址方式外)來取得的。
  為了說明尋址兩個字單元,指令中必須加上雙字操作符DWORD。指令格式如下:
    JMP DWORD PTR [SI] 
    JMP DWORD PTR[TABLE+BX]
8086機器語言指令是一種可變長度的指令,一條指令可以由1~7個字節(jié)組成,這主要取決于指令的操作碼、尋址方式以及操作數(shù)長度等因素。
機器語言指令的組成
段前綴  操作碼  尋址方式  數(shù)據(jù)/偏移量  數(shù)據(jù)/偏移量  數(shù)據(jù)  數(shù)據(jù)

3.2 機器語言指令的轉(zhuǎn)換
3.2.1 段前綴字節(jié)
    當指令中沒有段前綴(如ES: )時,機器指令中無此字節(jié)。段前綴字節(jié)高3位和低3位是段前綴標志,3、4位(SEG)分別表示4個段前綴。
3.2.2 操作碼字節(jié)
    操作碼決定微處理器執(zhí)行的操作,如,傳送、加法、減法等,它通常用機器指令的第一個字節(jié)表示。多數(shù)機器語言指令的操作碼占用一個字節(jié),有時一個字節(jié)不夠,在下一個字節(jié)再占用3位。
    操作碼字節(jié)的高6位是操作碼,它來自于機器指令表。
3.2.3 尋址方式字節(jié)
3.2.4 機器指令舉例

3.2 8086指令系統(tǒng)
3.3.1 數(shù)據(jù)傳送指令
數(shù)據(jù)傳送指令的功能是把數(shù)據(jù)、地址傳送到寄存器或存儲器單元中。它分為4類。
    ⑴ 通用數(shù)據(jù)傳送指令
     MOV  傳送
     PUSH 進棧
     POP  出棧
     XCHG 交換
    ⑵ 累加器專用傳送指令
        IN   輸入
        OUT  輸出
        XLAT 換碼
  ⑶ 地址傳送指令
     LEA  有效地址送寄存器
     LDS  指針送寄存器和DS
     LES  指針送寄存器和ES
    ⑷ 標志寄存器傳送指令
        LAHF 標志送AH
        SAHF AH送標志寄存器
        PUSHF 標志進棧
        POPF 標志出棧
3.3.1.1 通用數(shù)據(jù)傳送指令
    MOV dst, src;傳送指令(move)
  執(zhí)行操作:(dst) ← (src)
  功能: 將源操作數(shù)(字節(jié)或字)傳送到目的地址。

    PUSH   src ; 進棧指令(push onto the stack) 
  執(zhí)行操作: (SP) ← (SP)-2
        ((SP)) ← (src)

  POP    dst ; 出棧指令(pop from the stack)
  執(zhí)行操作: (dst) ← ((SP))
        (SP) ← (SP)+2

    XCHG  opr1, opr2 ; 交換指令(exchange)
  執(zhí)行操作:(opr1) ←→ (opr2)

3.3.1.2 累加器專用傳送指令
    這組指令只限于使用累加器(ac:AX 或AL)傳送信息。
  IN  ac, port ; 輸入指令(input), port≤0FFH
  執(zhí)行操作: (AL) ← (port) 傳送字節(jié)
   或 (AX) ← (port+1,port) 傳送字

  IN  ac, DX  ; 輸入指令, DX中的port>0FFH
  執(zhí)行操作: (AL) ← ((DX)) 傳送字節(jié)
   或 (AX) ← ((DX)+1,(DX)) 傳送字

  OUT  port, ac  ; 輸出指令(output), port≤0FFH
  執(zhí)行操作: (port) ← (AL) 傳送字節(jié)
   或 (port+1,port) ← (AX) 傳送字

  OUT  DX, ac   ; 輸出指令(output), DX中的 port>0FFH
  執(zhí)行操作: ((DX)) ← (AL) 傳送字節(jié)
   或 ((DX)+1,(DX)) ← (AX) 傳送字
    例:   IN   AL, 61H   ; (AL) ← 端口61H的內(nèi)容
      MOV   DX, 278H   ; (DX) ← 端口地址278H
      IN   AL, DX    ; (AL) ← 端口278H的內(nèi)容

          OUT   61H, AL   ; 61H端口 ← (AL)
      MOV   DX, 279H   ; (DX) ← 端口地址279H
      OUT   DX, AX    ; 279H端口 ← (AX)

    XLAT   ; 換碼指令(translate)
  執(zhí)行操作: (AL) ← ((DS)×16+(BX)+(AL))
    這條指令根據(jù)AL寄存器提供的位移量,將BX指示的字節(jié)表格中的代碼換存在AL中。
3.3.1.3 地址傳送指令
    這組指令完成把地址送到指定寄存器的功能。
  LEA reg, src ; 有效地址送寄存器(load effective address)
  執(zhí)行操作:(reg) ← offset of src
  LEA指令把源操作數(shù)的有效地址送到指定的寄存器,這個有效地址是由src選定的一種存儲器尋址方式確定的。

  LDS reg, src ; 指針送寄存器和DS(load DS with point)
  執(zhí)行操作: (reg) ← (src)
       (DS) ← (src+2)

  LES reg, src ; 指針送寄存器和ES(load ES with point)
  執(zhí)行操作: (reg) ← (src)
       (ES) ← (src+2)
3.3.1.4 標志寄存器傳送指令
    LAHF 標志寄存器的低字節(jié)送AH(load AH with flags)
   執(zhí)行操作: 
    (AH) ← (FLAGS)0-7

    SAHF AH送標志寄存器低字節(jié)(store AH into flags)
    執(zhí)行操作: 
    (FLAGS) 0-7 ← (AH)

    PUSHF 標志進棧(push the flags)
   執(zhí)行操作: 
   (SP) ← (SP)-2
   ((SP)+1,(SP)) ← (FLAGS)0-15
  
    POPF 標志出棧(pop the flags)
   執(zhí)行操作: 
   (FLAGS) 0-15 ← ((SP)+1,(SP))
   (SP) ← (SP)+2

3.3.2 算術(shù)指令
    ⑴ 加法指令
    ADD  加法
    ADC  帶進位加
    INC  加1
    ⑵ 減法指令
        SUB  減法     
        DEC  減1
        NEG  求補
        CMP  比較
  ⑶ 乘法指令
    MUL  無符號數(shù)乘法
    IMUL 帶符號數(shù)乘法
    ⑷ 除法指令
        DIV  無符號數(shù)除法
        IDIV 帶符號數(shù)除法
  ⑸ 符號擴展指令
    CBW  字節(jié)轉(zhuǎn)換為字
    CWD  字轉(zhuǎn)換為雙字
    ⑹ 十進制調(diào)整指令
    DAA  加法的十進制調(diào)整
    DAS  減法的十進制調(diào)整
    AAA  加法的ASCII調(diào)整
    AAS  減法的ASCII調(diào)整
    AAM  乘法的ASCII調(diào)整
    AAD  除法的ASCII調(diào)整
3.3.2.1 加法指令
  ADD dst,src 加法指令(addition)
  執(zhí)行操作: (dst) ← (src)+(dst)

  ADC dst,src 帶進位加指令(add with carry)
  執(zhí)行操作: (dst) ← (src)+(dst)+CF

  INC opr 加1指令(increment) 
  執(zhí)行操作: (opr) ← (opr)+1
3.3.2.2 減法指令
  SUB dst,src 減法指令(subtract)
  執(zhí)行操作: (dst) ← (dst)-(src)

  SBB dst,src 帶借位減法指令(subtract with borrow)
  執(zhí)行操作: (dst) ← (dst)-(src)-CF

  DEC opr 減1指令(decrement)
  執(zhí)行操作: (opr) ← (opr)-1

  CMP opr1,opr2 比較指令(compare)
  執(zhí)行操作: (opr1)-(opr2),根據(jù)相減結(jié)果設(shè)置條件碼,但不回送結(jié)果
3.3.2.3 乘法指令
  MUL  src  無符號數(shù)乘法(unsigned multiple)
  IMUL src  帶符號數(shù)乘法(signed multiple)
  字節(jié)操作: (AX) ← (AL)×(src)
  字操作:  (DX, AX) ← (AX)×(src)
MUL和IMUL指令的區(qū)別僅在于操作數(shù)是無符號數(shù)還是帶符號數(shù),它們的共同點是,指令中只給出源操作數(shù)src。目的操作數(shù)是隱含的,它只能是累加器(字運算為AX,字節(jié)運算為AL)。隱含的乘積寄存器是AX或DX(高位)和AX(低位)。
3.3.2.4 除法指令
   DIV  src 無符號數(shù)除法(unsigned divide)
   IDIV src 帶符號數(shù)除法(signed divide)
   字節(jié)操作: (AL) ← (AX) / src 的商
        (AH) ← (AX) / src 的余數(shù)
   字操作: (AX) ← (DX, AX) / src 的商
       (DX) ← (DX, AX) / src 的余數(shù)
這兩條除法指令的被除數(shù)必須存放在AX或DX,AX中。除法指令對所有條件碼均無定義,因此對除法指令產(chǎn)生的錯誤,如除數(shù)為0或商溢出等錯誤,程序員都不能用條件碼進行判斷,而是由系統(tǒng)直接轉(zhuǎn)入0型中斷來處理。
3.3.2.5 符號擴展指令
   CBW 字節(jié)擴展為字(convert byte to word)
   執(zhí)行操作:
   (AH)= 00H 當(AL)的最高有效位為0時
   (AH)= FFH 當(AL)的最高有效位為1時

    CWD 字擴展為雙字(convert word to double word)
   執(zhí)行操作:
   (DX)=0000H當(AX)的最高有效位為0時
   (AH)=FFFFH當(AX)的最高有效位為1時
這是兩條無操作數(shù)指令,進行符號擴展的操作數(shù)必須存放在AL寄存器或AX寄存器中。這兩條符號擴展指令都不影響條件碼。

 
3.3.2.6 十進制調(diào)整指令

  80x86微型機提供了一組十進制調(diào)整指令,用來處理ASCII碼和BCD碼表示的數(shù)。
 
  BCD碼:
  BCD(Binary Coded Decimal)是用二進制編碼表示的十進制數(shù)(見表3.3),十進制數(shù)采用0~9十個數(shù)字,是人們最常用的。在計算機中,同一個數(shù)可以用兩種BCD格式來表示:①壓縮的BCD碼 ②非壓縮的BCD碼

  壓縮的BCD碼:
  壓縮的BCD碼用4位二進制數(shù)表示一個十進制數(shù)位,整個十進制數(shù)用一串BCD碼來表示。例如,十進制數(shù)59表示成壓縮的BCD碼為0101 1001,十進制數(shù)1946表示成壓縮的BCD碼為0001 1001 0100 0110。

  非壓縮的BCD碼:
  非壓縮的BCD碼用8位二進制數(shù)表示一個十進制數(shù)位,其中低4位是BCD碼,高4位是0。例如,十進制數(shù)78表示成壓縮的BCD碼為0000 0111 0000 1000。 

   從鍵盤輸入數(shù)據(jù)時,計算機接收的是ASCII碼,要將ASCII碼表示的數(shù)轉(zhuǎn)換成BCD碼是很簡單的,只要把ASCII碼的高4位清零即可。

  壓縮的BCD碼調(diào)整指令
  DAA和DAS指令完成加法和減法的調(diào)整功能。

  DAA 加法的十進制調(diào)整(decimal adjust for addition)
  執(zhí)行操作:(AL)← 把AL中的和調(diào)整為壓縮的BCD格式

  DAS 減法的十進制調(diào)整(decimal adjust for subtraction)
  執(zhí)行操作:(AL)← 把AL中的差調(diào)整為壓縮的BCD格式

  DAA和DAS指令的調(diào)整方法如下:
  執(zhí)行加法指令(ADD、ADC)或減法指令(SUB、SBB)后,
  1.如果結(jié)果的低4位 (AL)0~3>9或AF=1,則(AL)←(AL)±06H,且AF置1;
  2.如果結(jié)果的高4位 (AL)4~7>9或CF=1,則(AL)←(AL)±60H,且CF置1。

  對上述方法,加法調(diào)整作+06H和+60H,減法調(diào)整作-06H和-60H。這兩個調(diào)整的條件,如果滿足其一,則±06H或±60H;如果同時滿足,則±06H后,再±60H。

  非壓縮的BCD碼調(diào)整指令
  AAA 加法的ASCII調(diào)整(ASCII adjust for add)
  執(zhí)行操作:
  (AL)← 把AL中的和調(diào)整為非壓縮的BCD格式
  (AH)←(AH)+ 調(diào)整產(chǎn)生的進位值

  AAS 減法的ASCII調(diào)整(ASCII adjust for sub)
  執(zhí)行操作:
  (AL)← 把AL中的差調(diào)整為非壓縮的BCD格式
  (AH)←(AH)- 調(diào)整產(chǎn)生的借位值

  加法和減法的操作數(shù)可以直接使用ASCII碼,而不必把高位0011清為0000,AAA和AAS指令就是專門為ASCII碼操作數(shù)或非壓縮BCD碼操作數(shù)的加減法而設(shè)計的。

  AAA和AAS的調(diào)整方法如下:
  執(zhí)行加法指令(ADD、ADC)或減法指令(SUB、SBB)后,結(jié)果存放在AL寄存器中:
  (1)如果(AL)0~3= 0~9,且AF=0,則(AL)4~7= 0,AF的值送CF;
  (2)如果(AL)0~3=A~F,或AF=1,則(AL)←(AL)±06H,(AL)4~7= 0,(AH)←(AH)±1,AF的值送CF。
  AAA和AAS指令除影響AF和CF標志外,其余標志位均無定義。

  AAM 乘法的ASCII調(diào)整(ASCII adjust for mul)
  執(zhí)行操作:(AX)← 把AX中的積調(diào)整為非壓縮的BCD格式

  AAD 除法的ASCII調(diào)整(ASCII adjust for div)
  執(zhí)行操作:(AX)← AX中的被除數(shù)(非壓縮的BCD格式)轉(zhuǎn)化為二進制數(shù)

  以上兩條指令是專為非壓縮的BCD碼的乘除法而設(shè)計的,它們將乘法和除法的結(jié)果轉(zhuǎn)換為非壓縮的BCD碼。
  
  注意:AAM和AAD都只對AX寄存器中的數(shù)進行調(diào)整,它們只影響SF、ZF和PF標志位,其它標志位無定義。

  AAM的調(diào)整方法為:
  執(zhí)行乘法指令(MUL)后,調(diào)整存放在AL寄存器中的乘積:
   (AH)←(AL)/ 0AH的商
   (AL)←(AL)/ 0AH的余數(shù)

  AAM實際上是將兩個一位數(shù)的非壓縮BCD碼相乘后得到的乘積進行二化十的轉(zhuǎn)換,十位數(shù)放在AH中,個位數(shù)放在AL中,那么AX中就是乘積的非壓縮BCD碼。

  注意:如果是兩個ASCII碼數(shù)相乘,要先將它們轉(zhuǎn)換成非壓縮BCD碼。

  AAD的調(diào)整方法為:
  執(zhí)行除法指令之前,對AX中的非壓縮BCD碼(被除數(shù))執(zhí)行:
   (AL)←(AH)×10+(AL)
   (AH)← 0

  與其它調(diào)整指令不同的是,AAD用在DIV指令之前,即先將AX中的被除數(shù)調(diào)整成二進制數(shù),并存放在AL中,再用DIV指令作二進制數(shù)的除法。AX中的被除數(shù)是二位非壓縮BCD碼,AH中的十位數(shù)乘10,再加上AL中的個位數(shù),即轉(zhuǎn)換為二進制數(shù)。
3.3.3 邏輯指令
    ⑴ 邏輯運算指令
     AND     邏輯與
     OR      邏輯或
     OT      邏輯非
     XOR     異或
     TEST     測試
    ⑵ 移位指令
     SAL     算術(shù)左移
     SHR     邏輯右移
     SAR     算術(shù)右移
     ROL    循環(huán)左移
     ROR    循環(huán)右移
     RCL    帶進位循環(huán)左移
     RCR    帶進位循環(huán)右移
3.3.3.1 邏輯運算指令
   AND dst,src ;邏輯與(logic and)
   執(zhí)行操作: (dst)←(dst)&(src)

   OR dst,src ;邏輯或(logic or)
   執(zhí)行操作: (dst)←(dst)|(src)

   NOT opr ;邏輯非(logic not)
   執(zhí)行操作: (opr)← !(opr)

   XOR dst,src ;異或 (exclusive or)
   執(zhí)行操作: (dst)←(dst)異或(src)

   TEST opr1,opr2 ;測試(test)
   執(zhí)行操作: (opr1)&(opr2),根據(jù)與運算結(jié)果設(shè)置條件碼,結(jié)果不回送
3.3.3.2 移位指令
3.3.4 串處理指令
    ⑴ 串處理指令
        MOVSB / MOVSW   串傳送 
        STOSB / STOSW   存串 
        LODSB / LODSW   取串 
        CMPSB / CMPSW   串比較
        SCASB / SCASW   串掃描
    ⑵ 串重復(fù)前綴
        REP        重復(fù)串操作
        REPE / REPZ    相等/為零時重復(fù)
        REPNE / REPNZ   不等/不為零時重復(fù)
    ⑶ 設(shè)置方向標志
        CLD        使DF=0
        STD        使DF=1
3.3.4.1 設(shè)置方向標志指令
  CLD DF置0(clear direction flag)
  STD DF置1(set direction flag)
為了處理連續(xù)存儲單元中的字符串或數(shù)串,地址指針需要連續(xù)地增量或減量,指針增量或減量決定了串處理的方向。當用CLD指令使DF=0時,源串的指針SI和目的串的指針DI自動增量(+1或+2),當用STD指令使DF=1時,指針SI和DI自動減量(―1或―2)。地址指針是±1還是±2,取決于串操作數(shù)是字節(jié)還是字。
3.3.4.2 串處理指令
  MOVSB / MOVSW 串傳送(move string byte/word)
  執(zhí)行操作:
  (ES:DI)←(DS:SI)
  (SI)←(SI)±1(字節(jié))或±2(字)
  (DI)←(DI)±1(字節(jié))或±2(字)

  STOSB / STOSW 存串(load from string byte/word)
  執(zhí)行操作: 
  (ES:DI)←(AL)或(AX)
  (DI)←(DI)±1(字節(jié))或±2(字)

  LODSB / LODSW 取串(store into string byte/word)
  執(zhí)行操作: 
  (AL)或(AX)←(DS:SI)
  (SI)←(SI)±1(字節(jié))或±2(字)

  CMPSB / CMPSW 串比較(compare string byte/word)
  執(zhí)行操作: 
  (DS:SI)-(ES:DI),根據(jù)比較的結(jié)果設(shè)置條件碼
  (SI)←(SI)±1(字節(jié))或±2(字)
  (DI)←(DI)±1(字節(jié))或±2(字)

  SCASB / SCASW 串掃描(scan string byte/word) 
  執(zhí)行操作: 
  (AL)-(ES:DI)或(AX)-(ES:DI),根據(jù)掃描比較的結(jié)果設(shè)置條件碼
  (DI)←(DI)±1(字節(jié))或±2(字)
3.3.4.3 串重復(fù)前綴
  REP 重復(fù)執(zhí)行串指令,(CX)=重復(fù)次數(shù)
  執(zhí)行操作:
  ① (CX)=0時,串指令執(zhí)行完畢,否則執(zhí)行② ~ ④
  ② (CX)←(CX)-1
  ③ 執(zhí)行串指令(MOVS或STOS)
  ④ 重復(fù)執(zhí)行①

  REPE / REPZ 相等/為零時重復(fù)執(zhí)行串指令,(CX)=比較/掃描的次數(shù)
  執(zhí)行操作:
  ① (CX)=0或ZF=0時,結(jié)束執(zhí)行串指令,否則繼續(xù)② ~ ④
  ② (CX)←(CX)-1
  ③ 執(zhí)行串指令(CMPS或SCAS)
  ④ 重復(fù)執(zhí)行①

  REPNE / REPNZ 不等/不為零時重復(fù)執(zhí)行串指令,(CX)=比較/掃描的次數(shù)
  執(zhí)行操作:
  ① (CX)=0或ZF=1,結(jié)束執(zhí)行串指令,否則繼續(xù)② ~ ④
  ② (CX)←(CX)-1
  ③ 執(zhí)行串指令(CMPS或SCAS)
  ④ 重復(fù)執(zhí)行①
3.3.5 控制轉(zhuǎn)移指令
    ⑴ 無條件轉(zhuǎn)移 
        JMP 跳轉(zhuǎn)
    ⑵ 條件轉(zhuǎn)移 
        JZ/JNZ    結(jié)果為零/不為零則轉(zhuǎn)移 
        JS/JNS    結(jié)果為負/為正則轉(zhuǎn)移 
        JO/JNO    溢出/不溢出則轉(zhuǎn)移 
        JP/JNP    奇偶位為1/為0則轉(zhuǎn)移 
        JB/JNB    低于/不低于則轉(zhuǎn)移 
        JBE/JNBE   低于等于/高于則轉(zhuǎn)移 
        JL/JNL    小于/不小于則轉(zhuǎn)移 
        JLE/JNLE   小于等于/大于則轉(zhuǎn)移 
        JCXZ     CX為零則轉(zhuǎn)移
    ⑶ 循環(huán)指令
        LOOP      循環(huán)
        LOOPZ/LOOPE  為零/相等時循環(huán)
        LOOPNZ/LOOPNE 不為零/不等時循環(huán)
    ⑷ 子程序調(diào)用與返回
        CALL      調(diào)用
        RET       返回
    ⑸ 中斷及中斷返回
        INT       中斷
        INTO      溢出則中斷
        IRET       中斷返回
3.3.6 處理機控制指令
  處理機控制指令包括一組置0或置1標志位的指令,還有一些控制處理機狀態(tài)的指令。
    ⑴ 標志位處理指令
        CLC CF置0
        STC CF置1
        CMC CF求反
        CLD DF置0
        STD DF置1
        CLI IF置0
        STI IF置1
    ⑵ 處理機控制指令
        NOP 無操作
        HLT 停機
        WAIT 等待
        ESC 轉(zhuǎn)義
        LOCK 封鎖

下了一個不錯的匯編開發(fā)環(huán)境。還是湖南的軟件公司做的,感覺不錯。下載地址:http://www.chencan.com/ccasm/  回復(fù)  更多評論
  

# 2006-12-18 筆記 2006-12-18 22:25 思勤無邪
第四章 匯編語言程序格式

4.1 匯編程序功能

4.2 偽指令
4.2.1 段定義偽指令
4.2.1.1 完整的段定義偽指令
    完整段定義偽指令的格式如下:
        段名 SEGMENT
            .
            .
            .
        段名 ENDS

4.2.2.2 存儲模型與簡化段定義偽指令
    1. 存儲模型偽指令
    存儲模型決定一個程序的規(guī)模,也確定進行子程序調(diào)用、指令轉(zhuǎn)移和數(shù)據(jù)訪問的缺省屬性(NEAR或FAR)。當使用簡化段定義的源程序格式時,在段定義語句之前必須有存儲模型 .MODEL語句,說明在存儲器中應(yīng)如何安放各個段。
    Flat存儲模型: 所有代碼和數(shù)據(jù)放置在一個段中,但段地址是32位的,所以整個程序可為4GB。MASM 6.0支持該模型。 

    2. 簡化的段偽指令 
    .CODE [段名]     創(chuàng)建一個代碼段(段名為可選項,如不給出段名,則采用默認段名。對于多個代碼段的模型,則應(yīng)為每個代碼段指定段名。)
    .DATA            創(chuàng)建一個數(shù)據(jù)段(段名是:_DATA)
    .DATA?           創(chuàng)建無初值變量的數(shù)據(jù)段(段名是:_BSS)
    .FARDATA [段名]  建立有初值的遠調(diào)用數(shù)據(jù)段(可指定段名,如不指定,則將以FAR_DATA命名。) 
    .FARDATA? [段名] 建立無初值的遠調(diào)用數(shù)據(jù)段(可指定段名,如不指定,則將以FAR_BSS命名。) 
    .CONST           建立只讀的常量數(shù)據(jù)段(段名是:CONST)
    .STACK [大小]    創(chuàng)建一個堆棧段并指定堆棧段大小(段名是:stack。如不指定堆棧段大小,則缺省值為1KB) 

    3.與簡化段定義有關(guān)的預(yù)定義符號
    (1)@code 由.CODE 偽指令定義的段名或段組名。
    (2)@data 由.DATA 偽指令定義的段名,或由 .DATA 、.DATA?、.CONST和 .STACK所定義的段組名。
    (3)@stack 堆棧段的段名或段組名。

    簡化段定義舉例

      .MODEL     SMALL
      .STACK     100H       ; 定義堆棧段及其大小
      .DATA                 ; 定義數(shù)據(jù)段
              .
              .
              .
      .CODE                 ; 定義代碼段
  START:                    ; 起始執(zhí)行地址標號
      MOV        AX, @DATA  ; 數(shù)據(jù)段地址
      MOV        DS, AX     ; 存入數(shù)據(jù)段寄存器
              .
              .
              .
      MOV       AX, 4C00H
      INT       21H
      END       START       ; 程序結(jié)束

4.2.2.3 段組定義偽指令
    段組定義偽指令能把多個同類段合并為一個64KB的物理段,并用一個段組名統(tǒng)一存取它。段組定義偽指令GROUP的格式如下:
    段組名  GROUP  段名 [, 段名 …]

4.2.3 程序開始和結(jié)束偽指令

4.2.4 數(shù)據(jù)定義及存儲器分配偽指令
    ORG(origin)
    ORG偽指令用來表示起始的偏移地址,緊接著ORG的數(shù)值就是偏移地址的起始值。ORG偽操作常用在數(shù)據(jù)段指定數(shù)據(jù)的存儲地址,有時也用來指定代碼段的起始地址。

    DB(define byte)
    DB偽指令用來定義字節(jié),對其后的每個數(shù)據(jù)都存儲在一個字節(jié)中。DB能定義十進制數(shù)、二進制數(shù)、十六進制數(shù)和ASCII字符,二進制數(shù)和十六進制數(shù)要分別用"B"和"H"表示,ASCII字符用單引號(' ')括起來。DB還是唯一能定義字符串的偽操作,串中的每個字符占用一個字節(jié)。

   DW(define word)
    DW偽指令用來定義字,對其后的每個數(shù)據(jù)分配2個字節(jié)(1個字),數(shù)據(jù)的低8位存儲在低字節(jié)地址中,高8位存儲在高字節(jié)地址中,如下例中的變量DATA8的數(shù)據(jù)存儲在0070字地址中,其中0070字節(jié)存儲0BAH,0071字節(jié)存儲03H。DW還可存儲變量或標號的偏移地址。見左面DW偽指令的例子。

    DD(define doubleword)
    DD偽指令用來定義雙字,對其后的每個數(shù)據(jù)分配4個字節(jié)(2個字)。該偽指令同樣將數(shù)據(jù)轉(zhuǎn)換為十六進制,并根據(jù)低地址存儲低字節(jié),高地址存儲高字節(jié)的規(guī)則來存放數(shù)據(jù)。如下例DATA15的存儲情況是:00A8:0F2H,00A9H:57H,00AAH:2AH,00ABH:5CH。
    用DD存入地址時,第一個字為偏移地址,第二個字為段地址。

    DQ(define quadword)
    DQ偽指令用來定義4字,即64位字長的數(shù)據(jù),DQ之后的每個數(shù)據(jù)占用8個字節(jié)(4個字)。

    DT(define ten bytes)
    DT偽指令用來為壓縮的BCD數(shù)據(jù)分配存儲單元,它雖然可以分配10個字節(jié)(5個字),但最多只能輸入18個數(shù)字,要注意的是,數(shù)據(jù)后面不需要加"H"。左面是DQ和DT的例子。

    DUP(duplicate)
    DUP偽指令可以按照給定的次數(shù)來復(fù)制某個(某些)操作數(shù),它可以避免多次鍵入同樣一個數(shù)據(jù)。例如,把6個FFH存入相繼字節(jié)中,可以用下面兩種方法,顯然用DUP的方法更簡便些。

  存入6字節(jié)的FFH
DATA20 DB 0FFH 0FFH 0FFH 0FFH 0FFH 0FFH;
DATA21 DB 6 DUP(0FFH)    

    DUP操作一般用來保留數(shù)據(jù)區(qū),如用數(shù)據(jù)定義偽指令"DB 64 DUP(?)"可為堆棧段保留64個字節(jié)單元。DUP還可以嵌套,其用法見左例。

    PTR屬性操作符
    PTR指定操作數(shù)的類型屬性,它優(yōu)先于隱含的類型屬性。其格式為:

    類型 PTR 變量[ ± 常數(shù)表達式]

    其中類型可以是BYTE、WORD、DWORD、FWORD、QWORD或TBYTE,這樣變量的類型就可以指定了。

    LABEL偽指令
    LABEL可以使同一個變量具有不同的類型屬性。其格式為:

    變量名 LABEL 類型
或  標號   LABEL 類型

    其中變量的數(shù)據(jù)類型可以是BYTE,WORD,DWORD,標號的代碼類型可以是NEAR或FAR。

4.2.5 表達式賦值偽指令
    EQU是一個賦值偽操作(偽指令),它給一個數(shù)據(jù)標號賦于一個常數(shù)值,但這個常數(shù)不占用存儲單元。當這個數(shù)據(jù)標號出現(xiàn)在程序中時,匯編程序即用它的常數(shù)值代替數(shù)據(jù)標號。EQU可以在數(shù)據(jù)段之外使用,甚至可用在代碼段中間。

    = 偽操作

    賦值偽操作"="的作用與EQU類似。它們之間的區(qū)別是,EQU偽操作中的標號名是不允許重復(fù)定義的,而=偽操作是允許重復(fù)定義的。

4.2.6 地址計數(shù)器與對準偽指令
    1.地址計數(shù)器$

    在匯編程序?qū)υ闯绦騾R編的過程中,使用地址計數(shù)器來保存當前正在匯編的指令的地址。地址計數(shù)器的值在匯編語言中可用$來表示。

    當$用在偽指令的參數(shù)字段時,它所表示的是地址計數(shù)器的當前值

    2.EVEN偽指令

    EVEN偽指令使下一個變量或指令開始于偶數(shù)字節(jié)地址。

    3. ALIGN偽指令

    ALIGN偽指令使它后面的數(shù)據(jù)或指令從2的整數(shù)倍地址開始。其格式為:

        ALIGN 2n (n為任意整數(shù))


4.2.7 基數(shù)控制偽指令 
    .RADIX偽指令

    .RADIX可以把默認的基數(shù)改變?yōu)?~16范圍內(nèi)的任何基數(shù)。其格式如下:
          .RADIX 基數(shù)值

    其中基數(shù)值用十進制數(shù)來表示。

4.3 匯編語言程序格式 
4.3.1.匯編語言源程序語句的格式 
4.3.2 表達式

    (1) 算術(shù)操作符
    算術(shù)操作符有+、-、*、/ 和MOD。
    MOD是指除法運算后得到的余數(shù),如19/7的商是2,而19 MOD 7則為5(余數(shù))。

    (2) 邏輯操作符 
    邏輯操作符有:AND(與)、OR(或)、XOR(異或)、NOT(非)。
    邏輯操作符都是按位操作的,只能用于數(shù)字表達式中。邏輯操作符要求匯編程序?qū)ζ淝昂髢蓚€操作數(shù)(或表達式)作指定的邏輯操作。

    (3) 關(guān)系操作符
    關(guān)系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。
    關(guān)系操作符的兩個操作數(shù)必須都是數(shù)字或是同一段內(nèi)的兩個存儲器地址。計算的結(jié)果應(yīng)為邏輯值:結(jié)果為真,表示為0FFFFH;結(jié)果為假,則表示為0。

    (4) 數(shù)值回送操作符 
    數(shù)值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。
    數(shù)值操作符把一些特征或存儲器地址的一部分作為數(shù)值回送。

    · TYPE
    格式為:TYPE 表達式
    如果表達式是變量,則匯編程序?qū)⒒厮驮撟兞康囊宰止?jié)數(shù)表示的類型:DB為1,DW為2,DD為4,DF為6,DQ為8,DT為10。如果表達式是標號,則匯編程序?qū)⒒厮痛碓摌颂栴愋偷臄?shù)值:NEAR為 -1,F(xiàn)AR為 -2。如果表達式為常數(shù),則應(yīng)回送0。

    · LENGTH
    格式為:LENGTH 變量
    對于變量中使用DUP的情況,匯編程序?qū)⒒厮头峙浣o該變量的單元數(shù),而對于其他情況則送1。

    · SIZE
    格式為:SIZE 變量
    匯編程序應(yīng)回送分配給該變量的字節(jié)數(shù)。但是,此值是LENGTH值和TYPE值的乘積。

    · OFFSET
    格式為:OFFSET 變量或標號
    匯編程序?qū)⒒厮妥兞炕驑颂柕钠频刂分怠?

    · SEG
    格式為:SEG 變量或標號
    匯編程序?qū)⒒厮妥兞炕驑颂柕亩蔚刂分怠?

    (5) 屬性操作符
    屬性操作符主要有:PTR、段操作符、SHORT、THIS、HIGH、LOW等。

    · PTR
    格式為:類型 PTR 符號地址
    PTR用來給已分配的存儲地址(用符號地址表示)賦予另一種屬性,使該地址具有另一種類型。
    類型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等幾種,所以PTR也可以用來建立字、雙字、四字或段內(nèi)及段間的指令單元等。

    · 段操作符
    段操作符用來表示一個標量、變量或地址表達式的段屬性。
    格式為: 
    段寄存器∶地址表達式
    段名∶地址表達式
    組名∶地址表達式

    · SHORT
    用來修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的±127個字節(jié)范圍之內(nèi)。

    · THIS
    格式為: THIS 屬性或類型
    THIS可以象PTR一樣建立一個指定類型(BYTE、WORD、DWORD)或指定距離(NEAR或FAR)的地址操作數(shù)。該操作數(shù)的段地址和偏移地址與下一個存儲單元地址相同。

    · HIGH和LOW
    稱為字節(jié)分離操作符,它接收一個數(shù)或地址表達式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。

4.3.3 匯編語言源程序格式舉例

4.4 匯編語言程序的上機過程
4.4.1 建立匯編語言的工作環(huán)境
4.4.2 匯編語言程序上機運行過程
4.4.3 COM文件
  回復(fù)  更多評論
  

# 2006-12-19 筆記 2006-12-20 14:30 思勤無邪
昨天因有別的事(修改幫別人做過的網(wǎng)站)而沒有時間完成學(xué)習(xí)計劃。
將大一點的目標寫成計劃,并具體到天還是很有好處的,至少能督促自己盡力去完成。  回復(fù)  更多評論
  

# 都有哪些名詞是用字母表示的 2007-11-03 13:23 郭佳寧
rvey   good  回復(fù)  更多評論
  

# 都有哪些名詞是用字母表示的 2007-11-03 13:24 郭佳寧
veryverygood  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费人成网站在线观看欧美高清| 91久久午夜| 亚洲国产专区校园欧美| 国产在线欧美日韩| 亚洲一区二区三区午夜| 国产婷婷色一区二区三区在线| 国产精品高潮呻吟视频| 欧美日韩一区二区三区在线看| 欧美剧在线免费观看网站| 欧美精品免费视频| 国产欧美一区二区精品秋霞影院 | 久久精品国产成人| 欧美有码视频| 一区二区三区欧美| 国产精品成人av性教育| 久久精品一区二区三区四区 | 免费观看成人| 亚洲另类在线视频| 欧美激情偷拍| 久久精品91| 激情视频亚洲| 一区二区三区三区在线| 欧美国产日韩一二三区| 午夜精品久久久久久99热软件 | 老**午夜毛片一区二区三区| 校园春色国产精品| 日韩视频中文| 亚洲日本无吗高清不卡| 国内精品视频久久| 欧美性一区二区| 国产精品成人午夜| 欧美成人情趣视频| 欧美极品在线视频| 免费在线成人av| 久久精品视频免费| 久久精品免视看| 久久午夜精品一区二区| 欧美一区二区三区在线播放| 欧美激情性爽国产精品17p| 久久精品夜色噜噜亚洲aⅴ| 国产精品一区二区三区久久久 | 麻豆精品网站| 久久精品日产第一区二区| 国产亚洲欧美另类中文| 国产精品美女主播| 一区免费在线| 亚洲毛片播放| 一本一本久久| 亚洲综合色网站| 久久亚洲精品网站| 香蕉久久夜色精品国产使用方法| 亚洲精品日韩在线观看| 亚洲人成人99网站| 一本色道久久精品| 久久久久九九视频| 欧美v日韩v国产v| 久久视频国产精品免费视频在线| 一区在线播放视频| 亚洲国产精品成人综合| 欧美区国产区| 午夜精品免费| 欧美成人午夜影院| 亚洲另类视频| 久久久综合网站| 亚洲性av在线| 欧美 日韩 国产一区二区在线视频| 精品二区久久| 亚洲美女视频网| 老司机午夜精品| 亚洲欧美国产精品专区久久| 久久久久免费视频| 国产久一道中文一区| 一区二区三区欧美视频| 久久午夜影视| 亚洲免费在线精品一区| 亚洲欧美国产一区二区三区| 99视频日韩| 久久综合一区| 久久久国产精彩视频美女艺术照福利| 欧美成人日韩| 亚洲福利久久| 在线国产欧美| 欧美激情一区二区三级高清视频 | 亚洲精品资源| 欧美777四色影视在线| 亚洲国产精品成人综合色在线婷婷| 欧美一级理论片| 久久女同互慰一区二区三区| 在线日韩中文| 在线综合亚洲| 亚洲高清色综合| 蜜桃久久精品乱码一区二区| 午夜国产精品视频免费体验区| 精品av久久久久电影| 亚洲日本乱码在线观看| 亚洲精品在线电影| 欧美久久久久久久| 亚洲天堂成人| 久久久久这里只有精品| 在线 亚洲欧美在线综合一区| 亚洲精品久久久一区二区三区| 亚洲日本电影在线| 日韩亚洲精品电影| 一区精品在线| 亚洲在线一区二区| 在线精品视频一区二区| 亚洲免费成人av| 国产亚洲综合精品| 亚洲裸体在线观看| 一区二区三区在线视频免费观看| 亚洲男人av电影| 亚洲最新视频在线| 欧美成人午夜免费视在线看片| 国产精品伦一区| 一区二区三区高清视频在线观看| 欧美一级免费视频| 亚洲日本一区二区| 欧美视频免费看| 欧美不卡高清| 久久香蕉国产线看观看av| 亚洲一区二区在线观看视频| 亚洲国产日韩欧美综合久久 | 欧美噜噜久久久xxx| 久久精品亚洲一区二区三区浴池| 欧美网站在线| 亚洲欧美日韩一区在线观看| 亚洲欧美日韩综合aⅴ视频| 欧美精品免费观看二区| 亚洲人成网在线播放| 亚洲美女色禁图| 欧美午夜电影完整版| 午夜精品免费在线| 蜜臀av在线播放一区二区三区| 伊人夜夜躁av伊人久久| 母乳一区在线观看| 99热免费精品| 欧美在线免费观看视频| 久久精品夜夜夜夜久久| 国产精品专区一| 国产精品成人一区二区| 国产欧美日韩精品专区| 国产伦精品一区二区三区免费 | 久久综合九色99| 另类欧美日韩国产在线| 亚洲精品视频在线观看网站 | 久久久久久久综合| 亚洲欧洲综合另类在线| 欧美视频一区在线| 久久一区二区三区av| aa日韩免费精品视频一| 久久亚洲春色中文字幕| 99在线|亚洲一区二区| 久久久久国产精品人| 亚洲欧美激情一区二区| 性8sex亚洲区入口| 国产精一区二区三区| 久久综合国产精品| 国产精品社区| 99re6这里只有精品视频在线观看| 亚洲一区二区三区在线观看视频| 欧美中文字幕视频| 亚洲高清视频在线观看| 亚洲欧洲日韩在线| 久久av一区| 午夜精品网站| 日韩午夜电影| 亚洲另类在线视频| 亚洲国产一区二区视频| 国模私拍一区二区三区| 国产女主播视频一区二区| 国产精品久久久久久久久久久久久久| 美女视频黄 久久| 欧美jizzhd精品欧美巨大免费| 久久久亚洲影院你懂的| 亚洲欧美日韩精品在线| 欧美在线高清| 久久噜噜噜精品国产亚洲综合 | 欧美aⅴ一区二区三区视频| 欧美成人性网| 欧美激情亚洲精品| 在线播放日韩欧美| 91久久夜色精品国产九色| 亚洲一区二区三| 日韩午夜av| 欧美国产高清| 亚洲电影免费在线| 亚洲精品一级| 亚洲欧美偷拍卡通变态| 午夜一区二区三区不卡视频| 欧美在线播放一区二区| 久久综合给合久久狠狠色| 欧美激情一区二区三区全黄 | 亚洲永久免费观看| 麻豆av福利av久久av| 国产精品久久久久av| 亚洲第一二三四五区| 亚洲欧美国产毛片在线| 亚洲人成亚洲人成在线观看图片| 一本色道婷婷久久欧美| 亚洲天堂男人|