組合語言常量

2021-09-24 20:43:15 字數 2316 閱讀 3989

常量(constant)是程式中使用的乙個確定數值,在彙編階段就可以確定,直接編碼於指令**中,不是儲存在儲存器中可變的變數,因為是編碼在指令中的量,和指令一起儲存了,所以不用單獨開闢主存空間,所以也就沒法動態改變它了,這也正是高階語言常量無法修改的原因。

整數常量(integer literal)(又稱為整型常量(integer constant))由乙個可選前置符號、乙個或多個數字,以及乙個指明其基數的可選基數字元構成:

digits [radix]

由此,比如 26 就是乙個有效的整數常量。它沒有基數,所以假設其是十進位制形式。如果想要表示十六進製制數 26,就將其寫為 26h。同樣,數字 1101 可以被看做是十進位制值,除非在其末尾新增「b」,使其成為 1101b (二進位制)。下表列出了可能的基數值:

h十六進製制

r編碼實數

q/o八進位制

t十進位制(備用)

d十進位制

y二進位制(備用)

b二進位制 

下面這些整數常量宣告了各種基數。每行都有注釋:

26         ;十進位制  26d        ;十進位制  11010011b  ;二進位制  42q        ;八進位制  42o        ;八進位制  1ah        ;十六進製制  0a3h       ;十六進製制
以字母開頭的十六進製制數必須加個前置 0,以防彙編器將其解釋為識別符號。

整型常量表示式 (constant integer expression) 是一種算術表示式,它包含了整數常量和算術運算子。每個表示式的計算結果必須是乙個整數,並可用 32 位 (從 0 到 ffffffffh) 來存放。

下表列出了算術運算子,並按照從高 (1) 到低 (4) 的順序給出了它們的優先順序。對整型常量表示式而言很重要的是,要意識到它們只在彙編時計算。這裡將它們簡稱為 整數表示式。

運算子名稱

優先順序()

圓括號1

+,-一元加、減

2*, /

乘、除3

mod取模

3+, –

加、減4

運算子優先順序 (operator precedence) 是指,當乙個表示式包含兩個或多個運算子時,這些操作的執行順序。下面是一些表示式和它們的執行順序:

4 + 5 * 2       ;乘法,加法  12 - 1 mod 5    ;取模,減法  -5 + 2          ;一元減法,加法  (4 + 2)  *  6   ;加法,乘法
下面給出了一些有效表示式和它們的值:

表示式值

16/5

3-(3+4) * (6-1 )

-35-3+4*6- 1

2025 mod 3

1實數常量(real number literal)(又稱為浮點數常量(floating-point literal))用於表示十進位制實數和編碼(十六進製制)實數。十進位制實數包含乙個可選符號,其後跟隨乙個整數,乙個十進位制小數點,乙個可選的表示小數部分的整數,和乙個可選的指數:

[sign]integer.[integer] [exponent]

符號和指數的格式如下:

sign               

exponent        einteger

下面是一些有效的十進位制實數:

2.+3.0

-44.2e+05

26.e5

至少需要乙個數字和乙個十進位制小數點。

編碼實數(encoded real)表示的是十六進製制實數,用 ieee 浮點數格式表示短實數。比如,十進位制數 +1.0 用二進位制表示為:

0011 1111 1000 0000 0000 0000 0000 0000

在組合語言中,同樣的值可以編碼為短實數:

3f800000r

字元常量 (character literal) 是指,用單引號或雙引號包含的乙個字元。彙編器在記憶體中儲存的是該字元二進位制 ascii 碼的數值。例如:

'a'"d"

表明字元常量在內部儲存為整數,使用的是 ascii 編碼序列。因此,當編寫字元常量「a」時,它在記憶體中存放的形式為數字 65 ( 或 41h)。

字串常量 (string literal) 是用單引號或雙引號包含的乙個字元 ( 含空格符 ) 序列:

'abc'

'x'"good night, gracie"

'40961

巢狀引號也是被允許的,使用方法如下例所示:

"this isn't a test"

'say "good night," gracie'

和字元常量以整數形式存放一樣,字串常量在記憶體中的儲存形式為整數位元組數值串行。例如,字串常量「abcd」就包含四個位元組 41h、42h、43h、44h。

組合語言常量

常量 constant 是程式中使用的乙個確定數值,在彙編階段就可以確定,直接編碼於指令 中,不是儲存在儲存器中可變的變數,因為是編碼在指令中的量,和指令一起儲存了,所以不用單獨開闢主存空間,所以也就沒法動態改變它了,這也正是高階語言常量無法修改的原因。整數常量 integer literal 又稱...

組合語言 AT T組合語言

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

組合語言 彙編指令

功能 用來進行資料傳輸。以 mov a,b 為例,相當於a b。具有以下形式 mov 暫存器,資料 mov 暫存器,暫存器 mov 暫存器,記憶體單元 mov 記憶體單元,暫存器 mov 段暫存器,暫存器 功能 用來做加法。以 add a,b 為例,相當於a a b。具有的形式,和 mov 一樣。功...