32位汇编语言——表达式与操作符.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EQ NE GT LT GE LE
NOT

AND
OR XOR
2018/9/14
16
地址表达式

地址表达式是计算存 储单元地址的表达式, 它可由标号、变量名 和由括号括起来的基 址或变址寄存器组成。 其计算结果表示一个 存储单元的地址,而 不是该存储单元的值。
B1
DB DB
10H, 11H, 12H 'ABCD' 1234H, 5678H
2018/9/14
12
关系运算符
用于比较和测试符号数值 MASM用0FFFFH(补码
-1)表示条 件为真,用0000H表示条件为假
mov bx,((PORT LT 5) AND 20) OR ((PORT GE 5)AND 30)
;当PORT<5时,汇编结果为mov bx,20 ;否则,汇编结果为mov bx,30

2018/9/14 8
运算符
算术运算符:+ - * / MOD 移位运算符:SHL SHR 逻辑运算符:AND OR NOT XOR 关系运算符:EQ NE GT LT GE LE 高低分离符:HIGH LOW HIGHWORD LOWWORD

2018/9/14
9
算术运算符
实现加、减、乘、除、取余的算术运 mov ax,3*4+5 ;等价于 mov ax,17 MOD也称为取模,它产生除法之后的余数 19 mod 7 = 5 加 + 和减 - 运算符还可以用于地址表达式 除加、减外,其他运算符的参数应是整数
2018/9/14
4
全局变量的初始化

全局变量在定义中既可以指定初值,也可以只用问号预留 空间 在 .data?段中,只能用问号预留空间,因为 .data?不能 指定初始值。 实际运行的时候,未初始化的值是0。
100 dup (1,2) ; 一组字,以0001,0002,0001,0002,…的 ; 顺序在内存中重复100遍,一共是200个字。 1024 dup (?) ; 1 024字节的缓冲区
2018/9/14
Hale Waihona Puke Baidu
7
数值表达式
数值表达式一般是指由运算符连接的各种 常数所构成的表达式 汇编程序在汇编过程中计算表达式,最终 得到一个数值 程序运行之前,就已经计算出了表达式; 所以,程序运行速度没有变慢,但增强程 序的可读性 MASM对除伪指令外各种汇编时处理的指 令统称为操作符(Operator)
表达式与操作符
宋军 计算机学院信息安全系 songjun@cug.edu.cn
2018/9/14 1
主要内容

汇编语言开发环境
MASM32

汇编语言程序结构
汇编语言的语句格式 汇编语言程序格式

MASM伪指令
2018/9/14
2
变量

类型:字节型、字与双字、多字节,结构、枚举 存储:全局变量、局部变量
2018/9/14
14
其它操作符
类型属性操作符:TYPE 长度属性操作符:LENGTH 容量属性:SIZE 强制属性操作符:PTR 存储单元别名操作符:THIS

2018/9/14
15
运算符与操作符的优先级
() <> [] · LENGTH SIZE

PTR OFFSET SEG TPYE THIS HIGE LOW * / MOD SHL SHR + -
定义全局变 量的时候类 型才可以用 缩写
2018/9/14
3
全局变量

全局变量的作用域是整个程序,Win32汇编的全局变量定 义在 .data或 .data?段内,可以同时定义变量的类型和长 度,格式是:
变量名 变量名 类型 类型 初始值1,初始值2,…… 重复数量 dup (初始值1,初始值2,……)
2018/9/14
6
局部变量的定义
local

变量名1[[重复数量]][:类型],变量名2[[重复数量]][:类型]……
local伪指令必须紧接在子程序定义的伪指令proc后、其 他指令开始前 Win32汇编默认的类型是dword,如果定义dword类型的 局部变量,则类型可以省略。 当定义数组的时候,可以 [ ] 括号括起来,不能使用定义 全局变量的dup伪指令。 局部变量不能和已定义的全局变量同名。 在不同的子程序中可以有同名的局部变量。 局部变量的起始值是随机的,是其他子程序执行后在堆栈 里留下的垃圾
W1
DW
mov al, B1 mov al, B1+3 mov ax, W1+1
2018/9/14
13
高低分离符

取数值的高半部分或低半部分 HIGH、LOW从一个字数值或符号常量中得到高、 低字节
mov ah,HIGH 8765h ;等价于mov ah,87h

从MASM 6.0引入的HIGHWORD、LOWWORD 取一个符号常量(不能是其他常数)的高字或低 字部分
dd_value equ 0ffff1234h ;定义一个符号常量 mov ax,LOWWORD dd_value ;等价于mov ax,1234h
word_Buffer dw szBuffer byte
; 在byte类型变量的定义中,用引号定义字符串和数值定义的方法混用
szText db 'Hello,world!',0dh,0ah,'Hello again',0dh,0ah,0
2018/9/14
5
局部变量



两个以上子程序都要用到的数 据才被定义为全局变量统一放 在数据段中,仅在子程序内部 使用的变量则放在堆栈中 在进入子程序的时候,通过修 改堆栈指针esp来预留出需要的 空间,在用ret指令返回主程序 之前,同样通过恢复esp丢弃这 些空间 空间是临时分配的,所以无法 定义含有初始化值的变量,对 局部变量的初始化一般在子程 序中由指令完成。

2018/9/14
10
逻辑运算符

实现按位相与、相或、异或、求反的逻辑 运算 or al,03h AND 45h ;等价于 or al,01h
47H AND 0FH,NOT 56H 计算结果分别为:7和0A9H
2018/9/14
11
移位运算符

实现对数值的左移、右移的逻辑操作;移 入低位或高位的是0 格式为: 数值表达式 SHL/SHR 移位次数 mov al, 0101b SHL (2*2) ;等价于 mov al,01010000b
相关文档
最新文档