欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第4章 汇编语言程序设计11.ppt

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

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

    第4章 汇编语言程序设计11.ppt

    第4章 汇编语言程序设计mov ax,12hcall displayJmp 1234h1主要内容:主要内容:汇编语言源程序的结构汇编语言语句格式伪指令功能调用汇编语言程序设计24.14.1 汇编语言源程序汇编语言源程序 (1)机器语言机器语言二进制数形式的指令和数二进制数形式的指令和数据。据。B0 64B0 64 是什么意思?这就是是什么意思?这就是机器语言机器语言。既不直。既不直观观,又不易理解和记忆又不易理解和记忆.MOV ALMOV AL,64H64H ;很容易记忆理解,这就是很容易记忆理解,这就是助记助记助记助记符符符符。(2)助记符助记符用便于记忆的英语单词表示用便于记忆的英语单词表示的指令操作码。它的指令操作码。它反映了指令的功能和主要特征反映了指令的功能和主要特征,便于人们理解和记忆。便于人们理解和记忆。3 操作数可能放在存储器中操作数可能放在存储器中,这就涉及这就涉及操作数的地址操作数的地址。程序中遇到转移指令或调用指令程序中遇到转移指令或调用指令,也需要知道转移地址也需要知道转移地址,若若采用具体地址就很不方便采用具体地址就很不方便,一旦有错,改动也很麻烦。于一旦有错,改动也很麻烦。于是人们是人们采用采用采用采用标号或符号标号或符号标号或符号标号或符号来代替来代替来代替来代替地址地址地址地址,例:例:LP1LP1LP1LP1:MOV AX,MOV AX,VARVARVARVAR LOOP LOOP LP1LP1LP1LP1 (3)汇汇编编语语言言指指令令助助记记符符,符符号号地地址址,标标号号,伪指令等语言元素的集合以及这些元素使用的规则。伪指令等语言元素的集合以及这些元素使用的规则。用汇编语言编写的程序叫用汇编语言编写的程序叫汇编语言源程序汇编语言源程序汇编语言源程序汇编语言源程序。指令除了操作码以外指令除了操作码以外指令除了操作码以外指令除了操作码以外,还有一个还有一个还有一个还有一个操作数问题操作数问题。4汇编程序汇编程序(翻译程序翻译程序)源程序的编译程序源程序的编译程序汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序 汇编源程序需翻译成机器语言汇编源程序需翻译成机器语言,变成可执行变成可执行文件文件,机器才能执行机器才能执行,这个翻译过程叫这个翻译过程叫汇编。高级语言中称该过程为高级语言中称该过程为“解释解释”或或“编译编译”。执行翻译的程序称为执行翻译的程序称为“汇编程序”。5汇编语言程序设计与执行过程汇编语言程序设计与执行过程输入汇编语言源程序输入汇编语言源程序 EDITEDIT/NOTEPAD等 源文件源文件 .ASMASM汇编汇编(编译编译)MASM/ASMMASM/ASM等 目标文件目标文件 .OBJOBJ链接链接 LINKLINK等 可执行文件可执行文件 .EXEEXE调试调试 DEBUG/TDDEBUG/TD等 最终正确的程序最终正确的程序.EXEEXE 目前都把上述的软件集成在统一的环境下,以方便用户使用。建立、编辑建立、编辑 汇编汇编 连接连接 运行运行 调试调试64.1.1 4.1.1 汇编语言源程序的结构汇编语言源程序的结构 汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由3个(或4个)逻辑段组成:数据段数据段存放数据、变量存放数据、变量 (附加数据段附加数据段存放数据、变量存放数据、变量)堆栈段堆栈段堆栈区域堆栈区域 代码段代码段存放程序指令存放程序指令7一个基本的汇编语言程序框架如下:一个基本的汇编语言程序框架如下:stackstack SEGMENT PARA SEGMENT PARA stackstack DB 100 DB 100 DUP(DUP(stackstack)stackstack ENDS ENDS datadata SEGMENT SEGMENT data data ENDS ENDS codecode SEGMENT SEGMENT ASSUME CSASSUME CS:codecode,DS,DS:datadata,ESES:datadata,SS:SS:stackstack start:start:MOV AX,MOV AX,datadata MOV DS,AX MOV DS,AX MOV ES,AX MOV ES,AX MOV AL,4CH MOV AL,4CH INT 21HINT 21H codecode ENDS ENDS END END start start 堆栈段数据段代码段真指令80000:03FF环境与代码运行环境与代码运行FFFF:0堆栈段堆栈段数据段数据段代码段代码段CS:IPDSSS:SP系统起始运行程序系统起始运行程序中断向量区中断向量区(系统专用)(系统专用)栈底最多4个活动段分段结构分段结构ES94.1.2 汇编语言的语句类型与格式汇编语言的语句有两种:汇编语言的语句有两种:汇编语言的语句有两种:汇编语言的语句有两种:指令性语句指令性语句指令性语句指令性语句由由由由8086808680868086指令助记符指令助记符指令助记符指令助记符(真指令真指令真指令真指令)构成的语句构成的语句构成的语句构成的语句指示性语句指示性语句指示性语句指示性语句由由由由伪指令伪指令伪指令伪指令构成的语句构成的语句构成的语句构成的语句指令性语句指令性语句指令性语句指令性语句的格式为:的格式为:标号标号标号标号:指令助记符指令助记符指令助记符指令助记符 目的操作数目的操作数目的操作数目的操作数 ,源操作数源操作数源操作数源操作数 ;注释注释注释注释 指示性语句指示性语句指示性语句指示性语句的格式为:的格式为:名字名字名字名字 伪指令伪指令伪指令伪指令 操作数操作数操作数操作数1,1,1,1,操作数操作数操作数操作数2,2,2,2,;注释注释注释注释 注:注:注:注:各部分之间至少要用一个各部分之间至少要用一个各部分之间至少要用一个各部分之间至少要用一个空格空格空格空格(或逗号、分号或逗号、分号或逗号、分号或逗号、分号)作为分隔符。作为分隔符。作为分隔符。作为分隔符。10 指示性语句(伪指令)由汇编程序执行执行。它。它指出汇编程序应如何对源程序进行汇编,如指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开何定义变量、分配存储单元以及指示程序开始和结束等。始和结束等。指示性语句指示性语句无无机器码指令与其机器码指令与其相对应。相对应。指令性语句(真指令)由由CPU执行执行,每一条每一条指令性语句都指令性语句都有有一条机器码指令与其对应;一条机器码指令与其对应;注意注意:指令性语句汇编时生成机器码;指示性语句汇编时不生成机器码。11语句的构成元素:语句的构成元素:1.1.标号标号标号标号指令的符号地址,用来代表指令在指令的符号地址,用来代表指令在存储器中的地址存储器中的地址。只只能出现能出现在指令性语句在指令性语句中,标号后应中,标号后应加加上冒号。上冒号。2.2.名字名字名字名字段、过程、变量或宏的名字,用来代表它们在段、过程、变量或宏的名字,用来代表它们在存储器中存储器中的地址的地址。只能出现只能出现在指示性语句在指示性语句中,名字后中,名字后不加不加冒号。冒号。n n标号与名字标号与名字统称为统称为标识符标识符一般最多由一般最多由3131个字母、数字及规个字母、数字及规定的特殊符号(如定的特殊符号(如 _ _、$、?、)组成,不能以数字开头。)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写默认情况下,汇编程序不区别标识符中的字母大小写n n一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采一个程序中,每个标识符的定义是唯一的,还不能是汇编语言采用的用的保留字保留字n n保留字保留字是汇编程序已经利用的标识符,主要有:是汇编程序已经利用的标识符,主要有:o o真指令助记符真指令助记符例如:例如:MOVMOV、ADDADDo o伪指令助记符伪指令助记符例如:例如:DBDB、EQUEQUo o操作符操作符例如:例如:OFFSETOFFSET、PTRPTRo o寄存器名寄存器名例如:例如:AXAX、CSCS123.3.指令助记符指令助记符指令助记符指令助记符80868086真指令、伪指令助记符真指令、伪指令助记符4.4.操作数操作数操作数操作数即即指令的操作对象指令的操作对象对对指令性语句指令性语句(真指令真指令)00,1 1,2 2个个对对指示性语句指示性语句(伪指令伪指令)根据需要而定根据需要而定操作数之间以逗号分隔操作数之间以逗号分隔操作数可以是:寄存器、存储单元、常数或操作数可以是:寄存器、存储单元、常数或表达式表达式 例如:例如:AXAX,DI+BX+10DI+BX+10,200200,16*8+TABLE16*8+TABLE,等等,等等13 例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二种写法要比第一种写法要好。5.5.注释注释注释注释以分号开头,可放在指令后,也可单独一行。以分号开头,可放在指令后,也可单独一行。注意注解的写法。注意注解的写法。要写指令(段)在程序中的要写指令(段)在程序中的作用作用,而不要写指令的操作。而不要写指令的操作。注释不能加程序的汇编,不生成目标程序,只为阅读方便。14汇编语言的一个实例:hello.asm datadata SEGMENT SEGMENTHello DB Hello,world!,0DH,0AHdata data ENDSENDSprogprog SEGMENT SEGMENT ASSUME CS:prog,DS:datastart:MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOSprogprog ENDS ENDS END END startstart名字标号15 4.1.3 数据项与表达式1常量常量常量常量二进制数二进制数,以以B B或或b b结尾结尾。如。如0100110101001101B B。十十进进制制数数,以以字字母母D D或或d d结结尾尾,缺缺省省情情况况下下,后后缀缀D D或或d d可以省略如可以省略如8585。十十六六进进制制数数,以以H H结结尾尾。以以字字母母A AF F开开头头的的十十六六进进制制数数,前前面面要要用用0 0表表达达,以以避避免免与与其其他他符符号号混混淆淆,如如0 0F160F160H H。字符串字符串:用:用引号括起来引号括起来的的1 1个或多个字符。个或多个字符。如如 ERROR!ERROR!,a a,汇汇 编编 时时 被被 翻翻 译译 成成 对对 应应 的的ASCIIASCII码码4 45H,52H,52H,4FH,52H,21H,61H5H,52H,52H,4FH,52H,21H,61H。数据项数据项(操作数的形式)包括常量常量、标号标号/名字名字、变量变量及表达式表达式。16有三个有三个属性:属性:段地址段地址段地址段地址:即标号所在段的段地址;:即标号所在段的段地址;偏移量偏移量偏移量偏移量:标号所代表存储单元的段内偏移地址;:标号所代表存储单元的段内偏移地址;类类类类 型型型型:NEARNEAR或或FARFAR NEARNEAR表示标号所在语句与转移指令表示标号所在语句与转移指令/调用指令在同一调用指令在同一码段内码段内,跳转时只需改变跳转时只需改变IPIP即可。即可。FAR FAR 标号所在语句与转移指令标号所在语句与转移指令/调用指令不在同一代调用指令不在同一代码段内。跳转时需改变码段内。跳转时需改变CSCS和和IPIP即可。即可。若没有对类型进行说明若没有对类型进行说明,默认为默认为NEARNEARNEARNEAR。标号标号通常作为通常作为转移指令转移指令转移指令转移指令或或CALLCALLCALLCALL指令指令指令指令的转移地址。的转移地址。2.2.标号标号/名字名字指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址指令或数据所在内存单元的符号地址如如 Start:MOV AX,data JMP/CALL Start Hello DB 06H,45H,44HPTR17变量也有三个变量也有三个属性属性:段地址段地址变量所在段的段地址变量所在段的段地址偏移量偏移量变量单元地址与段首地址之间的位移量。变量单元地址与段首地址之间的位移量。类类 型型有有BYTEBYTE、WORD WORD、DWORDDWORD三种之一。三种之一。变量变量在程序中作为在程序中作为存储器操作数存储器操作数存储器操作数存储器操作数被引用。被引用。3.变量如如 Start:MOV AX,dataPTR 变量即内存中的存储单元或数据区。变量名是存储单元(数据区)的符号地址 或 名字。18例如:例如:正确的正确的:LP1,AGAIN,NEXT,_GO,OK_1LP1,AGAIN,NEXT,_GO,OK_1 错误的错误的错误的错误的 :4M,LOOP,AAA,#HELP,+ONE4M,LOOP,AAA,#HELP,+ONE标号和变量名标号和变量名的使用规则的使用规则:组成组成:A-Z(A-Z(不分大小写不分大小写),0-9,),0-9,?._$_$不能不能以数字开头,以免与十六进制数相混。以数字开头,以免与十六进制数相混。长度长度小于小于3131个字符个字符不能与保留字不能与保留字(指令助记符、伪指令、预定义符号等指令助记符、伪指令、预定义符号等)重名重名对定义的符号不区分大小写。对定义的符号不区分大小写。19注:变量要事先定义才能使用变量类型应与指令要求的操作数类型相符。例:MOV BL,V1;要求V1应该是字节属性的变量。变量定义后,变量名只对应这个数据区的首地址,若有这个数据区有若干个数据项时,其地址要改变。指令中的操作数的段基地址不直接表示出来,是默认的。在使用变量时,其段属性应与其所指的段寄存器相符,若不相符,要加上段超越。204.表达式表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。如如 Start:MOV AX,16*8+TABLE16*8+TABLE21用于地址表达式,例:LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为:LEA SI,1003H(1)算术运算符 +、-、*、/,MODMOD用于数字表达式,例:MOV AX,4*1024 汇编后的形式为:MOV AX,4096 22注意注意:不要把不要把逻辑运算符逻辑运算符与与逻辑运算指令逻辑运算指令混淆:混淆:例:例:AND AX,AND AX,3FC0H AND 0FF00H3FC0H AND 0FF00H 汇编后源操作数被翻译为:汇编后源操作数被翻译为:3F00H3F00H,所以上述指令,所以上述指令与与 AND AX,AND AX,3F00H3F00H等价。等价。(2)逻辑运算符 ANDAND、OROR、XORXOR、NOTNOT逻辑运算符逻辑运算符只能用于只能用于数字数字表达式表达式中。中。例:例:MOV CL,MOV CL,36H AND 0FH36H AND 0FH 经汇编后:经汇编后:MOV CL,MOV CL,06H06H23例:例:MOV BX,MOV BX,PORT GT 300HPORT GT 300H 若若PORTPORT的值大于的值大于300H300H为真为真,则汇编后为:则汇编后为:MOV BX,MOV BX,0FFFFH0FFFFH 若若为假为假,则汇编后为:则汇编后为:MOV BX,MOV BX,0 0(3)关系运算符EQEQ、NENE、LTLT、GTGT、LELE、GEGE关系运算的结果是一个逻辑值:真真或假假 关系为真,结果为全1 关系为假,结果为全024(4)取地址运算符SEG、OFFSETSEGSEG:取变量取变量/标号的段地址标号的段地址OFFSETOFFSET:取变量:取变量/标号的偏移地址标号的偏移地址例:VAR DB 12HVAR DB 12H MOV BX MOV BX,OFFSET OFFSET VAR VAR;取变量;取变量VARVAR的偏移地址的偏移地址 MOV AX MOV AX,SEGSEG VAR VAR;取变量;取变量VARVAR的段地址的段地址注意注意:SEG、OFFSET只能对符号地址操作只能对符号地址操作MOV AX,SEG BXMOV BX,OFFSET SI25例:例:VAR DW 1,2,3,4,5 则则 TYPE TYPE VAR=2VAR=2 LENGTH LENGTH VAR=1VAR=1 SIZE SIZE VAR =2VAR =2(5)取值运算符TYPE、LENGTH、SIZETYPE 取取变量的类型(变量的类型(1,2,4)LENGTH 取所定义取所定义变量变量的长度的长度 (无DUP时为1,有时为DUP前面的值)SIZE 取所定义存储区的字节数取所定义存储区的字节数 (=TYPE*LENGTH)26LENGTH和和SIZE运算符的具体运算规则是:如果变量是运算符的具体运算规则是:如果变量是用重复操作符用重复操作符DUP定义的,那么运算符定义的,那么运算符LENGTH的运算的运算结果是外层结果是外层DUP的给定值的给定值(即外层重复次数),如果没(即外层重复次数),如果没有用有用DUP定义的变量,运算结果总是定义的变量,运算结果总是1。而运算符而运算符SIZE是是LENGTH和和TYPE两个运算结果的乘积。两个运算结果的乘积。【例例】取出变量占存储单元个数。取出变量占存储单元个数。DATASEGMENT A DBABCDEF BDW10DUP(1,2DUP(2)DATAENDS MOV AX,LENGTH A;1AX MOV BX,LENGTHB;10BX 27 SIZE A=LENGTH A*TYPE A=1 SIZE B=LENGTH B*TYPE B=20若BUFFER存储区是用如下伪指令定义:BUFFER DW 200 DUP(0)则:TYPE BUFFER 等于2 LENGTH BUFFER等于200 SIZE BUFFER等于40028(6)属性运算符PTRPTR用来指定地址操作数的类型。格式:PTR 类型类型 BYTE,WORD,DWORDBYTE,WORD,DWORD和和 NEAR,FAR,NEAR,FAR,SHORTSHORT BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址NEAR、FAR(SHORT?)用于描述转移、调用的目的地址29例:MOVBYTE PTRDI,0;字节类型 MOVWORD PTRDI,0;字类型 MOVDI,0B5H ;类型不定PTR也可用来进行强制类型转换例:例:STR1STR1 DW DW?;STR1 ;STR1定义为字类型定义为字类型 MOV MOVAX,STR1 ;AX,STR1 ;合法合法 MOV MOVAL,STR1 ;AL,STR1 ;非法非法 MOV AL,MOV AL,BYTE PTRBYTE PTR STR1STR1;合法合法307)其它运算符方括号“”指令中用方括号表示存储器操作数,方括号的内容表示操作数的偏移地址例:MOV AX,1000H段重设运算符“:”它跟在段寄存器名之后,表示段重设,用来指定一个存储器操作数的段属性而不管其原来的隐含的段是什么。例:MOV AX,ES:DI31在计算具有多个运算符的表达式值时,按以下规则操作:在计算具有多个运算符的表达式值时,按以下规则操作:在计算具有多个运算符的表达式值时,按以下规则操作:在计算具有多个运算符的表达式值时,按以下规则操作:优先级高的先运算,优先级低的后运算。优先级高的先运算,优先级低的后运算。优先级高的先运算,优先级低的后运算。优先级高的先运算,优先级低的后运算。当优先级相同时,按表达式中从左到右的顺序进行运算当优先级相同时,按表达式中从左到右的顺序进行运算当优先级相同时,按表达式中从左到右的顺序进行运算当优先级相同时,按表达式中从左到右的顺序进行运算 使用括号可以提高表达式运算的优先级。使用括号可以提高表达式运算的优先级。使用括号可以提高表达式运算的优先级。使用括号可以提高表达式运算的优先级。表达式中的运算符的优先级表达式中的运算符的优先级表达式中的运算符的优先级表达式中的运算符的优先级 高高高高优优优优先先先先级级级级 低低低低 1 1括号中的项,即(括号中的项,即(括号中的项,即(括号中的项,即()和)和)和)和2 2LENGTHLENGTH,SIZESIZE3 3PTRPTR,OFFSETOFFSET,SEGSEG,TYPETYPE4 4,/,MODMOD5 5+,-6 6EQEQ,NENE,L L,LELE,GTGT,GEGE7 7NOTNOT8 8ANDAND9 9OROR,XORXOR324.2 4.2 伪指令伪指令数据定义 伪指令符号定义 伪指令段定义和段寄存器指定 伪指令过程定义 伪指令结束 伪指令 由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:334.2.1 4.2.1 数据定义数据定义伪指令伪指令(变量定义变量定义)功能:用于定义变量的类型,给变量赋初值或给变量分配存储空间。数据定义伪指令的格式为:变量名变量名变量名变量名 数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令 操作数,操作数,操作数,操作数,操作数,操作数,操作数,操作数,常用的数据定义伪指令有如下几种:DB 定义字节字节 DW 定义字字 DD 定义双字双字 DQ DQ 定义定义四字四字 DT DT 定义定义十字节十字节34n变量名为用户自定义标识符,表示操作数首元素的逻辑地址;用这个符号表示地址,常称为符号地址n变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址n设置变量名是为了方便存取它指示的存储单元变量名35操作数操作数n n操作数是用逗号分隔的参数操作数是用逗号分隔的参数n n主要由数值常数、字符串、表达式或?、主要由数值常数、字符串、表达式或?、DUPDUP组成组成?表示初值不确定,即未赋初值;表示初值不确定,即未赋初值;DUPDUP表示重复初值表示重复初值DUPDUP的格式为:的格式为:重复次数重复次数 DUP(DUP(重复参数重复参数)361)1)定义字节单元伪指令定义字节单元伪指令DBDBDBDB伪指令用于分配一个或多个伪指令用于分配一个或多个字节字节单元,并可以将它们初始化为指单元,并可以将它们初始化为指定值定值初值表中每个数据一定是字节量(初值表中每个数据一定是字节量(ByteByte),),存放一个存放一个8 8位数据:位数据:n n 可以是可以是02550255的无符号数的无符号数n n 或是或是128128127127带符号数带符号数n n 也可以是也可以是字符串常数字符串常数datadatasegmentsegment;数据段数据段X Xdb a,-5db a,-5db 2 dup(100),?db 2 dup(100),?Y Ydb ABCdb ABCdatadataendsends字节单元定义实例372)2)定义字单元伪指令定义字单元伪指令DWDWDWDW伪指令用于分配一个或多个伪指令用于分配一个或多个字单元字单元,并可以将它们初始化为指,并可以将它们初始化为指定值定值初值表中每个数据一定是字量(初值表中每个数据一定是字量(WordWord),),一个字单元可用于存放任一个字单元可用于存放任何何1616位数据:位数据:n n 一个段地址一个段地址n n一个偏移地址一个偏移地址n n 两个字符两个字符n n 0 06553565535之间的无符号数之间的无符号数n n 32768327683276732767之间的带符号数之间的带符号数datadatasegmentsegment;数据段数据段countcountdwdw 8000h,?,AB 8000h,?,ABmaxintmaxintequequ 64h 64hnumbernumberdwdw maxintmaxintarrayarraydwdw maxintmaxint dup(0)dup(0)datadataendsends字单元定义实例383)3)定义双字单元伪指令定义双字单元伪指令DDDDDDDD伪指令伪指令用于分配一个或多个双字单元,并可以用于分配一个或多个双字单元,并可以将它们初始化为指定值将它们初始化为指定值初值表中每个数据是一个初值表中每个数据是一个3232位的双字量(位的双字量(Double Double WordWord):):n 可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数n 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位的偏移地址(低位字)的远指针位的偏移地址(低位字)的远指针varddvarddDD 0,?,12345678hDD 0,?,12345678hfarpointfarpointDD 00400078hDD 00400078h39例例1 1:DATA_B DATA_B DBDB 10,5,10H 10,5,10HDATA_W DATA_W DWDW 100H,-4 100H,-4DATA_D DATA_D DDDD 0FFFBH 0FFFBH汇编后的内存分配情况汇编后的内存分配情况如右图所示。如右图所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHQDATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H-4 40FFFBH0FFFBH40例例2 2:操作数可以是字符串,例如STR DB HELLO 汇编后的情况如图:STRHELLO注意注意:下面两个定义的不同之处:DBAB ;41H在低字节,42H在高字节(先A后B)DW AB ;42H在低字节,41H在高字节(先B后A)48H45H4CH4CH4FH注意注意:3个及其以上的个及其以上的字符,只能用字符,只能用DB定义定义41 操作数?用来保留存储空间,但不存入数据.例例3 3:ABC DB 0,1,2,3,4,OK,$RSV DW?,?,?,?,?,?,?,?复制操作符DUP:重复的数据可以使用复制操作符DUP,如上面RSV亦可写成:RSV DW 8 DUP(?)424.2.2 4.2.2 符号定义符号定义伪指令伪指令 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。符号定义伪指令有两种:EQU,=用EQUEQU定义的符号未清除前,不能重新定义。用”=”定义的符号可在任何时候进行重定义。二者二者均不占用存储空间,仅是给符号赋值 431 1、EQUEQU CR CR EQUEQU 0DH 0DH ;常数常数 A A EQU EQU ASC-TABLEASC-TABLE ;变量(事先已定义)变量(事先已定义)STR STR EQU EQU 64 102464 1024 ;数值表达式数值表达式 ADR ADR EQU EQU ESES:BP+DI+5 BP+DI+5 ;地址表达式地址表达式n nEQUEQU不允许对一个符号重复定义。不允许对一个符号重复定义。2 2、等号语句等号语句 =同同 EQU EQU,但可重新定义一个符号。但可重新定义一个符号。COUNT COUNT =100 100 同同 COUNT EQU 100COUNT EQU 100 CONNT CONNT=57 COUNT57 COUNT重新定义重新定义44例:例:FIVEFIVE EQUEQU 5 5 COUNT =10 10 DIST DIST =BYTE PTRSI+BP BYTE PTRSI+BP GOTO GOTO =JMP JMP MOV AX,TEN MOV CX,COUNT ADD DIST,FIVE DIST=WORD PTRSI+BP+1 ADD DIST,AX GOTO LABEL 定义定义引用引用454.2.3 4.2.3 段定义段定义伪指令伪指令汇编语言程序是按段来组织程序和数据的。和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。3/4类段:代码(程序)、数据/附加数据、堆栈段定义伪指令:SEGMENTSEGMENT、ENDSENDS定义一个段的基本格式:段的基本格式:段名段名 SEGMENT 定位类型定位类型定位类型定位类型组合方式组合方式组合方式组合方式类别类别类别类别 段名段名 ENDS46这两个伪指令总是成对出现,二者前面的段名应一致,但不能与保留字重名.SEGMENT说明了一个段的开始,ENDS说明了一个段的结束。对数据段和堆栈段,段中的语句一般是变量定义。对代码段则是指令语句。如:data SEGMENT data ENDS SEGMENT和ENDS伪指令伪指令47 SEGMENT SEGMENT语句后可以语句后可以语句后可以语句后可以带有可选参数带有可选参数带有可选参数带有可选参数,用以用以用以用以规定逻规定逻规定逻规定逻辑段的其他一些辑段的其他一些辑段的其他一些辑段的其他一些属性属性属性属性。它的格式为:。它的格式为:。它的格式为:。它的格式为:1 1.定位类型定位类型定位类型定位类型 说明说明说明说明如何确定逻辑段的边界如何确定逻辑段的边界如何确定逻辑段的边界如何确定逻辑段的边界。有。有。有。有4 4种:种:种:种:PARAPARA(Paragraph(Paragraph):):逻辑段从一个节节(16个字节)的边界开始。即段的起始地址应能被16整除,或这说段起始物理地址应为0H。默认类型BYTE:BYTE:逻辑段从字节字节边界开始,即段可以从任何地址开始。WORD:WORD:逻辑段从字字边界开始。即段的起始地址必须是偶数。PAGE:PAGE:逻辑段从页页边界开始。256字节称为一页,故段的起始物理地址应为00H。也即:也即:PAGE(页边界页边界)-能被能被256除;除;PARA(段边界段边界)-能能被被16除除;WORD(字边界字边界)-(能被能被2除除);BYTE(字节边界字节边界)段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别48 2.组合类型组合类型 功能功能:用在具有多个模块的程序中用在具有多个模块的程序中,用于说明用于说明不同模块中不同模块中同名段同名段的组合方式,的组合方式,共共6种种:NONE:本段与其它逻辑段不组合本段与其它逻辑段不组合。PUBLIC:所有此类型的同名段同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中,构成一个大的逻辑段。STACK:专用于说明堆栈段,组合方式同PUBLICCOMMON:所有此类型的同名段具有相同的起始地址(覆盖),各个逻辑段重叠在一起,共享相同的存储区域。MEMORY:本逻辑段置于地址最高处,多个时取第一个,置于地址最高处,多个时取第一个,其余作为其余作为COMMON AT :使段地址是表达式所计算出来的16位值,CS除外。49【例例】有两个模块,各模块段定义如下有两个模块,各模块段定义如下模块模块1 1:DATA1DATA1SEGMENTSEGMENT PARA PARA PUBLIC PUBLIC DATA1DATA1M1M1DB 45H DUPDB 45H DUP(0 0)DATA1DATA1ENDSENDSDATA2DATA2SEGMENT SEGMENT PARA PARA COMMON COMMON DATA2DATA2N1 DB 102H DUPN1 DB 102H DUP(0 0)DATA2DATA2ENDSENDSEND END 模块模块2 2:DATA1DATA1SEGMENT SEGMENT PARA PARA PUBLIC PUBLIC DATA1DATA1M2M2DB 104H DUPDB 104H DUP(11H11H)DATA1DATA1ENDSENDSDATA2DATA2SEGMENT SEGMENT PARA PARA COMMON COMMON DATA2DATA2N2N2DB 105H DUPDB 105H DUP(0 0)DATA2DATA2ENDSENDSDATA3DATA3SEGMENTSEGMENTT1T1DB 50 DUPDB 50 DUP(20H20H)DATA3DATA3ENDSENDSENDEND50该段的定位组合方式示意图如图所示。该段的定位组合方式示意图如图所示。513.类别类别 用单引号单引号 括起来的字符串括起来的字符串。如代码段CODE”所有所有同类别的段同类别的段被安排在被安排在连续连续的存储区域的存储区域中中。类别名相同的逻辑段按出现的先后顺序排列.如:在模块如:在模块1 1中有段定义:中有段定义:seg1 seg1 SEGMENT PARA STACK SEGMENT PARA STACK stackstack seg1 ENDS seg1 ENDS 在模块在模块2 2中有段定义:中有段定义:seg2 seg2 SEGMENT PARA STACK SEGMENT PARA STACK stackstack seg2 ENDS seg2 ENDS则连接时这两个段被安排在一起。则连接时这两个段被安排在一起。524.2.4设定段寄存器伪指令 ASSUME ASSUME伪指令用于伪指令用于指明指明已定义的已定义的段与段寄存器之间关段与段寄存器之间关系系。格式为格式为:ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段,段寄存器:段名名.其中段寄存器名必须是其中段寄存器名必须是CS,DS,ES CS,DS,ES 和和SSSS中的一个。段名中的一个。段名必须是由必须是由SEGMENTSEGMENT定义的段中的段名。定义的段中的段名。也就是说也就是说ASSUMEASSUME指令是告诉汇编程序用指令是告诉汇编程序用SEGMENTSEGMENT指令定指令定义过的义过的段段的的段段地址将放在哪个地址将放在哪个段段寄存器中寄存器中.例例:DATA1SEGMENT ADB 1,2,3 DATA1ENDS CODE SEGMENT ASSUME DS ASSUME DS:DATA1DATA1,CSCS:CODECODE .CODE ENDS53 注意注意:ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 MOVAX,data MOVDS,AX MOVES,AX MOVAX,stack MOVSS,AX 将段基址装入段寄存器将段基址装入段寄存器。如果程序中用到堆栈段,则SS也需装入实际的初值。代码段基地址代码段基地址不需要程序员装入CS寄存器,而由操作系统(OS)OS)负责装入。54 段定义伪操作:段定义伪操作:完整的段定义格式举例完整的段定义格式举例 data segment ;定义数据段定义数据段 data ends;-extra segment ;定义附加段定义附加段 extra ends;-code segment ;定义代码段定义代码段 assume cs:code,ds:data,es:extrastart:mov ax,data mov ds,ax ;段地址段地址 段寄存器段寄存器 code ends end start注注:汇编时汇编时,系统自动将代系统自动将代码段的段地址装入码段的段地址装入CS,不不用在程序中初始化用在程序中初始化,其它其它的段则要用指令把其初的段则要用指令把其初始化始化.55结论:结论:1.ASSUME语句只起指示作用语句只起指示作用,没有赋值作用没有赋值作用2.程序中用到内存操作数时,程序中用到

    注意事项

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

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开