Intel汇编语言程序设计学习-第三章 汇编语言基础-下

本文详细介绍了Intel汇编语言中关于数据的定义,包括内部数据类型、数据定义语句、符号常量以及实地址模式程序设计的基础知识。通过实例解释了如何定义和使用BYTE、WORD、DWORD、QWORD、TBYTE等数据类型,并讨论了符号常量的创建和使用,包括等号伪指令、EQU伪指令和TEXTEQU伪指令的用途。此外,还涉及了实地址模式下的程序设计,以及在转换32位程序为实地址模式程序时需要注意的修改。
摘要由CSDN通过智能技术生成

3.4  定义数据

3.4.1  内部数据类型

    MASM定义了多种内部数据类型,每种数据类型都描述了该模型的变量和表达式的取值集合。数据类型的基本特征是以数据位的数目量的大小:8,16,32,,48,64,80位。其他特征(如有符号、指针、浮点等)主要是为了方便程序员记忆变量中存储的数据的类型。例如,声明为DOWRD变量逻辑上存储的是一个32位整数、一个32位的浮点数或一个32位的指针。MASM汇编器默认情况下是大小写不敏感的,因此伪指令如DWORD可写成dword,Dword.dWord等大小写混合的格式。

下表中,除了最后三种之外,其余的所有的数据类型都是整数数据类型。表中IEEE符号是指IEEE委员会发布的标准实数格式。

 

3.4.2  数据定义语句

      在数据定义语句中使用BYTE(定义字节)和SBYTE(定义有符号字节)伪指令,可以为一个或多个有符号及无符号字节分配存储空间,每个初始值必须是8位整数表达式或者字符常量。例如:

    value1  BYTE   ‘A’    ;字符常量

    value2  BYTE    0    ;最小无符号字节常量

    value3  BYTE   255   ;最大无符号字节常量

    value4  SBYTE  -128   ;最小有符号字节常量

    value5  SBYTE  +127  ;最大有符号字节常量

    使用问号代替初始值可以定义未初始化的变量,这表示将由可执行指令在运行时为变量动态赋值:

value6 BYTE ?

    可选的变量名是一个标号,标记该变量相对其所在段开始的偏移。例如,假设value1位于数据段的偏移0000出并占用1个字节的存储空间,那么value2将位于段内偏移值0001的地方:

value1 BYTE 10h

value2 BYTE 20h

遗留的DB伪指令可以定义有符号或无符号的8位的变量:

val1 DB  255   ;无符号字节

val2 DB  -128   ;有符号字节

多个初始值

如果一条数据定义语句中有多个初始值,那么标号(名字)仅仅代表第一个初始值的偏移。在下列中,假设list位于偏移0000处,那么值10将位于0000处值20位于0001处,一次类推。

list BYTE 10,20,30,40

下图以字节序列的形式显示了list的定义情况:

 

并非所有的数据定义都需要标号(名字),如果想继续以list开始的字节数组,就可以在随后的行上接着定义其他数据:

list BYTE 10,20,30,40

     BYTE 50,60,70,80

     BYTE 81,82,83,84

    在单条数据定义语句中,初始值可使用不同的基数,字符和字符串课可以自由混用。在下面例子中,list1list2的内容是相同的。


list1 BYTE 10 ,32 ,41h ,00100010b

list2 BYTE 0Ah,20h,’A’ ,22h

定义字符串

要想定义字符串,应将一组字符用单引号或双引号括起来。最常见的字符串是以空字符(也称为NULL,0)结尾的字符串,C/C++,Java程序使用这种类型的字符串:

    greeting1 BYTE "Good afternoon",0

    greeting2 BYTE 'Good night',0

每个字节都占用一个字节,对于前面提到过的数据定义中多个初始值必须以逗号分隔的规则,字符串是一个例外。如果没有这种例外,就不得不这样定义greeting1:

greeting1 BYTE ‘G’,’o’,’o’....etc.

这样太冗长乏味了!

字符串可以占用多行,而无需为每一行都提供一个标号,如下例所示:

 

    十六进制字节0Dh0Ah也称为CR/LF(回车换行符)或航结束字符,在向标准输出设备上写的时候,回车换行将光标移至下面一行左右开始处。

续行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值