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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## 整數常量 整數常量(integer literal)(又稱為整型常量(integer constant))由一個可選前置符號、一個或多個數字,以及一個指明其基數的可選基數字符構成: ``` [{+|-}] digits [radix] ``` 由此,比如 26 就是一個有效的整數常量。它沒有基數,所以假設其是十進制形式。如果想要表示十六進制數 26,就將其寫為 26h。同樣,數字 1101 可以被看做是十進制值,除非在其末尾添加“b”,使其成為 1101b (二進制)。下表列出了可能的基數值: | 標識符 | 描述 | | --- | --- | | h | 十六進制 | | q/o | 八進制 | | d | 十進制 | | b | 二進制 | | r | 實數 | | t | 十進制 (備用) | | y | 十進制 (備用) | 下面這些整數常量聲明了各種基數。每行都有注釋: ``` 26 ;十進制 26d ;十進制 11010011b ;二進制 42q ;八進制 42o ;八進制 1Ah ;十六進制 0A3h ;十六進制 ``` ## 保留字 保留字(reserved words)有特殊意義并且只能在其正確的上下文中使用。默認情況下,保留字是沒有大小寫之分的。比如,MOV 與 mov、Mov 是相同的。 保留字有不同的類型: * 指令助記符,如 MOV、ADD 和 MUL。 * 寄存器名稱。 * 偽指令,告訴匯編器如何匯編程序。 * 屬性,提供變量和操作數的大小與使用信息。例如 BYTE 和 WORD。 * 運算符,在常量表達式中使用。 * 預定義符號,比如 @data,它在匯編時返回常量的整數值。 下表是常用的保留字列表。 | | | | | | --- | --- | --- | --- | | $ | PARITY? | DWORD| STDCALL | |? | PASCAL FAR |SWORD | |@B |QWORD |FAR16 |SYSCALL | |@F |REAL4 |FORTRAN |TBYTE | |ADDR | REAL8 |FWORD |VARARG | |BASIC | REAL10 |NEAR | WORD | |BYTE |SBYTE |NEAR16 |ZERO? | |C |SDORD |OVERFLOW? | |CARRY? | SIGN? | ## 標識符 標識符(identifier)是由程序員選擇的名稱,它用于標識變量、常數、子程序和代碼標簽。 標識符的形成有一些規則: * 可以包含 1 到 247 個字符。 * 不區分大小寫。 * 第一個字符必須為字母 (A---Z, a---z) A 下劃線 (\_)、@、? 或 $。其后的字符也可以是數字。 * 標識符不能與匯編器保留字相同。 > 提示:可以在運行匯編器時,添加 -Cp 命令行切換項來使得所有關鍵字和標識符變成大小寫敏感。 下面是一些命名良好的名稱: ``` lineCount???? firstValue? ? ? ?index? ? ? ?line_count myFile? ? ? ? ? xCoord? ? ? ? ? ?main? ? ? ?x_Coord ``` 下面的名稱合法,但是不可取: ``` _lineCount? ? ? ?$first? ? ? ? @myFile ``` 一般情況下,應避免用符號 @ 和下劃線作為第一個字符,因為它們既用于匯編器,也用于高級語言編譯器。 ## 偽指令 偽指令 (directive) 是嵌入源代碼中的命令,由匯編器識別和執行。偽指令不在運行時執行,但是它們可以定義變量、宏和子程序;為內存段分配名稱,執行許多其他與匯編器相關的日常任務。 默認情況下,偽指令不區分大小寫。例如,.data,.DATA 和 .Data 是相同的。 ### 定義段 匯編器偽指令的一個重要功能是定義程序區段,也稱為段 (segment)。程序中的段具有不同的作用。如下面的例子,一個段可以用于定義變量,并用 .DATA 偽指令進行標識: ``` .data ``` .CODE 偽指令標識的程序區段包含了可執行的指令: ``` .code ``` .STACK 偽指令標識的程序區段定義了運行時堆棧,并設置了其大小: ``` .stack 100h ``` 與 = 偽指令不同,在同一源代碼文件中,用 EQU 定義的符號不能被重新定義。這個限制可以防止現有符號在無意中被賦予新值。 ## 指令 指令(instruction)是一種語句,它在程序匯編編譯時變得可執行。匯編器將指令翻譯為機器語言字節,并且在運行時由 CPU 加載和執行。 一條指令有四個組成部分: * 標號(可選) * 指令助記符(必需) * 操作數(通常是必需的) * 注釋(可選) ### 標號 標號(label)是一種標識符,是指令和數據的位置標記。標號位于指令的前端,表示指令的地址。同樣,標號也位于變量的前端,表示變量的地址。標號有兩種類型:數據標號和代碼標號。 數據標號標識變量的位置,它提供了一種方便的手段在代碼中引用該變量。比如,下面定義了一個名為 count 的變量: ```asm count DWORD 100 ``` 匯編器為每個標號分配一個數字地址。可以在一個標號后面定義多個數據項。在下面的例子中,array 定義了第一個數字(1024)的位置,其他數字在內存中的位置緊隨其后: ```asm array DWORD 1024, 2048 DWORD 4096, 8192 ``` 程序代碼區(指令所在區段)的標號必須用冒號(:)結束。代碼標號用作跳轉和循環指令的目標。例如,下面的 JMP 指令創建一個循環,將程序控制傳遞給標號 target 標識的位置: ```asm target: mov ax,bx ... jmp target ``` 代碼標號可以與指令在同一行上,也可以自己獨立一行: ```asm L1: mov ax, bxL2 : ``` >標號命名規則要求,只要每個標號在其封閉子程序頁中是唯一的,那么就可以多次使用相同的標號。 ### 指令助記符 指令助記符(instruction mnemonic)是標記一條指令的短單詞。在英語中,助記符是幫助記憶的方法。相似地,[匯編語言](http://c.biancheng.net/asm/)指令助記符,如 mov, add 和 sub,給出了指令執行操作類型的線索。下面是一些指令助記符的例子: |助記符 |說明 |助記符 | 說明 | | --- | --- | --- | --- | |MOV |傳送 |(分配) |數值 |MUL |兩個數值相乘 | |ADD |兩個數值相加 |JMP |跳轉到一個新位置 | |SUB |從一個數值中減去另一個數值 |CALL | 調用一個子程序 | ### 操作數 操作數是指令輸入輸出的數值。匯編語言指令操作數的個數范圍是 0?3 個,每個操作數可以是寄存器、內存操作數、整數表達式和輸入輸岀端口。 生成內存操作數有不同的方法,比如,使用變量名、帶方括號的寄存器等。變量名暗示了變量地址,并指示計算機使用給定地址的內存內容。下表列出了一些操作數示例: | 示例 | 操作數類型 | 示例? | 操作數類型 | | --- | --- | --- | --- | | 96? | 整數常量 | eax | 寄存器 | | 2+4 | 整數表達式 | count | 內存 | 現在來考慮一些包含不同個數操作數的匯編語言指令示例。比如,STC 指令沒有操作數: ``` stc ;進位標志位置 1 ``` INC 指令有一個操作數: ``` inc eax ;EAX 加 1 ``` MOV 指令有兩個操作數: ``` mov count, ebx ;將 EBX 傳送給變量 count ``` 操作數有固有順序。當指令有多個操作數時,通常第一個操作數被稱為目的操作數,第二個操作數被稱為源操作數(source operand)。 一般情況下,目的操作數的內容由指令修改。比如,在 mov 指令中,數據就是從源操作數復制到目的操作數。 IMUL 指令有三個操作數,第一個是目的操作數,第二個和第三個是進行乘法的源操作數: ``` imul eax,ebx,5 ``` 在上例中,EBX 與 5 相乘,結果存放在 EAX 寄存器中。 ### 注釋 注釋有兩種指定方法: * 單行注釋,用分號(;)開始。匯編器將忽略在同一行上分號之后的所有字符。 * 塊注釋,用 COMMENT 偽指令和一個用戶定義的符號開始。匯編器將忽略其后所有的文本行,直到相同的用戶定義符號出現為止。 示例如下: ``` COMMENT ! This line is a comment. This line is also a comment. ! ``` 其他符號也可以使用,只要該符號不出現在注釋行中: ``` COMMENT & This line is a comment. This line is also a comment. & ``` ### NOP(空操作)指令 最安全(也是最無用)的指令是 NOP(空操作)。它在程序空間中占有一個字節,但是不做任何操作。它有時被編譯器和匯編器用于將代碼對齊到有效的地址邊界。 在下面的例子中,第一條指令 MOV 生成了 3 字節的機器代碼。NOP 指令就把第三條指令的地址對齊到雙字邊界(4 的偶數倍): ``` 00000000 66 8B C3 mov ax,bx 00000003 90 nop ;對齊下條指令 00000004 8B D1 mov edx,ecx ``` x86 處理器被設計為從雙字的偶數倍地址處加載代碼和數據,這使得加載速度更快。 ps 參考連接:http://c.biancheng.net/view/3469.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>

                              哎呀哎呀视频在线观看