這次總結一下組合語言中的變數和標號
首先,變數和標號均表示儲存單元,也就是某個位址,但不同的是,變數表示的儲存單元用來儲存數值,而標號表示的單元則是用來儲存**。由此可以推斷,變數應該指向ds,標號應該指向cs。
舉個例子:count db 5 ;其中db就是變數
start: mov ax,[1234h] ;其中start就是標號
標號的定義很簡單,就不多說了,這裡總結一下變數的定義:
一.變數的定義
1.定義位元組變數
定義位元組變數是使用db偽指令
例:bdata1 db 55h
其中bdata1指向儲存數值55h的位址,並且是以1位元組為儲存、偏移單位為。同時,變數的定義後面可以有不止乙個資料。
例:bdata2 db 55h,23h,53h
bdata3 db 12h
同時,也可以用這條指令定義字串
例如:string db 'hello!'
2.定義字變數和雙字變數
定義字變數是使用dw偽指令,定義雙字變數是使用dd偽指令。
這兩條指令與db類似,只不過dw是以字(2位元組)為儲存、偏移單位;dd是以雙字(也就是4位元組)為儲存、偏移單位。
3.定義沒有初始值的變數
與定義普通變數類似,只是在資料的位置用『?』代替
例:bdata4 db 55h,23h,65h,?,?
這樣,就僅僅給變數分配儲存單元,但其中並沒有任何資料。
4.定義其他型別變數
使用dq和dt分別定義8位元組和10位元組的變數。
5.快速定義
有時我們想在一段儲存空間內填入若干個相同的資料,則可以使用迴圈操作符來快速定義變數
例:buffer dw 8 dup (55h)
其中8是要填入的資料的個數,括號內則是要填入的資料,這條語句執行完後,從buffer所指向的儲存空間開始再偏移7個字的空間內均儲存的是0055h。
二.獲取、指定變數和標號的屬性
變數和標號的屬性包括:
1)所在儲存單元的段值
2)段內偏移值
3)型別,變數的型別有:位元組(byte)、字(word)、雙字(dword);標號的型別有:段內標號(far)、段間標號(near)。
1.獲取屬性
獲取屬性使用的是析值偽指令,這些指令有:
seg 變數名、標號名 ;返回段值
offset 變數名、標號名 ;返回偏移值
type 變數名、標號名 ;返回型別
length 變數名 ;返回利用dup定義的變數中元素的個數
size 變數名 ;返回利用dup定義的變數所佔的位元組數
其中,返回的型別使用數值表示的,對應如下:
位元組 1
字 2
雙字 4
段內標號 -1
段間標號 -2
2.指定屬性
指定屬性使用的是屬性操作偽指令,一共有兩個:ptr和this
1)ptr
組合語言中,我們要明確指出要訪問的儲存器運算元的型別,ptr就是用於臨時性的強制指定變數或標號的型別,這與c++中變數的強制轉換類似。
例:mov word ptr [si],1h ;這條語句就是以字為單位訪問1h
這條語句可以用來特定訪問某個變數的某一部分。
例:word1 dw 2255h
mov ax,byte ptr word1
在這個程式段中,是將變數word1的低位,也就是55h送到ax中。
2)this
這條指令返回乙個指定型別的儲存器運算元,而不為它分配儲存空間,但保留此運算元的段值和偏移值,作為下乙個即將分配的單元的段值和偏移值,也就是第乙個運算元的數值是無意義的,只是需要其型別、段值和偏移值。這條指令主要是用在符號定義語句(後面的知識)中,來定義乙個具有型別、段值和偏移值的表示儲存器運算元的符號。
例:my_byte equ this byte
my_word dw ?
這段程式執行後,my_byte和my_word擁有相同的段值和偏移值,my_byte是對my_word的低位元組的訪問,若定義my_word時用的是db,則對兩個變數的訪問是一樣的。
80x86組合語言學習筆記(三)
今天上午開始看組合語言程式設計初步,這一章分為 組合語言語句 變數和標號 常用偽指令語句和源程式組織 順序程式設計 分支程式設計 迴圈程式設計這幾塊,這次總結一下組合語言的語句。首先組合語言的語句分為指令語句 偽指令語句和巨集指令語句,其中指令語句是可以被譯成機器指令的語句,例如將某運算元從乙個暫存...
80X86學習筆記 組合語言的語句
1.語句的種類 指令語句和偽指令語句兩類,指令語句有著與其對應的機器指令,偽指令語句沒有與其對應的機器指令,只是指示匯程式設計序如何彙編源程式,包括符號的定義,變數的定義,段的定義。2.語句格式指令語句和偽指令語句的格式相似,都由四部分組成。格式 標號 指令助記符 運算元 注釋 偽指令語句格式 名字...
80x86組合語言 分類統計
組合語言的程式設計題!急 有100個學生成績,存放在以data為首址的位元組儲存單元中。試統計其中90 含90 以上的人數,60 90 含60 之間的人數,60以下的人數,分別存入max,middle,min三個變數中。15 分鐘前 做而論道 十七級 最快回答 assume ds qq,cs cc ...