彙編(1)——常量和變數
-
常量
確定的數值
1.彙編階段就可以確定,直接編碼於指令程式碼中
2.不儲存在儲存器中多種常量表達形式
常數: 以後綴字母(D、H、B)區分,十進位制可不加,以A~F開頭的要加前導0
十進位制數 100, 255D 十六進位制數 64H, 0FFH, 0B800H 二進位制數 01101100B 字元和字串:以單引號或者雙引號括起來,每個字元的數值是其ASCII值(單引號雙引號沒有本質區別,字元和字串也沒有)
符號常量:使用識別符號表示一個數值
符號名 = 數值表示式 STD_INPUT_HANDLE = -10 符號名 equ 數值表示式
符號名 equ <字串>NULL equ 0
WriteConsole equ <WriteConsoleA>數值表示式:+ 加 - 減 * 乘 / 除
-
資料表達程式
.00000000 64 64 64 64 64
相對地址和機器指令(16進位制)
const1 byte 100,100d,01100100b,64hg,'d'
定義變數的彙編語句定義字串是每個字元的ASCII碼
.00000011 30 31 32...39 61 62 63 78 79 7A 41 42 43 58 59 5A
const4 byte '0123456789','abcxyz','ABCXYZ'
數值0DH(回車符)和0AH(換行符),前導零不能省略,數字“0”用於字串結尾
.00000027 0D 0A 00
crlf byte 0dh,0ah,0
表示式定義const6的每個引數,實質還是常量
0000002E 10 56 15 EB
const6 byte 4*4,34h+34,67h-52h,52h-67h
mov eax,offset const4
讓eax指向const4
call dispmsg
顯示字串,從eax指示的位置開始顯示出來
執行結果:0123456789abcxyzABCXYZ(回車換行字量(8位)資料的變數:byte (相當於char
msg byte 'Hello',13,10,0
msg是字串Hello,然後回車換行結束
每個元素段一個位元組
? 表示留空
bvar byte 5 dup ('$')
dup可巢狀
無符號有符號數都行
允許不定義變數名,表示沒有指向那個資料空間但仍然分配了空間字量(16位)資料的變數:word 字,2個位元組(相當於short
定義16位有符號整數(065535),和16位無符號整數(-3276832767)
靠+1,+2來遍歷
wvar2 word 1,-1,38,-38,38h,-38h
1和-1,位元組量01H和FFH,字量是0001H和FFFFH
負數-38H,位元組量補碼:C8H(=[1]00H-38H),字量補碼:FFC8H(=[1]0000H-0038H)
wvar3 word ?
WVAR3無初值(被填入0)佔用16位(2個位元組)空間
允許不定義變數名wvar1 word 0,-32768,65535 wvar2 word ? minint = 10 wvar3 word 5 dup(minint)
字量(32位)資料的變數:deword 雙字,4個位元組(相當於long
定義32位有符號(-232~232-1),和32位無符號(0~2^32-1)
dvar2 dword 1,-1,38,-38,38h,-38h
1和-1,位元組量01H和FFH,字量是00000001H和FFFFFFFFH
負數-38H,位元組量補碼:C8H(=[1]00H-38H),字量補碼:FFFFFFC8H
wvar3 word ?
WVAR3無初值(被填入0)佔用16位(2個位元組)空間
允許不定義變數名dvar1 dword 0,80000000h,0ffffffffh dvar2 dword ? array dword 5 dup(0)
-
什麼是變數
變數
1.隨程式執行會發生變化的數
2.儲存在可讀可寫的主存空間變數的實質是主存單元的資料,因而可以改變
事先定義
具有屬性以方便使用