汇编语言——数据处理 (1)(第三章)

一、变量

程序运行中随之发生变化的结果 保存在可读可写的主存空间中。

变量需要实现定义才能使用,变量表达主存数据即存储器操作数

1、申请存储空间并且进行存储单元初始化

变量名 变量定义伪指令 初值表

【变量定义伪指令】BYTE WORD DWORD FWORD QWORD TBYTE
                字节   字  双字        四个字    
“?”表示初值不确定即未赋初值

复制操作符 DUP

复制次数 DUP(重复参数)

2、变量定位

“ORG”参数控制存放的偏移地址

org 100h 在偏移地址100h处安排

3.地址操作符

[] 括起来的表达式作为存储器地址指针

$ 返回当前偏移地址

OFFSET 变量名  返回变量名所在段的偏移地址

SEG 变量名  返回段基地址

4.类型操作符

类型名 PTR 变量名  将变量名按照指定的类型使用

TYPE 变量名  返回占用字节空间的字量数值  

LENGTHOF 变量名  返回整个变量的数据项数

SIZEOF 变量名  返回整个变量占用字节数

二、数据传送类指令

除标志寄存器传送指令外,均不影响标志位

❀学习指令的注意事项

1.指令的功能

2.指令支持的寻址方式

3.指令对标志的影响

4.指令执行前必须预设的参数、隐含使用的寄存器

1.通用传送指令

mov 目的操作数 源操作数

并非任意传送;双操作数必须类型一致;操作数有明确的类型;双操作数不允许都是主存存储单元; 

2.堆栈操作指令

PUSH  数据压入堆栈

POP  数据弹出堆栈

ss指向堆栈段起始位置        ESP指定栈顶

栈顶位于低地址处,数据进入堆栈ESP减小,数据弹出ESP增大

push src

1.ESP=ESP-4
2.SS:[ESP]=src


pop dest

1.dest=ss:[ESP]
2.ESP=ESp+4

将源操作数(立即数、通用寄存器、段寄存器、存储器操作数)传送到当前栈顶

以双字或者字为单位操作ESP-4或者ESP-2

3.换码指令——XLAT

用来实现编码的快速转换

初始条件:在数据段建立一个转换表table,将该表的首地址加载给bx,在al中加载要转换的代码。根据对应关系,将al中的编码适当转化以使与表格中的换码对应,然后执行指令XLAT table

换码指令执行后:将al寄存器的内容转换为目标代码

 4.地址传送指令

LEA r16/r32,mem

//r16/r32 <—— mem的有效地址EA(不需要类型一致)

LEA指令类似的地址操作符OFFSET:

        LEA指令在执行的过程中计算出偏移地址,而OFFSET操作符在汇编阶段取得变量的偏移地址,无需计算执行速度更快。

        LEA指令能获取汇编阶段无法确定的偏移地址

;数据段

dvar  dword  41424344h

;代码段

    mov eax, dvar    //eax=41424344h
    
    lea esi, dvar    //esi指向dvar

    mov ebx, [esi]    //ebx=41424344h

    mov edi, offset dvar    //edi指向dvar

    mov ecx, [edi]    //ecx=41424344h

    lea edx, [esi+edi*4+100h]    //edx=esi+edi*4+100h    offset无法获取

5.算数运算指令

1.加法指令

ADD    加法指令

ADC    带进位加法指令

INC    增量指令

除INC不影响进位标志CF以外,其他指令按定义影响全部状态标志位

ADD dest,src    //加法:dest=dest+src


寄存器与立即数、寄存器、存储器的加法

存储单元与立即数、寄存器的加法
ADC dest, src    //dest=dest+src+CF

用于与ADD指令相结合实现多精度的加法

1.先将两个操作数的低32为相加(ADD)

2.再将高位部分、并将进位加到高位(ADC)

——————————————————————————————————————

mov eax, dword ptr qvar1

add eax, dword ptr qvar2

mov edx, dword ptr qvar1+4

adc adx, dword ptr qvar1+4
只有一个操作数,用于计数器和地址指针的调整

不影响进位CF标志

INC reg/mem    // reg/mem++

2.减法指令

SUB    减法指令

SBB    带借位减法指令

DEC    减量指令

NEG    求补指令

CMP    比较指令

除DEC不影响CF标志外其他按定义影响全部状态标志位

SUB dest, src    //dest=dest-src

寄存器与立即数、寄存器、存储单元的减法

存储单元与立即数、寄存器的减法
SBB dest, src    //dest=dest-src-CF

用于与SUB指令相结合实现多精度数的减法

1.先将两个操作数的低32位相减(SUB)

2.然后减高位部分,并减去借位(SBB)
DEC reg/mem    // reg/mem--

用于计数器和地址指针的调整

不影响进位CF标志
NEG reg/mem    // reg/mem=0-reg/mem

对标志的影响与零做减法的SUB指令一样

用于求补码或由补码求其绝对值

————————————————————————————————————
mov ax,0ff64h
neg al	;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1
sub al,9dh	;AX=FFFFH,OF=0,SF=1,ZF=0,PF=1,CF=1
neg ax	;AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1
dec al	;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1
neg ax	;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=0
CMP dest, src

将目的操作数减去元操作数,差值不回送操作数,按照减法结果影响状态标志位

根据标志位的状态获知两个操作数的大小关系

3.乘法指令

指令类型操作数组合及其功能举例

无符号数乘法

MUL src

AX=AL×r8/m8

DX.AX=AX×r16/m16

EDX.EAX=EAX×r32/m32

mul bl

imul bx

mul dvar

有符号数乘法

IMUL src

双操作数乘法

IMUL dest, src

r16=r16×r16/m16/i8/i16

r32=r32×r32/m32/i8/i32

imul eax,10

imul ebx, ecx

三操作数乘法

IMUL dest,src,imm

r16=r16/m16*i8/i16

r32=r32/m32*i8/i32

imul ax,bx,-2

imul eax,dword ptr [esi+8],5

续  汇编语言——数据处理 (2)(第三章)【看我主页里找】

作为笔记使用分开来写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值