80x86組合語言學習筆記(三)

2021-05-24 08:19:51 字數 1712 閱讀 3987

今天上午開始看組合語言程式設計初步,這一章分為:組合語言語句、變數和標號、常用偽指令語句和源程式組織、順序程式設計、分支程式設計、迴圈程式設計這幾塊,這次總結一下組合語言的語句。

首先組合語言的語句分為指令語句、偽指令語句和巨集指令語句,其中指令語句是可以被譯成機器指令的語句,例如將某運算元從乙個暫存器複製到另乙個暫存器;偽指令語句沒有與其相對應的機器指令,只是用來指示如何彙編源程式,例如變數的定義;巨集指令語句是利用巨集定義偽指令定義的某個程式片段。

關於組合語言語句的格式,各種符號的使用一定要注意

1.語句中各部分見一定要有分隔符,其中空格和製表符是最常用的分隔符。

2.組合語言中的注釋前面使用的是分號,這點要與c++區分開。

3.語句中的引數(例如兩個運算元之間)多用逗號作為分隔符,但空格和製表符也可以。

4.標號和名字一般由字母、數字及規定的特殊符號(?@_$)等組成,並且不能以數字開頭,同時名字和標號也不能是組合語言的保留字(包括助記符、偽指令定義符、暫存器名等)。

5彙編不區分保留字、名字、標號中的字母大小寫。

彙編中中的各種運算子和操作符以及常數、符號連在一起成為表示式,表示式分為數值表示式和位址表示式

一.數值表示式

數值表示式就是在彙編過程中能夠由匯程式設計序計算出數值的表示式

這裡先總結一下常數和運算子:

1.常數

1)10進製數是以d結尾或無結尾的常數,例如10,10d

2)2進製數是必須以b結尾的常數,例如010010b(注意,這裡是必須以b結尾,下面的8進製和16進製制數均是必須有結尾,這點要與10進製區分開)

3)8進製是必須以q結尾的常數,例如73q。

4)16進製制是必須以h結尾的常數,而且16進製制也是彙編中最常用的常數型別,例如3ah。同時要注意,彙編中的16進製制數不允許以字母開頭,必須以數字開頭,若開頭為字母,則需在開頭加0,如f54h是錯誤的,必須是0f56h。

5)字串常數是以引號括起來的乙個或多個字元,與c++不同,這裡使用雙引號和單引號的效果是相同的,不論是乙個或是多個字元,而且字串常數最終是以引號中的字元的ascii碼呈現出來的,而不是作為字元,例如'a'是41h,'ab'是6162h。

2.算術運算子

就是+、-、×、/、mod(取模),這些在彙編裡與在高階語言中的使用方法是一樣的

3.關係運算子

包括相等(eq)、不等(ne)、小於(lt)、大於(gt)、小於等於(le)、大於等於(ge)。若成立則結果為1,若不成立則結果為0ffffh,而不是0,這點要注意。

4.邏輯運算子

包括與(and)、或(or)、非(not)、異或(xor)、左移位(shl)、右移位(shr)。注意這些要與邏輯運算指令區分開。其中左右移位就是將運算子左側的運算元的二進位制形式移動右側運算元指定的位數,例如mov    ax,1   shl   3就相當與mov    ax,8

5.表示式中使用操作符

可用的操作符有high,low,length,size,offset,seg,type,width,mask。具體功能就不說了,但要注意操作符的優先順序比+,—要高。

二.位址表示式

是間接給出了運算元,這就沒什麼說的了。與數值表示式不同,位址表示式是給出儲存器運算元的位址,而不是直接給出數值,也就是間接給出了運算元,這就沒什麼說的了。

80x86組合語言學習筆記(四)

這次總結一下組合語言中的變數和標號 首先,變數和標號均表示儲存單元,也就是某個位址,但不同的是,變數表示的儲存單元用來儲存數值,而標號表示的單元則是用來儲存 由此可以推斷,變數應該指向ds,標號應該指向cs。舉個例子 count db 5 其中db就是變數 start mov ax,1234h 其中...

80X86學習筆記 組合語言的語句

1.語句的種類 指令語句和偽指令語句兩類,指令語句有著與其對應的機器指令,偽指令語句沒有與其對應的機器指令,只是指示匯程式設計序如何彙編源程式,包括符號的定義,變數的定義,段的定義。2.語句格式指令語句和偽指令語句的格式相似,都由四部分組成。格式 標號 指令助記符 運算元 注釋 偽指令語句格式 名字...

80x86組合語言 分類統計

組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...