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

    微机原理 8086汇编程序设计.ppt

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

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

    微机原理 8086汇编程序设计.ppt

    主要内容:主要内容:一、一、汇编语言语句格式汇编语言语句格式二、汇编语言伪指令二、汇编语言伪指令三、汇编语言源程序的汇编与连接三、汇编语言源程序的汇编与连接四、汇编语言程序设计的基本方法四、汇编语言程序设计的基本方法汇编语言程序设计汇编语言程序设计1本讲重点本讲重点:伪操作伪操作 汇编语言程序格式汇编语言程序格式 简单汇编程序设计简单汇编程序设计汇编语言程序设计汇编语言程序设计2一、汇编语言语句格式 汇编语言语句有指令性语句、伪指令语句和宏指令语句三种类型。汇编语言语句有指令性语句、伪指令语句和宏指令语句三种类型。1 1、指令性语句、指令性语句:标号:标号:操作码操作码 操作数操作数 ;注释;注释 是是机机器器指指令令的的符符号号表表示示,经经汇汇编编产产生生对对应应的的机机器器指指令令代代码码,在在形形成成执执行行文文件件时时执行。执行。2 2、伪指令语句、伪指令语句:名字名字 伪指令助记符伪指令助记符 操作数操作数 ;注释;注释 只只是是给给汇汇编编程程序序提提供供一一些些控控制制信信息息,帮帮助助汇汇编编程程序序正正确确汇汇编编指指令令性性语语句句,没没有有对应的机器码。对应的机器码。说说明明:名名字字可可以以是是符符号号常常量量名名、变变量量名名、过过程程名名、段段名名等等,名名字字后后面面不不能能有有“:”。伪伪指指令令命命令令助助记记符符共共有有4040多多个个,按按功功能能不不同同分分成成八八类类。操操作作数数之之间间须须用用逗号分隔。逗号分隔。3 3、宏指令语句、宏指令语句:宏名宏名 宏操作助记符宏操作助记符 操作数操作数 ;注释;注释 是指令性语句和指示性语句的复合体,在汇编时被展开。是指令性语句和指示性语句的复合体,在汇编时被展开。说明:宏名即宏指令名,是一标识符,宏名后面不能有说明:宏名即宏指令名,是一标识符,宏名后面不能有“:”。宏操作助记符有宏操作助记符有MACROMACRO、ENDMENDM、LOCALLOCAL、REPTREPT、IRPIRP、PURGEPURGE等等8 8个。个。汇编程序不区分大小写汇编程序不区分大小写3汇编语言语句统一格式规定 指令性语句、伪指令语句和宏指令语句的指令性语句、伪指令语句和宏指令语句的统一格式统一格式:名字项名字项 操作项操作项 操作数项操作数项 ;注释项;注释项 1.1.名字项:名字项:最多由最多由2121个字符组成。可由下列字符组成。个字符组成。可由下列字符组成。字母字母A AZ Z、a az z数字数字0 09 9特殊符号特殊符号?、$等等注意:注意:名字项的第一个字符不可以是数字,必须是字母或特殊字名字项的第一个字符不可以是数字,必须是字母或特殊字符,但是问号本身不能单独作为名字;符,但是问号本身不能单独作为名字;如果用到特殊符号,则它必须是首字符。如果用到特殊符号,则它必须是首字符。汇编语言的专用保留字、寄存器名、汇编语言的专用保留字、寄存器名、8088/80868088/8086汇编语言中汇编语言中的指令助记符、伪指令名、表达式中使用的运算符和属性的指令助记符、伪指令名、表达式中使用的运算符和属性运算符等均不能作为名字项,否则汇编会给出错误信息;运算符等均不能作为名字项,否则汇编会给出错误信息;名字项在程序中不能重复定义。名字项在程序中不能重复定义。4(1)段属性:可用段属性:可用SIG伪指令求出伪指令求出 此属性用于定义标号和变量的段起始地址。标号通常在代码此属性用于定义标号和变量的段起始地址。标号通常在代码段段CS中定义,变量通常在中定义,变量通常在DS、ES和和SS段中定义。段中定义。(2)偏移属性:可用偏移属性:可用OFFSET伪指令求出伪指令求出 此属性指出标号或变量距离段起始地址的字节数,它是一个此属性指出标号或变量距离段起始地址的字节数,它是一个16位的无符号数。位的无符号数。(3)类型属性:可用类型属性:可用TYPE伪指令求出伪指令求出 对标号而言,此属性指出其引用类型,段内引用属于对标号而言,此属性指出其引用类型,段内引用属于NEAR类,指针长度为类,指针长度为2字节;段间引用属于字节;段间引用属于FAR类,指针长度为类,指针长度为4字节。对变量而言,此属性指出其字节长度,可为字节。对变量而言,此属性指出其字节长度,可为1、2、4、8、10个字节。个字节。u名字项属性名字项属性52.2.操作项操作项可以是可以是指令指令、宏指令宏指令、伪指令的助记符。伪指令的助记符。【例例】LOOP:LOOP:MOVMOV AX AX,BX,BX BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中开辟数据定义伪指令,在主存中开辟7 7个连续的字节单元,个连续的字节单元,初值依次为初值依次为1 17 7,BUFFERBUFFER表示首地址表示首地址63 3.操作数项操作数项操作数项可以由操作数项可以由常量、寄存器、标号、变量或表达式常量、寄存器、标号、变量或表达式等组成。等组成。(1)常量常量常量是没有属性的纯数,其数值在汇编过程中被确定,并在程常量是没有属性的纯数,其数值在汇编过程中被确定,并在程序运行时保持不变。分为序运行时保持不变。分为数值常量数值常量和和字符型常量字符型常量。各种形式各种形式数字常量数字常量格式对照表格式对照表7字符串常量字符串常量字字符符串串常常量量是是用用单单引引号号或或双双引引号号引引起起来来的的一一个个或或多多个个字字符符。字字符符串串常常量量是是以以各各字字符符的的ASC码码表表示示的的。如如A用用41H 表表示示,字字符符串串A1B2用用41H,31H,42H,32H表示。表示。8常数项举例常数项举例例例5.2SUB DH,22;常数常数22为立即数,汇编后为为立即数,汇编后为16HMOV BX,SI十十32H;常数常数32H作位移量作位移量DB 12H;定义一个字节数据定义一个字节数据DW 1234H;定义一个字数据定义一个字数据DD 12345678H;定义一个双字数据定义一个双字数据DB 9BD;定义三个字节的字符串数据,在定义三个字节的字符串数据,在 内存中就是内存中就是39H、42H、44H9(2)表达式及运算符算术运算符算术运算符移位运算符移位运算符逻辑运算符逻辑运算符关系运算符关系运算符分析运算符分析运算符综合运算符综合运算符表达式由常数、寄存器、标表达式由常数、寄存器、标号、变量与一些运算符组合号、变量与一些运算符组合而成,分为而成,分为数字表达式数字表达式和和地地址表达式址表达式。汇编过程中,汇。汇编过程中,汇编程序按照一定的优先规则,编程序按照一定的优先规则,对表达式进行计算后得到一对表达式进行计算后得到一个个数值或地址数值或地址,用作指令的,用作指令的操作数。操作数。10算术运算符:算术运算符:(加)、(减)、(加)、(减)、*(乘)、(除)、(乘)、(除)、MOD(求模)求模)移位运算符:移位运算符:SHL(左移)、左移)、SHR(右移)右移)可以用于数值表达式又可用于地址表达式。可以用于数值表达式又可用于地址表达式。算术运算符和移位运算符算术运算符和移位运算符11【例例】算术和移位运算符进行数值表达式运算算术和移位运算符进行数值表达式运算 NUM1EQU25*4 50;NUM1=50NUM2EQUNUM1/7;NUM2=7NUM3EQUNUM1 MOD 7;NUM3=1NUM4EQU0FH MOV AL,NUM4 SHL 4 ;(AL)=11110000B12与(与(AND)、或(、或(OR)、异或(、异或(XOR)、非(、非(NOT)四种运算四种运算。由由于于逻逻辑辑运运算算是是按按位位操操作作,且且在在汇汇编编过过程程中中完完成成,因因而而运运算算的的结结果果仍为整数常量。仍为整数常量。【例例】用逻辑运算符进行运算。用逻辑运算符进行运算。MOVAL,34H AND 0FH;04HALMOVBL,05H OR 30H ;35HBLMOVCX,NOT 00FFH ;0FF00HCXMOVDX,789AH XOR 000FH ;7895HDX逻辑运算符逻辑运算符13相等(相等(EQ),),不等(不等(NE),),小于(小于(LT),),大于(大于(GT),),小于等于(小于等于(LE)及大于等于(及大于等于(GE)。)。运算结果成立时逻辑值为运算结果成立时逻辑值为真真,用,用0FFFFH表示;表示;关系不成立时逻辑值为关系不成立时逻辑值为假假,用,用0表示。表示。【例例】用关系运算符进行数值表达式运算。用关系运算符进行数值表达式运算。NUM1EQU10 LT 5 ;NUM1=0 NUM2EQU0AAAAH GT 7FFFH;NUM2=0FFFFH MOVAX,A EQ 41H;0FFFFHAX MOV BX,NUM2 LT NUM1;0BX关系运算符关系运算符14把把标标号号或或变变量量所所指指存存储储器器地地址址的的属属性性(段段、偏偏移移量量和和类类型型)或或一一些些特特征征分分离离出出来来,作作为为操操作作数数使使用。主要介绍用。主要介绍3个:个:SEG 运算符运算符 OFFSET运算符运算符 TYPE运算符运算符分析运算符号分析运算符号15格式:格式:SEG 变量或标号变量或标号功能:分离出其后变量或标号所在段的段首址。功能:分离出其后变量或标号所在段的段首址。【例例】已已知知数数据据段段从从存存储储器器的的23000H地地址址开开始始,DBUF是该段中的一个变量名。是该段中的一个变量名。MOV BX,SEG DBUF汇编为:汇编为:MOV BX,2300H SEG SEG 运算符运算符16格式:格式:OFFSET 变量或标号变量或标号功能:分离出其后变量或标号的偏移地址。功能:分离出其后变量或标号的偏移地址。【例例】已知标号已知标号START的段地址为的段地址为2100H,物理地址为物理地址为21200H。MOV DX,OFFSET START汇编为:汇编为:MOV DX,0200H这条指令与指令这条指令与指令 LEA DX,START功能相同。功能相同。OFFSET OFFSET 运算符运算符17格式:格式:TYPE 变量或标号变量或标号功功能能:分分离离出出其其后后变变量量或或标标号号的的类类型型。如如果果是是变变量量,将将返返回回该该变变量量的的类类型型对对应应字字节节数数;如如果果是是标标号号,则则返返回回代代表标号类型的数值。它们之间的关系见下表所示。表标号类型的数值。它们之间的关系见下表所示。TYPETYPE运算符运算符【例例】已定义已定义 ARRAY DB 22ARRAY DB 22,3333指令指令 ADD SIADD SI,TYPE ARRAYTYPE ARRAY汇编为:汇编为:ADD SIADD SI,1 118 段属性前缀运算符段属性前缀运算符“”格式为:格式为:段寄存器名段寄存器名 地址表达式地址表达式或或 段名段名 地址表达式地址表达式或或 组名组名 地址表达式地址表达式此运算符用来表示一个标号、变量或地址表达式的段属性。此运算符用来表示一个标号、变量或地址表达式的段属性。【例例】用段前缀指定附加段内操作数的地址用段前缀指定附加段内操作数的地址MOV AL,ES DATA ;指令源操作数在附加段指令源操作数在附加段DATA地址单元中地址单元中(5 5)综合运算符)综合运算符19 LOW和和HIGH格式为:格式为:LOW 表达式表达式或或 HIGH 表达式表达式此运算符用于对一个此运算符用于对一个16位数据或地址表达式,位数据或地址表达式,用用HIGH取其高取其高位字节、位字节、LOW取其低位字节取其低位字节。所以此运算符又称为字节分离。所以此运算符又称为字节分离运算符。运算符。【例例】已知已知 RESULT EQU 7788H则则MOV AH,HIGH RESULT汇编为:汇编为:MOV AH,77HMOV AL,LOW RESULT汇编为:汇编为:MOV AL,88H(5 5)综合运算符)综合运算符20本节介绍了几种常用的运算符。为了正确计算表达式的本节介绍了几种常用的运算符。为了正确计算表达式的数值,应该按照运算符的优先级:数值,应该按照运算符的优先级:先高后低、自左向右(优先级相同时)地进行计算。括先高后低、自左向右(优先级相同时)地进行计算。括号内的表达式应优先计算。号内的表达式应优先计算。下面给出相关运算符下面给出相关运算符 从高到低的优先级排列顺序:从高到低的优先级排列顺序:表达式及运算符小结表达式及运算符小结211.(在圆括号中的项),(在圆括号中的项),方括号中的项方括号中的项,结构变量,结构变量(变量、字段)(变量、字段)2.LENGTH,SIZE、WIDTH和和MASK3.PTR,OFFSET,SEG,TYPE,THIS及段运算符及段运算符4.HIGH和和 LOW5.*,MOD,SHL(左移),左移),SHR(右移)右移)6.+,-7.EQ,NE,LT,LE,GT,GE8.NOT9.AND10.OR,XOR11.SHORT表达式及运算符小结表达式及运算符小结高高低低224.注释项一一行行语语句句分分号号后后面面的的内内容容,主主要要用用来来说说明明程程序序或或语语句句功功能能,增增加加程程序序的的可可读读性性。对对于于较较大大的的程程序序,注注释释项项更更不能缺少。不能缺少。分号(;)放在语句后,用来说明该语句的功能;分号(;)放在语句后,用来说明该语句的功能;分分号号放放在在某某一一行行的的开开头头,用用来来说说明明下下面面一一段段程程序序的的功功能;能;分分号号加加到到指指令令前前,可可暂暂时时冻冻结结有有疑疑问问的的指指令令,调调试试正正确确后后,再再把把这这些些指指令令解解冻冻或或删删除除,这这样样可可减减少少语语句句增增、删的编辑工作。删的编辑工作。23MOV CX,0MOV CX,0;传送指令,具有传送指令,具有2 2个操作数个操作数DELAY:DELAY:NOP NOP ;空操作指令,没有操作数,带有标号空操作指令,没有操作数,带有标号LOOP LOOP DELAYDELAY;循环指令,标号循环指令,标号DELAYDELAY说明转移位置说明转移位置BUFFERBUFFER DB DB 1,2,3,4,5,6,7 1,2,3,4,5,6,7;数据定义伪指令,在主存中开辟数据定义伪指令,在主存中开辟7 7个连续的字节单元,个连续的字节单元,初值依次为初值依次为1 17 7,BUFFERBUFFER表示首地址表示首地址汇编语言语句实例汇编语言语句实例24本节小结本节小结汇编语言指令格式汇编语言指令格式 名字项名字项 操作项操作项 操作数项操作数项 ;注释项;注释项 标号和变量的属性:标号和变量的属性:段属性、偏移属性、类型属性段属性、偏移属性、类型属性操作数的表达形式操作数的表达形式 算术、移位、逻辑、关系、属性、综合运算符算术、移位、逻辑、关系、属性、综合运算符首页25二、汇编语言伪指令二、汇编语言伪指令伪指令:伪指令:在汇编程序对源程序汇编期间由汇编程序处理在汇编程序对源程序汇编期间由汇编程序处理的操作(不是真正执行的指令),可以完成的操作(不是真正执行的指令),可以完成处理器选择、处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束定义程序模式、定义数据、分配存储区、指示程序结束等等功能。功能。常用伪指令:常用伪指令:处理器选择伪指令;处理器选择伪指令;段定义伪指令段定义伪指令程序开始与结束伪指令;程序开始与结束伪指令;数据定义与存储器分配伪指令;数据定义与存储器分配伪指令;赋值伪指令;赋值伪指令;地址计数器与对准伪指地址计数器与对准伪指令;令;基数控制伪指令;基数控制伪指令;偶地址对准伪指令;偶地址对准伪指令;261.处理器选择伪操作.8086 选择选择 8086 指令系统指令系统.286 选择选择 80286 指令系统指令系统.286P 选择保护模式下的选择保护模式下的 80286 指令系统指令系统.386 选择选择 80386 指令系统指令系统.386P 选择保护模式下的选择保护模式下的 80386 指令系统指令系统.486 选择选择 80486 指令系统指令系统.486P 选择保护模式下的选择保护模式下的 80486 指令系统指令系统.586 选择选择 Pentium 指令系统指令系统.586P 选择保护模式下的选择保护模式下的 Pentium 指令系统指令系统一般放在整个程一般放在整个程序的序的最前面最前面。默。默认值为认值为.8086.8086272.2.段定义伪指令段定义伪指令完整的汇编语言源程序由完整的汇编语言源程序由段段组成组成一个汇编语言源程序可以包含若干个一个汇编语言源程序可以包含若干个代码段代码段、数数据段据段、附加段或堆栈段附加段或堆栈段,段与段之间的顺序可随,段与段之间的顺序可随意排列。意排列。需独立运行的需独立运行的程序必须包含一个代码段程序必须包含一个代码段,并指示,并指示程序执行的起始点,一个程序只有一个起始点程序执行的起始点,一个程序只有一个起始点所有的所有的可执行性语句必须位于某一个代码段内可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内说明性语句可根据需要位于任一段内通常,程序还需要一个通常,程序还需要一个堆栈段堆栈段282.段定义伪操作源程序分别用两种格式书写源程序分别用两种格式书写v第一种格式从第一种格式从MASM 5.0MASM 5.0开始支持开始支持简化段定义格式简化段定义格式v第二种格式第二种格式MASM 5.0MASM 5.0以前以前就具有就具有完整段定义格式完整段定义格式Hello,Everybody!程序功能程序功能291;EXAMPLE5.42;程序注释程序注释;数据段说明数据段说明2 DATA SEGMENT;数据段数据段 3 DATA ENDS;堆栈段说明堆栈段说明4STACK SEGMENT PARA STACKSTACK;堆栈段堆栈段 5 STACK ENDS;代码段说明代码段说明6 CODE SEGMENT;代码段代码段7 START PROC FAR;远过程调用定义远过程调用定义8ASSUME CS CODE,DS DATA,ES DATA,SS STACK完整段定义伪操作基本格式(完整段定义伪操作基本格式(1 1)309 PUSH DS ;保存返回地址保存返回地址10 MOV AX ,011PUSH AX12MOV AX ,DATA ;初始化初始化DS,ES13MOV DS ,AX14MOV ES ,AX;自己编写的程序自己编写的程序;15RET;返回返回DOS16START ENDP;17 CODE ENDS;代码段结束代码段结束;18 END START;汇编到此结束汇编到此结束311;EXAMPLE5.42;程序注释程序注释;数据段说明数据段说明2 DATA SEGMENT;数据段数据段 3 DATA ENDS;堆栈段说明堆栈段说明4STACK SEGMENT STACK ;堆栈段堆栈段 5 STACK ENDS;代码段说明代码段说明6 CODE SEGMENT;代码段代码段8ASSUME CS CODE,DS DATA,ES DATA,SS STACK完整段定义伪操作基本格式(完整段定义伪操作基本格式(2 2)3212 START:MOV AX ,DATA ;初始化初始化DS,ES13 MOV DS ,AX14 MOV ES ,AX;自己编写的程序自己编写的程序;15 MOVAH,4CH;用;用DOSDOS调用功能返回操作系统调用功能返回操作系统16 INT21H;17 CODE ENDS;18 END START33;lt401b.asmlt401b.asm(文件名)文件名)stackstacksegment stacksegment stack;定义堆栈段定义堆栈段dwdw 512 dup(?)512 dup(?);堆栈段有堆栈段有512512字(字(10241024字节)空间字节)空间stackstackendsends;堆栈段结束堆栈段结束datadatasegmentsegment;定义数据段定义数据段stringstringdb db Hello,Everybody!Hello,Everybody!,0dh,0ah,0dh,0ah,$datadataendsendscodecodesegment segment codecode;定义代码段定义代码段assume assume cs:code,ds:data,ss:stackcs:code,ds:data,ss:stackstart:start:movmov ax,data ax,data;建立建立DSDS段地址段地址movmov ds,axds,ax【例例】完整段定义格式举例完整段定义格式举例34movmov dx,offsetdx,offset string;string;显示字符串显示字符串movmov ah,9 ah,9intint 21h 21hmovmov ax,4c00h ax,4c00hintint 21h 21h;利用功能调用返回利用功能调用返回DOSDOScodecodeendsends;代码段结束代码段结束end startend start;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点【例例】完整段定义格式举例(续)完整段定义格式举例(续)35;SampleC.ASMSampleC.ASM .model small;.model small;存储模型(各段在存储器中的存放方式)存储模型(各段在存储器中的存放方式).stack.stack 100H 100H;定义堆栈段定义堆栈段.data.data.;在数据段定义数据在数据段定义数据.code.codestartstart:movmov ax,dataax,datamovmov ds,axds,ax.;在代码段填入指令序列在代码段填入指令序列movmov ax,4c00h ax,4c00hintint 21h 21h.;子程序代码子程序代码end startend start简化段定义格式(简化段定义格式(MASM 5.xMASM 5.x支持)支持)36;lt401a.asm;lt401a.asm(文件名)文件名).model small.model small;定义程序的存储模式定义程序的存储模式.stack.stack;定义堆栈段定义堆栈段.data.data;定义数据段定义数据段stringstringdb db Hello,Everybody!Hello,Everybody!,0dh,0ah,0dh,0ah,$;在数据段定义要显示的字符串在数据段定义要显示的字符串.code.code;定义代码段定义代码段startstart:movmov ax,dataax,data ;程序起始点,建立程序起始点,建立DSDS、SSSSmovmov ds,axds,ax movmov dx,offsetdx,offset string string;指定字符串指定字符串movmov ah,9 ah,9intint 21h 21h;利用功能调用显示信息利用功能调用显示信息movmov ax,4c00h ax,4c00h;程序结束点,返回程序结束点,返回DOSDOSintint 21h 21hendend;汇编结束汇编结束【例例】简化段定义格式举例(简化段定义格式举例(MASM 5.xMASM 5.x支持)支持)37;SampleA.ASMSampleA.ASM .model small .model small .stack .stack .data .data .;在数据段定义数据在数据段定义数据 .code .code .startup.startup ;(定义程序初始入口点)(定义程序初始入口点).;在代码段填入指令序列在代码段填入指令序列 .exit 0.exit 0 ;(返回操作系统)(返回操作系统).;子程序代码子程序代码 endend ;(源程序结束)(源程序结束)简化段定义格式(简化段定义格式(MASM 6.xMASM 6.x支持)支持)注意:注意:简化段定义比完简化段定义比完整段格式简单得整段格式简单得多。但多。但完整段定完整段定义可以全面地说义可以全面地说明段的各种类型明段的各种类型与属性与属性,因此在,因此在很多情况下仍需很多情况下仍需使用。使用。38(1)程序开始伪指令)程序开始伪指令此指令指明程序模块的开始,并定义模块名。此指令指明程序模块的开始,并定义模块名。指令格式:指令格式:NAME 模块名模块名 或或 TITLE 标题名标题名程序中若缺省该伪指令,则取程序中若缺省该伪指令,则取TITLE语句中的页标题前语句中的页标题前6个字符;若没有个字符;若没有TITLE语句,则取源程序文件名为模块名。语句,则取源程序文件名为模块名。(2)源程序结束伪指令)源程序结束伪指令此指令指明汇编语言程序模块的结束。此指令指明汇编语言程序模块的结束。指令格式:指令格式:END 标号标号 标号指示程序的起始地址。多个程序模块连接时,只有主程序需要使用标号指示程序的起始地址。多个程序模块连接时,只有主程序需要使用标号,其他子程序模块则不必指定标号。标号,其他子程序模块则不必指定标号。3.程序开始和结束伪指令程序开始和结束伪指令394.4.数据定义及存储器分配伪指令数据定义及存储器分配伪指令指令格式:指令格式:变量名变量名 助记符表达式助记符表达式;注释注释功能:从变量名所代表的地址单元开始定义数据存储区,类功能:从变量名所代表的地址单元开始定义数据存储区,类型由数据定义伪指令确定,。型由数据定义伪指令确定,。变量名变量名DB表达式;定义字节变量。表达式;定义字节变量。变量名变量名DW表达式;定义字变量。表达式;定义字变量。变量名变量名DD表达式;定义双字变量。表达式;定义双字变量。变量名变量名DQ表达式;定义四字变量。表达式;定义四字变量。变量名变量名DT表达式;定义十字节变量。表达式;定义十字节变量。40表表达达式式项项是是给给变变量量或或指指定定存存储储单单元元赋赋予予初初值值,它它有有以以下下几种形式:几种形式:(1)数值表达式)数值表达式(2)字符串表达式:字符串表达式:以单引号括起,存放为以单引号括起,存放为ASCII码码(3)?表达式:表达式:保留存储空间,但不存入数据保留存储空间,但不存入数据(4)带)带DUP的表达式:的表达式:数组表达式数组表达式4.4.数据定义及存储器分配伪指令表达式的形式数据定义及存储器分配伪指令表达式的形式41【例例】操作数为常数或表达式操作数为常数或表达式DATA_BYTE DB 15,8,15HDATA_WORD DW 200,200H,-10DATA_DW DD 4*30,0AFFDH42【例例】操作数为字符串操作数为字符串STR1 DB HelloSTR2 DB ABCSTR3 DW AB,CD注意:不能注意:不能写成写成DB DB ABCDABCD43【例例】操作数为操作数为?CNT1 DB 0,?,?,0 CNT2 DW?,100,?注意:注意:?为系统保留单元,为系统保留单元,一般系统填充为一般系统填充为00H00H44【例例】DUPDUP的使用的使用 DA1 DB 2 DUP(5,6);从从DA1地址单元开始存放二组地址单元开始存放二组“05H,06H”共共4个地址单元个地址单元DA2 DW 40 DUP(?)(?);从从DA2地址单元开始保留地址单元开始保留40个字个字共共80个地址单元个地址单元DA3 DB 2 DUP(1,2 DUP(3),),4);从从DA3地址单元开始存放地址单元开始存放2组组“01,03,03,04”,共占用,共占用8个地址个地址单元。单元。45datadatasegmentsegment;数据段数据段X Xdb a,-5db a,-5db 2 dup(100),?db 2 dup(100),?Y Ydb ABCdb ABCdatadataendsends字节单元定义实例字节单元定义实例46表达式名表达式名 EQU 表达式表达式ALPHA EQU 9ALPHA EQU 9BETA EQU ALPHA+18BETA EQU ALPHA+18BB EQU BP+8BB EQU BP+8“=”伪操作伪操作(允许重复定义允许重复定义)EMP=7EMP=7EMP=EMP+1EMP=EMP+1 表达式赋值伪操作:表达式赋值伪操作:496.6.地址计数器与对准伪操作地址计数器与对准伪操作定位伪指令控制数据的偏移地址定位伪指令控制数据的偏移地址ORGORG 参数参数;将当前偏移地址指针指向参数表达的偏移地址:将当前偏移地址指针指向参数表达的偏移地址:ORG 100hORG 100h;从从100h100h处安排数据或程序处安排数据或程序ORG$+10ORG$+10;使偏移地址加使偏移地址加1010,即跳过,即跳过1010个字节空间个字节空间MASMMASM中,符号中,符号“$”表示表示当前偏移地址值当前偏移地址值EVENEVEN;从偶地址开始从偶地址开始ALIGN nALIGN n;从从n n的整数倍地址开始的整数倍地址开始51org org$+10+10arrayarraydb 45,45hdb 45,45h.code.codemovmov ax,ax,segseg array arraymovmov ds,axds,axmovmov bx,bx,offsetoffset array array;等价于等价于 lea lea bx,arraybx,arraymovmov cl,array cl,array+44;等效于等效于 movmov cl,array4 cl,array4movmov ax,ax,es:2000hes:2000hu地址操作符实例地址操作符实例 加加4个字节单元个字节单元52ARRAY DW 1,2,+4,3,4,+4假设汇编时假设汇编时ARRAY 分配的偏移地址为分配的偏移地址为0074H,则汇编,则汇编后,后,+4所在的两个字单元:所在的两个字单元:(ARRAY+4)=0078+4=007CH(ARRAY+0A)=007E+4=0082Hu地址操作符实例地址操作符实例531.设设X和和X+2单元的内容为双精度数单元的内容为双精度数P,Y和和Y+2单元的单元的内容为双精度数内容为双精度数Q,X、Y为低位字。下列程序段使为低位字。下列程序段使2PQ时(时(AX)1,2P(DI)?SI(SISI)+(CXCX)-1-1DIDI(DIDI)+(CXCX)-1-1(DI)(SI)(SI)SI(SI)-1DI(DI)-1CX(CX)-1(CX)=0?(DI)(SI)SI)SI(SI)+1DI(DI)+1CX(CX)-1(CX)=0?开始开始SI源数据块首址源数据块首址DIDI目的数据块首址目的数据块首址CXCX搬家字节数搬家字节数结束结束图图4 4.2 2 分分支支程程序序设设计计652.分支程序设计方式(1)NAME NAME EXAM3EXAM3;将内存中以将内存中以STRI1STRI1为首址数据传送到以为首址数据传送到以STRI2STRI2为首址的单元为首址的单元 DATA DATA SEGMENTSEGMENTSTRI DBSTRI DB200 DUP200 DUP(?)(?)STRI1 EQU STRI1 EQU STRI+30STRI+30STRI2 EQU STRI2 EQU STRI+70STRI+70COUNT EQUCOUNT EQU 5050DATA ENDSDATA ENDSSTACK SEGMENTSTACK SEGMENTPARA STACK STACK PARA STACK STACK STAPN DBSTAPN DB100 DUP100 DUP(?)(?)TOP EQUTOP EQULENGTH STAPNLENGTH STAPNSTACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENTASSUME CSASSUME CS:CODECODE,DSDS:DATADATA,ESES:DATADATA,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATADATAMOVMOVDSDS,AXAX;数据段地址装填数据段地址装填MOVMOVESES,AXAX;附加段地址装填附加段地址装填MOVMOVSPSP,TOPTOP;送堆送堆栈栈指指针针 MOV CXMOV CX,COUNTCOUNT;送字;送字节节数数MOV SIMOV SI,OFFSET STRI1OFFSET STRI1;送;送STRI1STRI1地址指地址指针针MOV DIMOV DI,OFFSET STRI2OFFSET STRI2;送;送STRI2STRI2地址指地址指针针 CMP SI CMP SI,DI DI;从首址开始?从首址开始?JA A2 JA A2 ;是,转移是,转移 ADD SI ADD SI,CX CX;否,以末地址开始搬家否,以末地址开始搬家ADD DI ADD DI ,CX CX DEC SI DEC SI DEC DI DEC DI A1A1:MOV AL MOV AL,SI SI;从首址开始搬家从首址开始搬家MOV DI MOV DI,ALALDEC SI DEC SI DEC DI DEC DI DEC CXDEC CXJNE A1JNE A1JMP A3JMP A3A2A2:MOV ALMOV AL,SISI MOV DI MOV DI,ALALINC SIINC SIINC DI INC DI DEC CXDEC CXJNE A2JNE A2 ;未完,继续未完,继续A3:A3:MOV AHMOV AH,4CH4CHINT 21HINT 21H;返回返回DOSDOSCODE CODE ENDS ENDS END STARTEND START662.分支程序设计方式(2):串操作NAME NAME EXAM3EXAM3;将内存中以将内存中以STRI1STRI1为首址数据传送到以为首址数据传送到以STRI2STRI2为首址的单元为首址的单元 DATA DATA SEGMENTSEGMENTSTRI DBSTRI DB 200 DUP200 DUP(?)(?)STRI1 EQU STRI1 EQU STRI+30STRI+30STRI2 EQU STRI2 EQU STRI+70STRI+70COUNT EQUCOUNT EQU 5050DATA ENDSDATA ENDSSTACK SEGMENTSTACK SEGMENT PARA STACK STACK PARA STACK STACK STAPN DBSTAPN DB100 DUP100 DUP(?)(?)TOP EQUTOP EQULENGTH STAPNLENGTH STAPNSTACK ENDSSTACK ENDSCODE SEGMENTCODE SEGMENTASSUME CSASSUME CS:CODECODE,DSDS:DATADATA,ESES:DATADATA,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATADATAMOVMOVDSDS,AXAX;数据段地址装填数据段地址装填MOVMOVESES,AXAX;附加段地址装填附加段地址装填MOVMOVSPSP,TOPTOP;送堆送堆栈栈指指针针 MOV CXMOV CX,COUNTCOUNT;送串送串长长 MOV SI MOV SI,OFFSET STRI1OFFSET STRI1;送;送STRI1STRI1地址指地址指针针 MOV DI MOV DI,OFFSET STRI2OFFSET STRI2;送;送STRI2STRI2地址指地址指针针 CLD CLD ;正向;正向 CMP SI CMP SI,DIDI ;两串首地址比;两串首地址比较较 JA R

    注意事项

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

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




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

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

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

    收起
    展开