<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 等號偽指令 等號偽指令(equal-sign directive)把一個符號名稱與一個整數表達式連接起來,其語法如下: ``` name = expression ``` 通常,表達式是一個 32 位的整數值。當程序進行匯編時,在匯編器預處理階段,所有出現的 name 都會被替換為 expression。假設下面的語句出現在一個源代碼文件開始的位置: ``` COUNT = 500 ``` 然后,假設在其后有如下語句: ``` mov eax, COUNT ``` 那么,當匯編文件時,MASM 將掃描這個源文件,并生成相應的代碼行: ``` mov eax, 500 ``` ### 當前地址計數器 最重要的符號之一被稱為當前地址計數器(current location counter),表示為 $。例如,下面的語句聲明了一個變量 selfPtr,并將其初始化為該變量的偏移量: selfPtr DWORD $ ### 鍵盤定義 程序通常定義符號來識別常用的數字鍵盤代碼。比如,27 是 Esc 鍵的 ASCII 碼: ``` Esc_key = 27 ``` 在該程序的后面,如果語句使用這個符號而不是整數常量,那么它會具有更強的自描述性。 ``` 使用 mov al,Esc_key ;好的編程風格 而非 mov al,27????? ;不好的編程風格 ``` ### 使用DUP操作符 DUP 操作符使用一個整數表達式作為計數器,為多個數據項分配存儲空間。在為字符串或數組分配存儲空間時,這個操作符非常有用,它可以使用初始化或非初始化數據 ``` BYTE 20 DUP ( 0 ) ;20 個字節,值都為 0 BYTE 20 DUP ( ? ) ;20 個字節,非初始化 BYTE 4 DUP ( "STACK" ) ; 20 個字節: ``` 在下例中,如果已經定義了`COUNT`,那么它就可以用于下面的數據定義中: ``` array dword COUNT DUP(0) ``` ### 重定義 用“=”定義的符號,在同一程序內可以被重新定義。下例展示了當 COUNT 改變數值后,匯編器如何計算它的值: ``` COUNT = 5 mov al,COUNT ; AL = 5 COUNT = 10 mov al,COUNT ; AL = 10 COUNT = 100 mov al,COUNT ; AL = 100 ``` 符號值的改變,例如`COUNT`,不會影響語句在運行時的執行順序。相反,在匯編器預處理階段,符號會根據匯編器對源代碼處理的順序來改變數值。 ## 匯編語言EQU偽指令 EQU 偽指令把一個符號名稱與一個整數表達式或一個任意文本連接起來,它有 3 種格式: ``` name EQU expression name EQU symbol name EQU ``` * 第一種格式中,expression 必須是一個有效整數表達式。 * 第二種格式中,symbol 是一個已存在的符號名稱,已經用 = 或 EQU 定義過了。 * 第三種格式中,任何文本都可以岀現在內。當匯編器在程序后面遇到 name 時,它就用整數值或文本來代替符號。 在定義非整數值時,EQU 非常有用。比如,可以使用 EQU 定義實數常量: ``` PI EQU ``` 【示例 1】下面的例子將一個符號與一個字符串連接起來,然后用該符號定義一個變量: ``` pressKey EQU <"Press any key to continue...", 0> .data prompt BYTE pressKey ``` 【示例 2】假設想定義一個符號來計算一個 10 x 10 整數矩陣的元素個數。現在用兩種不同的方法來進行符號定義,一種用整數表達式,一種用文本。然后把兩個符號都用于數據定義: ``` matrix1 EQU 10 * 10 matrix2 EQU <10 * 10> .data M1 WORD matrix1 M2 WORD matrix2 ``` 匯編器將為 M1 和 M2 生成不同的數據定義。計算 matrix1 中的整數表達式,并將其賦給M1。而 matrix2 中的文本則直接復制到 M2 的數據定義中: ``` M1 WORD 100 M2 WORD 10 * 10 ``` >與 = 偽指令不同,在同一源代碼文件中,用 EQU 定義的符號不能被重新定義。這個限制可以防止現有符號在無意中被賦予新值。 ## 匯編語言TEXTEQU偽指令 TEXTEQU 偽指令,類似于 EQU,創建了文本宏(text macro)。它有 3 種格式:第一種為名稱分配的是文本;第二種分配的是已有文本宏的內容;第三種分配的是整數常量表達式: ``` name TEXTEQU name TEXTEQU textmacro name TEXTEQU %constExpr ``` 例如,變量 prompt1 使用了文本宏 continueMsg: ``` continueMsg TEXTEQU <"Do you wish to continue (Y/N)?"> .data prompt1 BYTE continueMsg ``` 文本宏可以相互構建。如下例所示,count 被賦值了一個整數表達式,其中包含 rowSize。然后,符號 move 被定義為 mov。最后,用 move 和 count 創建 setupAL: ``` rowSize = 5 count TEXTEQU %(rowSize * 2) move TEXTEQU <mov> setupAL TEXTEQU <move al,count> ``` 因此,語句 ``` setupAL ``` 就會被匯編為 ``` mov al,10 ``` >用 TEXTEQU 定義的符號隨時可以被重新定義。 參考:http://c.biancheng.net/view/3467.html http://c.biancheng.net/view/3477.html http://c.biancheng.net/view/3481.html http://c.biancheng.net/view/3484.html
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看