欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    新版汇编语言程序设计-钱晓捷03.ppt

    • 资源ID:18721393       资源大小:711KB        全文页数:113页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    新版汇编语言程序设计-钱晓捷03.ppt

    1、第 3 章,教学重点,第2章学习了8086硬指令,第3章介绍MASM基本的伪指令。第3章重点掌握:程序的格式、开发方法参数的表达、变量的定义变量和标号的属性,硬指令和伪指令,硬指令使CPU产生动作、并在程序执行时才处理的语句,就是第2章学习的处理器指令伪指令(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等伪指令与具体的处理器类型无关,但与汇编程序的版本有关,本课程采用微软宏汇编程序 MASM 6.15,3.1 汇编语言程序的开发,本节从汇编语言程序的语句格式出发,给出第一个示范性的汇编语言源程序,并演示汇编语言程序的过程:编辑 汇编

    2、连接 调试即汇编语言程序的开发方法,3.1.1 汇编语言程序的语句格式,执行性语句由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:标号:硬指令助记符 操作数,操作数;注释,说明性语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:名字 伪指令助记符 参数,参数,;注释,MOV CX,0;传送指令,具有2个操作数DELAY:NOP;空操作指令,没有操作数,带有标号LOOP DELAY;循环指令,标号DELAY说明转移位置BUFFERDB 1,2,3,4,5,6,7;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址,汇编语言语句实例,标

    3、号、名字与标识符,标号是反映硬指令位置(逻辑地址)的标识符,后跟一个冒号分隔名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有一个冒号标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字,保留字,保留字(Reserved Word)是汇编程序已经利用的标识符,主要有:硬指令助记符例如:MOV、ADD伪指令助记符例如:DB、EQU操作符例如:OFFSET、PTR寄存器名例如:AX、CS预定义符号例如:

    4、data,汇编语言大小写不敏感,助记符,硬指令助记符可以是任何一条处理器指令,也可以是一条宏指令伪指令助记符将在本章和下章学习前一章引入的定义字节数据和字符串的DB就是伪指令,操作数与参数,处理器指令的操作数可以是立即数、寄存器和存储单元,伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔,注释,语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理,分隔符,语句的4个组成部分要用分隔符分开标号后用冒号,注释前用分号操作数之间和参数之间使用逗号分隔其他部分通常采用

    5、空格或制表符多个空格和制表符的作用与一个相同MASM支持续行符“”,3.1.2 汇编语言的程序格式,完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内通常,程序还需要一个堆栈段,汇编语言源程序,源程序分别用两种格式书写第一种格式从MASM 5.0开始支持简化段定义格式第二种格式MASM 5.0以前就具有完整段定义格式,Hello,Everybody!,;lt301a.asm

    6、(文件名).model small;定义程序的存储模式.stack;定义堆栈段.data;定义数据段stringdb Hello,Everybody!,0dh,0ah,$;在数据段定义要显示的字符串.code;定义代码段.startup;程序起始点,建立DS、SSmov dx,offset string;指定字符串mov ah,9int 21h;利用功能调用显示信息.exit 0;程序结束点,返回DOSend;汇编结束,例3.1a:简化段定义格式,抽象,;SampleA.ASM.model small.stack.data.;在数据段定义数据.code.startup.;在代码段填入指令序列.

    7、exit 0.;子程序代码end,简化段定义格式 MASM 6.x支持,;SampleC.ASM.model small.stack.data.;在数据段定义数据.codestart:mov ax,datamov ds,ax.;在代码段填入指令序列mov ax,4c00hint 21h.;子程序代码end start,简化段定义格式 MASM 5.x支持,;lt301b.asm(文件名)stacksegment stack;定义堆栈段dw 512 dup(?);堆栈段有512字(1024字节)空间stackends;堆栈段结束datasegment;定义数据段stringdb Hello,Ev

    8、erybody!,0dh,0ah,$dataendscodesegment code;定义代码段assume cs:code,ds:data,ss:stackstart:mov ax,data;建立DS段地址mov ds,ax,例3.1b:完整段定义格式,mov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21h;利用功能调用返回DOScodeends;代码段结束end start;汇编结束,同时指明程序起始点,例3.1b:完整段定义格式,抽象,;SampleB.ASMstacksegment stackdw 512 dup(?)stacken

    9、dsdatasegment.;在数据段定义数据dataendscodesegment codeassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,ax.;在代码段填入指令序列mov ax,4c00hint 21h.;子程序代码codeendsend start,完整段定义格式 MASM 5.x支持,3.1.3 汇编语言程序的开发过程,源程序:文件名.asm,目标模块:文件名.obj,可执行文件:文件名.exe,应用程序,错误,开发过程1:源程序的编辑,源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:D

    10、OS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDIT lt301a.asm,开发过程2:源程序的汇编,汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM 6.x提供的汇编程序是ML.EXE:ML/c lt301a.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(lt301a.obj);否则MASM将给出相应的错误信息这时应根据错误信息,重新编辑修改源程序后,再进行汇编,开发过程3:目标模块的连接,连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK lt301a.ob

    11、j如果没有严重错误,LINK将生成一个可执行文件(lt301a.exe);否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件,汇编和连接过程可以依次自动完成,汇编和连接的依次自动实现,ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行ML lt301a.asm汇编程序ML.EXE可带其他参数,常用ML/Fl/Sg lt301a.asm该命令除产生模块文件lt301a.obj和可执行文件lt301a.exe外,还将生成列表文件lt301a.lst列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用。采用/

    12、Sg选项,将在列表文件中得到有些伪指令相应的硬指令,开发过程4:可执行程序的调试,经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:lt301a操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误,3.2 参数、变量和标号,本节详细讨论汇编语言程序语句的主要部分:参数 变量名 标号并引出相关的伪指令和操作符本节重点掌握:常数的表达、变量定义伪指令DB/DW/DD、地址操作符和类型操作符,3.2.1 数值型参数,在源程序语句格式的4个组成部分中,参数是指令的操作对象(学习硬指令时被称为操作数),参数之间用逗号分隔参数根据指令

    13、不同可以没有,可以有1个、2个或多个汇编语言程序中,指令参数有数值型,它的主要形式是常数和数值表达式;硬指令的操作数有立即数;立即数就要用数值型参数表达,1.常数,常数(常量)表示一个固定的数值它又分成多种形式:(1)十进制常数(2)十六进制常数(3)二进制常数(4)八进制常数(5)字符串常数(6)符号常数,十进制常数,由0 9数字组成,以字母D或d结尾缺省情况下,后缀D或d可以省略汇编语言大小写不敏感,D和d通用例如:100、255D,十六进制常数,由09、AF组成,以字母H或h结尾以字母AF开头的十六进制数,前面要用0表达,以避免与其他符号混淆汇编语言大小写不敏感,H和h 通用例如:64H

    14、、0FFh、0B800H,二进制常数,由0或1两个数字组成,以字母B或b结尾汇编语言大小写不敏感,B和b通用例如:01101100B,字符串常数,用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值例如:d=64HAB=4142HHello,Everybody!,符号常数,利用一个标识符表达的一个数值MASM提供等价机制,用于常量定义符号定义伪指令:等价EQU伪指令符号名 EQU 数值表达式符号名 EQU 等号=伪指令符号名=数值表达式常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性,实例,符号定义DosWriteChar equ 2Carr

    15、iageReturn=13CallDOS equ 符号应用(左边程序段等价右侧的符号形式)mov ah,2;mov ah,DosWriteCharmov dl,13;mov dl,CarriageReturnint 21h;CallDOS,符号常数实例,2.数值表达式,数值表达式一般是指由运算符连接的各种常数所构成的表达式汇编程序在汇编过程中计算表达式,最终得到一个数值程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator),运算符,算术运算符+-*/MOD逻辑运算符AND OR XOR NOT移

    16、位运算符SHL SHR关系运算符EQ NE GT LT GE LE高低分离符HIGH LOW HIGHWORD LOWWORD,算术运算符,实现加、减、乘、除、取余的算术运算mov ax,3*4+5;等价于 mov ax,17其中MOD也称为取模,它产生除法之后的余数,如19 mod 7=5加+和减-运算符还可以用于地址表达式除加、减外,其他运算符的参数必须是整数,逻辑运算符,实现按位相与、相或、异或、求反的逻辑运算or al,03h AND 45h;等价于 or al,01h,移位运算符,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0格式为:数值表达式 SHL/SHR 移位次数mov

    17、 al,0101b SHL(2*2);等价于 mov al,01010000b,关系运算符,用于比较和测试符号数值MASM用0FFFFH(补码-1)表示条件为真MASM用0000H表示条件为假mov bx,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30);当PORT5时,汇编结果为mov bx,20;否则,汇编结果为mov bx,30,高低分离符,取数值的高半部分或低半部分HIGH、LOW从一个字数值或符号常量中得到高、低字节mov ah,HIGH 8765h;等价于mov ah,87h从MASM 6.0引入的HIGHWORD、LOWWORD取一个符号常量(不能是其

    18、他常数)的高字或低字部分dd_value equ 0ffff1234h;定义一个符号常量mov ax,LOWWORD dd_value;等价于mov ax,1234h,地址型参数,汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等)硬指令的操作数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达,3.2.2 变量定义伪指令,变量定义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化变量名 伪指令助记符 初值表,变量定义伪指令最常使用,变量名,变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为

    19、符号地址变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址设置变量名是为了方便存取它指示的存储单元,初值表,初值表是用逗号分隔的参数主要由数值常数、表达式或?、DUP组成?表示初值不确定,即未赋初值;DUP表示重复初值DUP的格式为:重复次数 DUP(重复参数),变量定义伪指令助记符,变量定义伪指令根据申请的主存空间单位分类DB定义字节伪指令DW定义字伪指令DD定义双字伪指令DF定义3字伪指令DQ定义4字伪指令DT定义10字节伪指令还有定位伪指令,定义字节单元伪指令DB,DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值初值表中每个数据一定是字节量(Byte),

    20、存放一个8位数据:可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,datasegment;数据段Xdb a,-5db 2 dup(100),?Ydb ABCdataends,字节单元定义实例,mov al,X;此处X表示它的第1个数据,故ALadec X+1;对X为始的第2个数据减1,故成为-6mov Y,al;现在Y这个字符串成为 aBC,字节变量的应用,定义字单元伪指令DW,DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:一个段地址一个偏移地址 两个字符 065535之间的无符

    21、号数 3276832767之间的带符号数,datasegment;数据段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)dataends,字单元定义实例,字变量和字常量的定义:WNUMEQU 5678H;定义WNUM为常量COUNTDW 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

    22、,SI+10HLEA BX,COUNT;LEA BX,0010HMOV BX,OFFSET COUNT;MOV BX,0010H,字变量和字常量,定义双字单元伪指令DD,DD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值初值表中每个数据是一个32位的双字量(Double Word):可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针varddDD 0,?,12345678hfarpointDD 00400078h,其他数据单元定义伪指令,定义3字伪指令DF用于为一个或多个6字节变量分配空间及初始化6字节常用在32位CPU中表

    23、示一个48位远指针(16位段选择器:32位偏移地址)定义4字伪指令DQ用于为一个或多个8字节变量分配空间及初始化8字节变量可以表达一个64位整数定义10字节伪指令DT用于为一个或多个10字节变量分配空间及初始化10字节变量可以表达扩展精度浮点数,例3.2:数据定义综合应用1/2,.model small.stack.databvarDB 16wvarDW 4*3dvarDD 4294967295;2321qvarDQ?DB 1,2,3,4,5tvarDT 2345;定义了BCD码2345HabcDB a,b,cmsgDB Hello,13,10,$bbufDB 12 DUP(month)dbu

    24、fDD 25 DUP(?)CALLDOSEQU,例3.2:数据定义综合应用2/2,.code.startupmov bl,bvarmov ax,word ptr dvar0mov dx,word ptr dvar2;取双字到DX.AXmov dx,offset msgmov ah,09hCALLDOS.exit 0end,例3.3:数据复制和显示1/2,.model small.stack.datasource db 33h,34h,35h,36h;定义4个字符数据target db 80 dup(?);分配数据空间420=80.code.startupmov ax,dsmov es,ax;d

    25、ata也作为附加段cldmov si,offset sourcemov di,offset targetmov cx,80,例3.3:数据复制和显示2/2,rep movsb;串传送mov si,0;显示mov bx,offset targetagain:mov dl,bx+si mov ah,2int 21hinc sicmp si,80jb again.exit 0end,定位伪指令,定位伪指令控制数据的偏移地址ORG 参数ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址:ORG 100h;从100h处安排数据或程序ORG$+10;使偏移地址加10,即跳过10个字节空间MASM中,符

    26、号“$”表示当前偏移地址值EVEN;从偶地址开始ALIGN n;从n的整数倍地址开始,3.2.3 变量和标号的属性,地址属性标号和名字对应存储单元的逻辑地址逻辑地址包括:段地址和偏移地址 类型属性标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等,地址操作符,取得名字或标号的段地址和偏移地址两个属性 将括起的表达式作为存储器地址$当前偏移地址:采用指定的段地址寄存器OFFSET 名字/标号返回名字或标号的偏移地址SEG 名字/标号返回名字或标号的段地址,org$+10arraydb 45,45h.c

    27、odemov ax,seg arraymov ds,axmov bx,offset array;等价于 lea bx,arraymov cl,array+4;等效于 mov cl,array4mov ax,es:2000h,地址操作符实例,类型操作符,类型操作符对名字或标号的类型属性进行有关设置类型名 PTR 名字/标号THIS 类型名SHORT 标号TYPE 名字/标号SIZEOF 变量名LENGTHOF 变量名,PTR操作符,类型名 PTR 名字/标号,PTR操作符使名字或标号具有指定的类型类型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FAR

    28、,还可以是由STRUCT、RECORD、UNION以及TYPEDEF定义的类型mov al,byte ptr w_var;w_var是一个字变量jmp far ptr n_label;n_label是一个标号使用PTR操作符,可以临时改变名字或标号的类型,THIS操作符,THIS 类型名,利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型b_var equ THIS byte;按字节访问变量b_var,但与w_var的地址相同w_var dw 10 dup(0);按字访问变量w_varf_jump equ THIS far;用f_jump为段间转移(f_jump label f

    29、ar)n_jump:mov ax,w_var;用n_jump为段内近转移,但两者指向同一条指令LABEL伪指令的功能等同于“EQU THIS”,TYPE操作符,TYPE 名字/标名,返回表明名字或标号类型的一个字量数值对字节、字和双字变量依次返回1、2和4;对短、近和远转移依次返回ff01h、ff02h和ff05hmov ax,TYPE w_var;汇编结果为mov ax,2mov ax,TYPE n_jump;汇编结果为 mov ax,0ff02h(near标号)操作符SIZEOF返回整个变量占用的字节数LENGTHOF返回整个变量的数据项数(即元素数)SIZEOF LENGTHOF TYP

    30、E,.model small.stack.datav_byteequ this byte;v_byte是字节类型,与变量v_word的地址相同v_worddw 3332h,3735h;v_word是字类型的变量targetdw 5 dup(20h);分配数据空间2510字节crlfdb 0dh,0ah,$flagdb 0n_pointdw offset s_label;取得标号s_label的偏移地址,例3.4:属性及其应用1/5,例3.4:属性及其应用2/5,.code.startupmov al,byte ptr v_word;用PTR改变v_word的类型,否则类型不匹配dec almo

    31、v v_byte,al;对v_word的头一个字节操作,原为32H、现为31Hn_label:cmp flag,1jz s_label;flag单元为1转移inc flagjmp n_label;进行短转移,例3.4:属性及其应用3/5,s_label:cmp flag,2jz next;flag单元为2转移inc flagjmp n_point;段内的存储器间接寻址,转移到s_label标号处next:mov ax,type v_word;汇编结果为mov ax,2mov cx,lengthof target;汇编结果为mov cx,5,例3.4:属性及其应用4/5,mov si,offse

    32、t targetw_again:mov si,ax;对字单元操作inc si;SI指针加2inc siloop w_again;循环mov cx,sizeof target;汇编结果为 mov cx,0ahmov al,?mov di,offset targetb_again:mov di,al;对字节单元操作inc di;DI指针加1loop b_again;循环,例3.4:属性及其应用5/5,mov dx,offset v_word;显示结果:1357?mov ah,9int 21h.exit 0end,3.3 程序段的定义和属性,详述汇编语言程序格式的组成部分首先,简单了解DOS支持的e

    33、xe程序和com程序其次,重点掌握简化段定义格式的各条伪指令最后,理解完整段定义格式所包含的各种段属性,exe程序,利用程序开发工具,通常将生成EXE结构的可执行程序(扩展名为.EXE的文件)它可以有独立的代码、数据和堆栈段,还可以有多个代码段或多个数据段,程序长度可以超过64KB,执行起始处可以任意指定当DOS装入或执行一个程序时,DOS确定当时主存最低的可用地址作为该程序的装入起始点。此点以下的区域称为程序段。在程序段内偏移0处,DOS为该程序建立一个程序段前缀控制块PSP(Program Segment Prefix),它占256(=100h)个字节;而在偏移100h处才装入程序本身,内存映象,exe程序的内存映象图,com程序,COM程序是一种将代码、数据和堆栈段合一的结构紧凑的程序,所有代码、数据都在一个逻辑段内,不超过64KB在程序开发时,需要满足一定要求并采用相应参数才能正确


    注意事项

    本文(新版汇编语言程序设计-钱晓捷03.ppt)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开