組合語言變數三屬性詳解

2021-10-02 09:39:33 字數 878 閱讀 9105

1、段屬性

變數的段屬性也就是變數所在段的段位址。變數定義必須寫在乙個段的起止標誌之間。

在程式被調入記憶體時,每個段被作業系統安排乙個確定的段位址,在編寫程式時可以用段的名字指出某處要使用段位址,面這個段中的所有變數都統一地以這個段位址作為邏輯位址中的段位址部分。

如果在編寫程式時需要使用某個變數的段位址,一種方法是用該變數所在段的段名。取段位址的另一種方法是在變數名的前面加上保留字seg。保留字sec是偽指令,用於告訴匯程式設計序上述指令的源運算元是變數oprdi所在段的段位址,而不是變數中存放的資料。保留字seg後面加變數名構成立即定址方式。

2、偏移屬性

變數的偏移屬性也就是變數所在的段內偏移位址。偏移位址表示段內某一位置到段起始位址的距離,偏移位址為0表示就在段的起始處。乙個段中可以定義多個變數,每個變數在段內不同位置佔據一定的記憶體空間,到段起點的距離也就不一樣,所以乙個段內的各個變數都具有不同的偏移位址。在編寫程式時,指令中使用某變數就是按照它的偏移位址到所在段中取出資料,或把資料存到相應記憶體中。如果在編寫程式時需要使用變數的偏移位址,一種方法是在變數名的前面加上保留字offset。

取偏移位址的另一種方法是在組合語言中用一條專用指令。

3、型別屬性

變數的型別屬性也就是變數的型別,變數在定義時必須用db、dw等偽指令說明型別。

說明變數的型別,一方面告訴匯程式設計序在翻譯時把該變數定義中的每個資料項用幾個位元組存放。另一方面說明該變數的使用方法。mov等雙運算元指令中的兩個運算元必須是同一種型別,匯程式設計序在翻譯時要進行型別檢查。當乙個運算元是暫存器,另乙個是變數時,兩者型別一致是正常情況。當兩者型別不同時,匯程式設計序將以暫存器的型別為準進行翻譯,並提出警告(waming);當的運算元是變數,源運算元是立即數時,以變數定義時的型別為準。

如果有必要,使用變數時可以臨時改變型別。

組合語言典型例子詳解 組合語言典型例題

典型例題 與考試題型,考試範圍相近 應用程式具有 個基本段,可執行指令應該儲存於 aa 段b 資料段c 堆疊段d 附加段2.8 位補碼f3h 要擴充套件成 位補碼應該是 d,這樣其真值才不變。a f0f3h b 00f3h c 10f3h d fff3h 3.mov ebx 8 eax 指令的目的運...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...

組合語言 變數的定義

1.什麼是變數 variable 變數可以隨著程式的執行發生變化的量,儲存在主存空間中,變數需要事先定義才能使用,變數本質上就是主存單元裡的資料,主存是可讀可寫的,所以變數可以發生改變。變數有別於常量,常量是寫在指令裡的,不佔主存空間。2.變數定義的格式變數名 偽指令助記符 變數初值表變數名 變數名...