• <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>

            思勤無邪

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

               :: 首頁 :: 聯系 :: 聚合  :: 管理
              132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

            公告

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

            積分與排名

            • 積分 - 183661
            • 排名 - 141

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            ??? 學習清華大學計算機系網絡課程中的匯編語言程序設計。準備花兩周來學習,這周主要是理論知識,下周加以實踐,寫一些Demo。

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

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

            Feedback

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

            1.1 進位計數制

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

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

            1.3 二進制數和十六進制數的運算

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


            第二章 8086計算機組織

            2.1 80x86微處理器系列概況

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

             
            3.3.2.6 十進制調整指令

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

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

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

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

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

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

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

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

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

              非壓縮的BCD碼調整指令
              AAA 加法的ASCII調整(ASCII adjust for add)
              執行操作:
             ?。ˋL)← 把AL中的和調整為非壓縮的BCD格式
             ?。ˋH)←(AH)+ 調整產生的進位值

              AAS 減法的ASCII調整(ASCII adjust for sub)
              執行操作:
             ?。ˋL)← 把AL中的差調整為非壓縮的BCD格式
              (AH)←(AH)- 調整產生的借位值

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

              AAA和AAS的調整方法如下:
              執行加法指令(ADD、ADC)或減法指令(SUB、SBB)后,結果存放在AL寄存器中:
              (1)如果(AL)0~3= 0~9,且AF=0,則(AL)4~7= 0,AF的值送CF;
             ?。?)如果(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調整(ASCII adjust for mul)
              執行操作:(AX)← 把AX中的積調整為非壓縮的BCD格式

              AAD 除法的ASCII調整(ASCII adjust for div)
              執行操作:(AX)← AX中的被除數(非壓縮的BCD格式)轉化為二進制數

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

              AAM的調整方法為:
              執行乘法指令(MUL)后,調整存放在AL寄存器中的乘積:
              ?。ˋH)←(AL)/ 0AH的商
              ?。ˋL)←(AL)/ 0AH的余數

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

              注意:如果是兩個ASCII碼數相乘,要先將它們轉換成非壓縮BCD碼。

              AAD的調整方法為:
              執行除法指令之前,對AX中的非壓縮BCD碼(被除數)執行:
              ?。ˋL)←(AH)×10+(AL)
              ?。ˋH)← 0

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

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

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

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

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

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

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

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

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

              REPE / REPZ 相等/為零時重復執行串指令,(CX)=比較/掃描的次數
              執行操作:
              ① (CX)=0或ZF=0時,結束執行串指令,否則繼續② ~ ④
              ② (CX)←(CX)-1
             ?、?nbsp;執行串指令(CMPS或SCAS)
             ?、?nbsp;重復執行①

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

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

            # 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. 存儲模型偽指令
                存儲模型決定一個程序的規模,也確定進行子程序調用、指令轉移和數據訪問的缺省屬性(NEAR或FAR)。當使用簡化段定義的源程序格式時,在段定義語句之前必須有存儲模型 .MODEL語句,說明在存儲器中應如何安放各個段。
                Flat存儲模型: 所有代碼和數據放置在一個段中,但段地址是32位的,所以整個程序可為4GB。MASM 6.0支持該模型。 

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

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

                簡化段定義舉例

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

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

            4.2.3 程序開始和結束偽指令

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

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

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

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

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

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

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

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

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

                PTR屬性操作符
                PTR指定操作數的類型屬性,它優先于隱含的類型屬性。其格式為:

                類型 PTR 變量[ ± 常數表達式]

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

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

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

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

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

                = 偽操作

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

            4.2.6 地址計數器與對準偽指令
                1.地址計數器$

                在匯編程序對源程序匯編的過程中,使用地址計數器來保存當前正在匯編的指令的地址。地址計數器的值在匯編語言中可用$來表示。

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

                2.EVEN偽指令

                EVEN偽指令使下一個變量或指令開始于偶數字節地址。

                3. ALIGN偽指令

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

                    ALIGN 2n (n為任意整數)


            4.2.7 基數控制偽指令 
                .RADIX偽指令

                .RADIX可以把默認的基數改變為2~16范圍內的任何基數。其格式如下:
                      .RADIX 基數值

                其中基數值用十進制數來表示。

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

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

                (2) 邏輯操作符 
                邏輯操作符有:AND(與)、OR(或)、XOR(異或)、NOT(非)。
                邏輯操作符都是按位操作的,只能用于數字表達式中。邏輯操作符要求匯編程序對其前后兩個操作數(或表達式)作指定的邏輯操作。

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

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

                · TYPE
                格式為:TYPE 表達式
                如果表達式是變量,則匯編程序將回送該變量的以字節數表示的類型:DB為1,DW為2,DD為4,DF為6,DQ為8,DT為10。如果表達式是標號,則匯編程序將回送代表該標號類型的數值:NEAR為 -1,FAR為 -2。如果表達式為常數,則應回送0。

                · LENGTH
                格式為:LENGTH 變量
                對于變量中使用DUP的情況,匯編程序將回送分配給該變量的單元數,而對于其他情況則送1。

                · SIZE
                格式為:SIZE 變量
                匯編程序應回送分配給該變量的字節數。但是,此值是LENGTH值和TYPE值的乘積。

                · OFFSET
                格式為:OFFSET 變量或標號
                匯編程序將回送變量或標號的偏移地址值。

                · SEG
                格式為:SEG 變量或標號
                匯編程序將回送變量或標號的段地址值。

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

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

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

                · SHORT
                用來修飾JMP指令中轉向地址的屬性,指出轉向地址是在下一條指令地址的±127個字節范圍之內。

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

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

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

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

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

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

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

            少妇人妻88久久中文字幕| 99久久免费国产精品| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久久久久久久久免免费精品| 亚洲欧美精品一区久久中文字幕| 精品久久久久久中文字幕大豆网| 久久久久亚洲AV无码网站| 久久精品无码一区二区app| 久久亚洲春色中文字幕久久久| 国产免费福利体检区久久| 亚洲综合熟女久久久30p| 国产亚洲美女精品久久久| 久久精品无码一区二区WWW| 久久精品国产影库免费看| 久久精品国产亚洲αv忘忧草| 狠狠狠色丁香婷婷综合久久五月| 色播久久人人爽人人爽人人片AV| 韩国三级大全久久网站| 久久久精品国产sm调教网站| 午夜精品久久久内射近拍高清| 色成年激情久久综合| 久久99精品国产麻豆| 无码人妻精品一区二区三区久久| 午夜精品久久影院蜜桃| 性做久久久久久久久| 久久天天躁狠狠躁夜夜av浪潮 | 久久亚洲AV成人无码| 三级韩国一区久久二区综合 | 久久精品国产半推半就| 久久久老熟女一区二区三区| 无码任你躁久久久久久老妇App| 精品人妻伦九区久久AAA片69 | 久久66热人妻偷产精品9| 人妻精品久久久久中文字幕69| 亚洲va中文字幕无码久久| 伊人久久无码中文字幕| 久久综合九色综合网站| 久久99国产精品一区二区| 成人国内精品久久久久影院VR| 国产免费久久精品99久久| 久久久精品久久久久久|