彙編中變數及陣列的定義宣告

2021-06-09 04:27:51 字數 1254 閱讀 6689

彙編中變數及陣列的定義宣告

沒有變數的程式語言是不可思議的,它幾乎什麼都做不了(除了經典的『hello the world!』程式),畢竟有一些數值是在程式執行時隨環境的變化而變化的(在程式設計時你不可能確定它)。即使是像彙編這樣可以直接讀寫記憶體的程式也需要用到變數。但它不像其它高階語言那樣把變數分成許多態別,它是按照變數的長度來區分的,所以定義(define)變數時就用5個不同的關鍵字:db,dw,dd,dq,dt(事實上常用的只有db,dw)

db(define byte)即定義的變數佔乙個位元組的長度(也可以說把定義的變數值放入乙個位元組的記憶體空間)

如:a db 7h ;意思是將7h放入記憶體的某乙個位元組(空間)中,然後讓變數a指向這個位元組

也可以這樣:

a db 'h' ;雖然『h』是個字元但存入記憶體卻成了它對應的ascii碼48h

你也可以用db來定義陣列,如:

a db 48h, 65h, 6ch, 6ch, 6fh, 00h

b db 'hello', 0

這樣定義出來的a和b中的元素是完全相同的。

可以作如下引用:

mov al, a[3]

也可以用指標和變址暫存器(bx, si, di, bp):

mov si, 3

mov al, a[si]

如果你想定義乙個具有一系列相同元素的陣列可以用dup關鍵字,如:

c db 5 dup(9)

與下面的效果相同:

c db 9, 9, 9, 9, 9

d db 5 dup(1, 2)

相同於:

d db 1, 2, 1, 2, 1, 2, 1, 2, 1, 2

如果你想把乙個超過1位元組的值用db來定義是不可能實現的,編譯器會報錯,如:

a db 1234h ;編譯時是不能通過的,報錯資訊:cannot convert word to byte!

另外dup的第乙個運算元就是例子中的5,不能超過1020,否則會報錯:dup expansion is over 1020 chars!

以上是db的用法剩下的dw,dd,dq,dt與之大至相同,除了它們不能定義字元陣列(因為ascii碼值就是0..255,乙個位元組肯定能放下乙個字元的ascii碼值)

dw(define word)定義乙個字(兩個位元組)長度

dd(define double word)定義雙字(4個位元組)長度

dq(define quartet word)定義四字(8個位元組)長度

dt(define ten byte)定義十字節長度

PHP中陣列的定義及宣告例項

php中的陣列實際上是乙個有序對映。對映是一種把 values關聯到 keys 的型別。此型別在很多方面做了優化,因此可以把它當成真正的陣列,或列表 向量 雜湊表 是對映的一種實現 字典,集合,棧,佇列以及更多可能性。由於陣列元素的值也可以是另乙個陣列,樹形結構和多維陣列也是允許的。作用 1 管理和...

c c 中變數的宣告和定義

不管是函式還是變數的宣告,都是為了告訴編譯器我要使用這個變數或者函式了,用於型別檢查。在定義的時候編譯器是不會分配任何記憶體的,比如下面的函式 void func 當函式執行到int a 的時候,這是乙個宣告,編譯器不會為其分配記憶體空間。當執行到a 0 這是乙個定義,編譯器才會為其分配記憶體空間。...

C中變數的宣告和定義

變數定義就是告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表。變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際...