学习进行中
--和数据相关的操作符和伪指令:
(1)OFFSET操作符返回数据标号的偏移地址。偏移代表标号距数据段开始的距离。单位字节。
(2)ALIGN伪指令将变量的位置按字节、字、双字或段边界对齐,ALIGN 边界值(1、2、4、16)如:
bval BYTE ? ;00404000
ALIGN 2
wval WORD ? ;00404002
CPU处理存储在偶数地址处的数据比处理存储在奇数地址处的数据快。
(3)PTR操作符重载操作数声明的默认尺寸。mov ax WORD PTR myDouble
(4)TYPE操作符返回按字节计算的变量的单个元素的大小。
(5)LENGTHOF操作符计算数组中元素的数目,元素由出现在同一行的值定义。当数组的定义中使用嵌套DUP定义时,LENGTHOF将返回两个计数器的乘积。
array WORD 5 DUP(3 DUP(?))
LENGTHOF array ;5*3
(6)SIZEOF操作符返回值等于LENGTHOF和TYPE返回值的乘积。
(7)LABEL伪指令允许插入一个标号并赋予其尺寸属性而无需分配任何实际的存储空间。常见用法是为数据段内其后定义的变量提供一个别名以及一个不同的尺寸属性。如
.data
val16 LABLE WORD
val32 DWORD 12345678h
.code
mov ax,val16 ;AX = 5678h
mov dx,[val16+2] ;AX = 1234h
val16是名为val32的存储地址的一个别名。
--间接寻址:用寄存器作为指针并操作寄存器的值。简介操作数:操作数使用间接寻址时。
保护模式:间接操作数用方括号括起来的任意的32位通用寄存器(EAX,EBX,ECX,EDX,ESI,EDI,EBP和ESP),寄存器里面存放着数据的偏移。
实地址模式:使用16位的寄存器存放变量的偏移地址,只能用SI,DI,BX,BP寄存器,应尽量避免用BP,因为BP常用来寻址堆栈而不是数据段。
通用保护故障GP:在保护模式下,如果有效地址指向程序数据段之外的区域,CPU就有可能会产生GP。mov ax,[esi] ESI未初时话。实地址模式下不会产生GP
--inc BYTE PTR [esi] ;指明了操作数的尺寸大小
inc [esi] ;错误
--变址操作数把常量和寄存器相加以得到一个有效地址,任何32位通用寄存器都可以作为变址寄存器。
constant[reg]
[constant+reg]
mov esi,3 ;下标
mov eax,array[esi*TYPE array] ; 用TYPE操作符
--指针:包含其他变量地址的变量称为指针变量或指针,操纵数组和数据结构非常有用,ptr DWORD array or ptr DWORD OFFSET array
--TYPDEF操作符允许创建用户自定义的类型。
PBYTE TYPEDEF PTR BYTE ;创建指向字节的指针
ptr PBYTE array ;指向数组