饭后温柔

汉堡与老干妈同嚼 有可乐味
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

汇编知识点-数据定义

Posted on 2013-08-02 16:18  饭后温柔  阅读(1051)  评论(0编辑  收藏  举报

定义内部数据类型

  类型

    BYTE,SBYTE,WORD,SWORD,DWORD,SDWORD,

    FWORD(48位整数,保护模式下用作远指针)

    QWORD(64位整数,8字节), TBYTE(80位整数,10字节)

    REAL4(32位,IEEE短实数),REAL8,REAL10

    举例: val5 DWORD 12345678h

    数据定义语句要指定至少一个初始值,多个初始值以逗号隔开.若不想初始化,可以用符号"?"作为初始值.

    

    定义数组:  

    array1 BYTE 10, 20, 30, 40

         BYTE 50, 60, 70, 80                   ;可定义多行

       array2 BYTE 10, 32, 41h, 00100010b        ;不同基数可混用

       array3 BYTE 0Ah, 20h, 'A', 22h          ;不同基数,字符,字符串可混用                      

    定义字符串

     greeting1 BYTE "Good afternoon", 0           ;可以空字符结尾 

              greeting2 BYTE "this is the first"        ;可定义多行

           BYTE "string i created.", 0dh, 0ah,     ;换行符/r/n --> 0dh, 0ah

                             BYTE "ok, end.", 0         ; 结束 

     

    DUP操作符.

    未多个数据项分配空间

    array1 BYTE 20 DUP(0)    ; 20字节, 全部等于0

    array2 BYTE 20 DUP(?)    ; 20字节, 未初始化 

    array4 BYTE 3   DUP("stack")   ; 15字节, "stackstackstack"

    

    小尾和大尾顺序(little endian, big endian)

    小尾:最低有效字节存储在地址值最小的地址单元.   

      12345678h的存储:  0000: 78, 0001: 56, 0002: 34, 0001: 12

 

    未初始化数据的声明

    ".DATA?"伪指令用于声明未初始化数据.定义大块数据时非常有用.减小编译体积.

    .data?

    bigArray DOWRD 5000 DUP(?)       ; 20000字节.未初始化.  

    

            编译前计算数组和字符串大小: '$', 当前地址值,byte单位

    list BYTE 10, 20, 30, 40

    listSize = ($ - list)

 

    EQU伪指令,

    用于编译阶段定义.equ不可重复定义.

    PI EQU <3.1415926>

    printMe EQU <"my name is fei">

    val1 EQU <100h + 200h>  

    val2 WORD val1

 

    TEXTEQU文本宏伪指令

    count TEXTEQU 5

    move TEXTEQU <mov>

    setAL TEXTEQU <move, al, count>

    setAL将被汇编成:mov, al, 5