数据类型与数据传送指令

数据类型与数据传送指令

数据类型、数据传送指令、间接寻址

一、数据类型

数据类型的基本特征是以数据为的数目度量的大小,其他特征主要是为了方便程序员记忆变量中存储的数据类型,默认情况下大小写不敏感。

类型描述
BYTE8位无符号
SBYTE8位有符号
WORD16位无符号
SWORD16位有符号
DWORD32位无符号
SDWORD32位有符号
FWORD48位整数
QWORD64位整数
TBYTE80位整数
REAL432位短实数
REAL864位长实数
REAL1080位扩展实数

遗留数据定义伪指令

类型描述
DB8位整数
DW16位整数
DD32位整数或实数
DQ64位整数或实数
DT定义10字节

数据定义语句:

[变量名]  数据定义伪指令 初始值[,初始值]...

有多个初始值的话,用逗号隔开;未初始化,用?代替初始值。

bigArr DWORD 500 DUP(?)

二、数据传送指令

指令中的操作数的描述及其表述

1、操作数类型:

  • 立即操作数(immediate)

  • 寄存器操作数(register)

  • 内存操作数(memory)

操作数描述
r88位通用寄存器:
r1616位通用寄存器:
r3232位通用寄存器:
reg任意的通用寄存器
sreg16位段寄存器:
imm8位、16位或32位立即数
imm88位立即数(字节)
imm1616位立即数(字)
imm3232位立即数(双字)
r/m88位操作数(可以是8位通用寄存器或内存字节)
r/m1616位操作数(可以是16位通用寄存器或内存字节)
r/m3232位操作数(可以是32位通用寄存器或内存字节)
mem8位、16位或32位操作数

2、基本命令

mov destination,source 从源操作数向目的操作数幅值数据

movzx(move with zero-extend)零扩展传送,将源操作数的内容复制到目的操作数中,并将该值零扩展至16位或32位。只能用于无符号整数,目的操作数只能是寄存器。

movezx r32 r/m8
movezx r32 r/m16
movezx r16 r/m8

movsx(move with sign-extend)符号扩展传送,将源操作数的内容复制到目的操作数中,并将该符号零扩展至16位或32位。只能用于有符号整数,目的操作数只能是寄存器。

movesx r32 r/m8
movesx r32 r/m16
movesx r16 r/m8

LAHF:将ELFAGS寄存器的低字节复制到AH寄存器,无操作数

SAHF:将AH寄存器的值复制到ELFAGS寄存器的低字节,无操作数

XCHG:交换两个操作数的值,不接受立即数操作数

XCHG reg,reg
XCHG reg,mem
XCHG mem.reg

直接偏移操作数:在变量名称后加上一个偏移值,可以创建直接偏移操作数,来访问没有显式标号的内存地址。

arrayW WORD 100h,200h,300h
mov ax [arrayW+2];AX = 200H

3、加法和减法

INC/DEC:从操作数中加1或减1

INC reg/mem
DEC reg/mem

ADD:将尺寸相同的源操作数和目的操作数相加,结果保存在目的操作数中

ADD 目的操作数,源操作数

SUB:将尺寸相同的源操作数和目的操作数相加,结果保存在目的操作数中

SUB 目的操作数,源操作数

NEG:将数字转换成补码求相反数

NEG reg/mem

4、相关操作符和伪指令

  • OFFSET,返回变量相对于其所在段开始的偏移

  • PTR,允许重载变量的默认尺寸

  • TYPE,返回数组中每个元素的大小(字节)

  • LENGTH,返回数组内元素的数目

  • SIZEOF,返回数组初始化时占用的字节数

三、间接寻址

处理数组唯一可行的方法是用寄存器作为指针并操纵寄存器的值,这称为间接寻址。操作数使用间接寻址时,就称为间接操作数。

constant[reg]
[constant + reg]
arrayW WORD 100h,200h,300h

mov esi,0
mov al,[arrayW + esi]

mov al,arrayW[0]

比例因子

array DWORD 100h,200h,300h,400h

mov esi,3*BYTE array    ;array[3]的偏移地址
mov eax,[esi]       ;eax=400h

mov esi,3       ;下标
mov eax,array[esi*3]    ;eax=400h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值