DOS-Windows汇编语言程序设计-第2章-第6节-硬指令和伪指令.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《DOS-Windows汇编语言程序设计-第2章-第6节-硬指令和伪指令.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DOS Windows 汇编语言 程序设计 指令
- 资源描述:
-
1、教学重点学习了8086硬指令,接着介绍MASM基本的伪指令。重点掌握:程序的格式、开发方法参数的表达、变量的定义变量和标号的属性硬指令和伪指令使CPU产生动作、并在程序执行时才处理的语句,就是我们刚刚学习的处理器指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等n伪指令与具体的处理器类型无关,但与汇编程序的版本有关 本课程采用微软宏汇编程序本课程采用微软宏汇编程序 MASM 6.11汇编语言程序的开发n本节从汇编语言程序的语句格式出发,给出第一个示范性的汇编语言源程序,并演示汇编语言程序的过程:编辑 汇编 连接 调试n即汇编语言程序
2、的开发方法语句格式 执行性语句由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:标号:硬指令助记符 操作数,操作数;注释 说明性语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:名字 伪指令助记符 参数,参数,;注释MOV CX,0;传送指令,具有2个操作数DELAY:NOP;空操作指令,没有操作数,带有标号LOOP DELAY;循环指令,标号DELAY说明转移位置BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址汇编语言语句实例汇编语言语句实例标号、名字与标识符n标号是反映硬指令位置(
3、逻辑地址)的标识符,后跟一个冒号分隔n名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有一个冒号n标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写n一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字保留字n保留字(Reserved Word)是汇编程序已经利用的标识符,主要有:o硬指令助记符例如:MOV、ADDo伪指令助记符例如:DB、EQUo操作符例如:OFFSET、PTRo寄存器名例如:AX、CSo预定义符号例如:data助记符n硬指令助记
4、符可以是任何一条处理器指令,也可以是一条宏指令n伪指令助记符将在本节学习n定义字节数据和字符串的DB就是伪指令操作数与参数n处理器指令的操作数可以是立即数、寄存器和存储单元n伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔注释n语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性n必要时,一个语句行也可以由分号开始作为阶段性注释n汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理分隔符n语句的4个组成部分要用分隔符分开n标号后用冒号,注释前用分号n操作数之间和参数之间使用逗号分隔n其他部分通常采用空格或制表符n多个空格和制表符的作用与一个相同nMASM支持
5、续行符“”汇编语言源程序的组成原则n完整的汇编语言源程序由段组成n一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列n需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点n所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内n通常,程序还需要一个堆栈段汇编语言源程序n源程序分别用两种格式书写v第一种格式从MASM 5.0开始支持n简化段定义格式v第二种格式MASM 5.0以前就具有n完整段定义格式Hello,Everybody!程序功能程序功能;test1.asm(文件名).model small;定义
6、程序的存储模式.stack;定义堆栈段.data;定义数据段stringdb Hello,Everybody!,0dh,0ah,$;在数据段定义要显示的字符串.code;定义代码段.startup;程序起始点,建立DS、SSmov dx,offset string;指定字符串mov ah,9int 21h;利用功能调用显示信息.exit 0;程序结束点,返回DOSend;汇编结束例例1a1a:简化段定义:简化段定义格式格式;SampleA.ASM.model small.stack.data.;在数据段定义数据.code.startup;(注1).;在代码段填入指令序列.exit 0;(注2)
7、.;子程序代码end;(注3)简化段定义格式简化段定义格式 MASM 6.x支持;test2.asm(文件名)stacksegment stack;定义堆栈段dw 512 dup(?);堆栈段有512字(1024字节)空间stackends;堆栈段结束datasegment;定义数据段stringdb Hello,Everybody!,0dh,0ah,$dataendscodesegment code;定义代码段assume cs:code,ds:data,ss:stackstart:mov ax,data;建立DS段地址mov ds,ax例例1b1b:完整段定义:完整段定义格式格式mov d
8、x,offset stringmov ah,9int 21hmov ax,4c00hint 21h;利用功能调用返回DOScodeends;代码段结束end start;汇编结束,同时指明程序起始点例例1b1b:完整段定义:完整段定义格式格式汇编语言程序的开发过程编辑编辑文本编辑器,如文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇编汇编汇编程序,如汇编程序,如 ML.EXE目标模块:文件名目标模块:文件名.obj连接连接连接程序,如连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调试调试调试程序,如调试程序,如 DEBUG.EXE应用程序应用程
9、序错误错误错误错误错误错误错误错误开发过程1:源程序的编辑源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:DOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDIT test1.asm开发过程2:源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM 6.x提供的汇编程序是ML.EXE:ML/c test1.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(TEST1.obj);否则MASM将给出相应的错误信息这时应根据错误信息,重新编辑修改源程序后,再进行汇编开发过程
10、3:目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK test1.obj如果没有严重错误,LINK将生成一个可执行文件(test1.exe);否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件汇编和连接的依次自动实现ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行ML test1.asm汇编程序ML.EXE可带其他参数,常用该命令除产生模块文件test1.obj和可执行文件test1.exe外,还将生成列表文件test1.lst列表文件是一种文本文件,含有源程序和目标代码,对我们
11、学习汇编语言程序设计和发现错误很有用。采用/Sg选项,将在列表文件中得到有些伪指令相应的硬指令开发过程4:可执行程序的调试经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:test1操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误采用DEBUG.EXE调试程序:DEBUG test1.exe2.3.1 参数、变量和标号n详细讨论汇编语言程序语句主要部分 参数 变量名 标号n并引出相关的伪指令和操作符n本节重点掌握:n常数的表达、n变量定义伪指令DB/DW/DD、n地址操作符和类型操作符一、数值型参数n在源程序语句格式的
12、4个组成部分中,参数是指令的操作对象(在学习硬指令时被称为操作数),参数之间用逗号分隔n参数根据指令不同可以没有,可以有1个、2个或多个n汇编语言程序中,指令参数有数值型,它的主要形式是常数和数值表达式;n硬指令的操作数有立即数;立即数就要用数值型参数表达1、常数n常数(常量)表示一个固定的数值n它又分成多种形式:(1)十进制常数(2)十六进制常数(3)二进制常数(4)八进制常数(5)字符串常数(6)符号常数十进制常数n由0 9数字组成,以字母D或d结尾n缺省情况下,后缀D或d可以省略n汇编语言大小写不敏感,D和d通用n例如:100、255D十六进制常数n由09、AF组成,以字母H或h结尾n以
13、字母AF开头的十六进制数,前面要用0表达,以避免与其他符号混淆n汇编语言大小写不敏感,H和h 通用n例如:64H、0FFh、0B800H二进制常数n由0或1两个数字组成,以字母B或b结尾n汇编语言大小写不敏感,B和b通用n例如:01101100B八进制常数n由0 7数字组成,以字母Q或q结尾n汇编语言大小写不敏感,Q和 q 通用n例如:144Qn各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数MASM提供基数控制.RADIX伪指令可以改变默认进制,其格式是:.RADIX n 字符串常数n用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值n例如:d=64
14、HAB=4142HHello,Everybody!符号常数利用一个标识符表达的一个数值MASM提供等价机制,用于常量定义符号定义伪指令:n等价EQU伪指令符号名 EQU 数值表达式符号名 EQU n等号=伪指令符号名=数值表达式常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性2、数值表达式n数值表达式一般是指由运算符连接的各种常数所构成的表达式n汇编程序在汇编过程中计算表达式,最终得到一个数值n程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性nMASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator)运算符n算术运算符+-*
15、/MODn逻辑运算符AND OR XOR NOTn移位运算符SHL SHRn关系运算符EQ NE GT LT GE LEn高低分离符HIGH LOW HIGHWORD LOWWORD算术运算符n实现加、减、乘、除、取余的算术运算mov ax,3*4+5;等价于 mov ax,17n其中MOD也称为取模,它产生除法之后的余数,如19 mod 7=5n加+和减-运算符还可以用于地址表达式n除加、减外,其他运算符的参数必须是整数逻辑运算符n实现按位相与、相或、异或、求反的逻辑运算or al,03h AND 45h;等价于 or al,01h移位运算符n实现对数值的左移、右移的逻辑操作;移入低位或高位
16、的是0n格式为:数值表达式 SHL/SHR 移位次数mov al,0101b SHL(2*2);等价于 mov al,01010000b关系运算符n用于比较和测试符号数值nMASM用0FFFFH(补码-1)表示条件为真nMASM用0000H表示条件为假mov bx,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30);当PORT5时,汇编结果为mov bx,20;否则,汇编结果为mov bx,30高低分离符n取数值的高半部分或低半部分nHIGH、LOW从一个字数值或符号常量中得到高、低字节mov ah,HIGH 8765h;等价于mov ah,87hn从MASM 6.0
17、引入的HIGHWORD、LOWWORD取一个符号常量(不能是其他常数)的高字或低字部分dd_value equ 0ffff1234h;定义一个符号常量mov ax,LOWWORD dd_value;等价于mov ax,1234h操作符的优先级1()LENGTH SIZE WIDTH MASK2PTR OFFSET SEG TPYE THIS :3HIGE LOW4*/MOD SHL SHR5+-6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT 建议采用圆括号“()”显式表达,它可以极大地提高程序的可阅读性地址型参数n汇编语言程序中,指令参数还有地址型,它的主要形
18、式是标号和名字(变量名、段名、过程名等)n硬指令的操作数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达二、变量定义伪指令n变量定义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化变量名 伪指令助记符 初值表 变量定义伪指令最常使用变量定义伪指令最常使用变量名n变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址n变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址n设置变量名是为了方便存取它指示的存储单元初值表n初值表是用逗号分隔的参数n主要由数值常数、表达式或?、DUP组成?表示初值不确定,即未
19、赋初值;DUP表示重复初值DUP的格式为:重复次数 DUP(重复参数)变量定义伪指令助记符n变量定义伪指令根据申请的主存空间单位分类nDB定义字节伪指令nDW定义字伪指令nDD定义双字伪指令nDF定义3字伪指令nDQ定义4字伪指令nDT定义10字节伪指令n还有定位伪指令定义字节单元伪指令DBDB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值初值表中每个数据一定是字节量(Byte),存放一个8位数据:可以是0255的无符号数 或是128127带符号数 也可以是字符串常数datasegment;数据段Xdb a,-5db 2 dup(100),?Ydb ABCdataends字节单元
20、定义字节单元定义实例实例mov al,X;此处X表示它的第1个数据,故ALadec X+1;对X为始的第2个数据减1,故成为-6mov Y,al;现在Y这个字符串成为 aBC字节变量的应用字节变量的应用定义字单元伪指令DWDW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:一个段地址一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数datasegment;数据段countdw 8000h,?,ABmaxint equ 64hnumber dw maxintarraydw m
21、axint dup(0)dataends字单元定义字单元定义实例实例字变量和字常量的定义:WNUMEQU 5678H;定义WNUM为常量COUNT DW 20H;定义COUNT变量,假设在数据段的偏移地址为10H字变量和字常量的应用:MOV AX,BX+SI+WNUM;MOV AX,BX+SI+5678HMOV AX,COUNT;MOV AX,0010HMOV AX,SI+COUNT;MOV AX,COUNTSI;MOV AX,SI+10HLEA BX,COUNT;LEA BX,0010HMOV BX,OFFSET COUNT;MOV BX,0010H字变量和字常量字变量和字常量定义双字单元伪
展开阅读全文