位汇编语言——表达式与操作符.ppt_第1页
位汇编语言——表达式与操作符.ppt_第2页
位汇编语言——表达式与操作符.ppt_第3页
位汇编语言——表达式与操作符.ppt_第4页
位汇编语言——表达式与操作符.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/4/26,1,宋军 计算机学院信息安全系 ,表达式与操作符,2,2019/4/26,主要内容,汇编语言开发环境 MASM32 汇编语言程序结构 汇编语言的语句格式 汇编语言程序格式 MASM伪指令,3,2019/4/26,变量,类型:字节型、字与双字、多字节,结构、枚举 存储:全局变量、局部变量,定义全局变量的时候类型才可以用缩写,4,2019/4/26,全局变量,全局变量的作用域是整个程序,Win32汇编的全局变量定义在 .data或 .data?段内,可以同时定义变量的类型和长度,格式是:,变量名 类型 初始值1,初始值2, 变量名 类型 重复数量 dup (初始值1,初始值2,),5,2019/4/26,全局变量的初始化,全局变量在定义中既可以指定初值,也可以只用问号预留空间 在 .data?段中,只能用问号预留空间,因为 .data?不能指定初始值。 实际运行的时候,未初始化的值是0。,word_Buffer dw 100 dup (1,2) ; 一组字,以0001,0002,0001,0002,的 ; 顺序在内存中重复100遍,一共是200个字。 szBuffer byte 1024 dup (?) ; 1 024字节的缓冲区 ; 在byte类型变量的定义中,用引号定义字符串和数值定义的方法混用 szText db Hello,world!,0dh,0ah,Hello again,0dh,0ah,0,6,2019/4/26,局部变量,两个以上子程序都要用到的数据才被定义为全局变量统一放在数据段中,仅在子程序内部使用的变量则放在堆栈中 在进入子程序的时候,通过修改堆栈指针esp来预留出需要的空间,在用ret指令返回主程序之前,同样通过恢复esp丢弃这些空间 空间是临时分配的,所以无法定义含有初始化值的变量,对局部变量的初始化一般在子程序中由指令完成。,7,2019/4/26,局部变量的定义,local伪指令必须紧接在子程序定义的伪指令proc后、其他指令开始前 Win32汇编默认的类型是dword,如果定义dword类型的局部变量,则类型可以省略。 当定义数组的时候,可以 括号括起来,不能使用定义全局变量的dup伪指令。 局部变量不能和已定义的全局变量同名。 在不同的子程序中可以有同名的局部变量。 局部变量的起始值是随机的,是其他子程序执行后在堆栈里留下的垃圾,local 变量名1重复数量:类型,变量名2重复数量:类型,8,2019/4/26,数值表达式,数值表达式一般是指由运算符连接的各种常数所构成的表达式 汇编程序在汇编过程中计算表达式,最终得到一个数值 程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性 MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator),9,2019/4/26,运算符,算术运算符:+ - * / MOD 移位运算符:SHL SHR 逻辑运算符:AND OR NOT XOR 关系运算符:EQ NE GT LT GE LE 高低分离符:HIGH LOW HIGHWORD LOWWORD,10,2019/4/26,算术运算符,实现加、减、乘、除、取余的算术运 mov ax,3*4+5 ;等价于 mov ax,17 MOD也称为取模,它产生除法之后的余数 19 mod 7 = 5 加 + 和减 - 运算符还可以用于地址表达式 除加、减外,其他运算符的参数应是整数,11,2019/4/26,逻辑运算符,实现按位相与、相或、异或、求反的逻辑运算 or al,03h AND 45h ;等价于 or al,01h,47H AND 0FH,NOT 56H 计算结果分别为:7和0A9H,12,2019/4/26,移位运算符,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0 格式为: 数值表达式 SHL/SHR 移位次数 mov al, 0101b SHL (2*2) ;等价于 mov al,01010000b,13,2019/4/26,关系运算符,用于比较和测试符号数值 MASM用0FFFFH(补码 -1)表示条件为真,用0000H表示条件为假,mov bx,(PORT LT 5) AND 20) OR (PORT GE 5)AND 30) ;当PORT5时,汇编结果为mov bx,20 ;否则,汇编结果为mov bx,30,14,2019/4/26,高低分离符,取数值的高半部分或低半部分 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,15,2019/4/26,其它操作符,类型属性操作符:TYPE 长度属性操作符:LENGTH 容量属性:SIZE 强制属性操作符:PTR 存储单元别名操作符:THIS,16,2019/4/26,运算符与操作符的优先级,() LENGTH SIZE PTR OFFSET SEG TPYE THIS HIGE LOW * / MOD SHL SHR + - EQ NE GT LT GE LE NOT AND OR XOR,高 低,17,2019/4/26,地址表达式,地址表达式是计算存储单元地址的表达式,它可由标号、变量名和由括号括起来的基址或变址寄存器组成。其计算结果表示一个存储单元的地址,而不是该存储单元的值。,B1,B1+3,W1+1,mov al, B1 mov al, B1+3 mov ax, W1+1,B1+3,18,2019/4/26,地址操作符,取得名字或标号的段地址和偏移地址两个属性 将括起的表达式值作为存储器地址 $ 当前偏移地址 OFFSET 名字/标号 返回名字或标号的偏移地址 : 采用指定的段地址寄存器 SEG 名字/标号 返回名字或标号的段基址,19,2019/4/26,.386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib .data B1 BYTE 01h, 02h DB ABCD W1 WORD 1234h, 5678h .code start: mov al, B1 mov al, B1+1 mov ax, W1+1 mov eax, offset W1 mov eax, $ invoke ExitProcess, NULL end start,.text:00401000 public start .text:00401000 start proc near .text:00401000 mov al, byte_403000 .text:00401005 mov al, byte_403001 .text:0040100A mov ax, word_403007 .text:00401010 mov eax, offset unk_403006 .text:00401015 .text:00401015 loc_401015: .text:00401015 mov eax, offset loc_401015 .text:0040101A push 0 ; uExitCode .text:0040101C call ExitProcess .text:0040101C start endp .data:00403000 byte_403000 db 1 .data:00403001 byte_403001 db 2 .data:00403002 db 41

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论