1. 程式人生 > 實用技巧 >彙編(1)——常量和變數

彙編(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 ('$')

    定義5個相同的“$”
    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.儲存在可讀可寫的主存空間

    變數的實質是主存單元的資料,因而可以改變

    事先定義
    具有屬性以方便使用