欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《汇编语言设计》PPT课件.ppt

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

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

    《汇编语言设计》PPT课件.ppt

    第四章汇编语言程序设计,湖州师范学院,2023/7/19,信息工程学院,1,宏汇编使用的语句分三类指令性语句伪指令语句/指示性语句宏指令语句,4.1.2 MASM汇编语言,2023/7/19,信息工程学院,2,指令性语句:与机器指令相对应,可译成目标代码(机器指令代码)。语句格式:【标号:】【前缀】指令助记符【操作数,操作数】【;注释】标号:可有可无,指令语句的符号地址,后面必须紧跟冒号“:”。注意:标号可使用字母、数字和特殊符号;首字符必须是字母或特殊符号;最大长度31个字符;可以省略,经常作为表示转移的地址。指令助记符:指令名称的代表符号,指出指令的操作类型。可译成机器码;不可省略,是关键字。操作数:参与指令运算的数据。可以有一个、多个操作数或无操作数;多个操作数之间用逗号“,”隔开,操作数与指令助记符之间用“空格”隔开。操作数可以是常数、变量、标号、寄存器名或表达式。注释:说明指令或程序的功能,可省略。注释前加分号“;”。,1、指令性语句,2023/7/19,信息工程学院,3,伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。语句的格式:【名字】伪指令指示符【操作数,操作数】【;注释】名字:名字后不允许带冒号“:”,但可以省略。通常是变量名、段名、过程名、符号名等。伪指令指示符:汇编程序MASM规定的符号。常用的有变量定义语句(DB、DW),符号定义语句(EQU、),段定义语句(SEGMENTEND),段分配语句(ASSUME),过程定义语句(PROCENDP)等。操作数:不同伪指令有不同要求。操作数可以是常数、变量、字符串、表达式等。注释:功能和使用与指令性语句相同。,2、伪指令语句/指示性语句,2023/7/19,信息工程学院,4,4.2.1 汇编语言描述规范,1、标识符,字符数为131个第一个字符必须是字母、“?”、“”、“_”第二个字符以后可以使字母、数字、“?”、“”或“_”不能使用系统专用的助记符、伪指令、寄存器等具有三个属性。(1)段属性:定义标识符所在段。(2)偏移量属性:定义标识符所在段的偏移量。(3)类型属性:标号分为:类型NEAR,表示此标号为近标号,只能实现段内转移或调用;类型FAR,表示此标号为远标号,可以实现段间转移或调用。符号名中:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)。,2023/7/19,信息工程学院,5,2、操作数,(1)常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,例00110100B;八进制:字母“Q”或“O”结尾,例1037O、2370Q;十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2;十六进制:字母“H”结尾,“AF”开头时,前面加0,例56H、0A7F2H;字符串:用单引号括起来,机内存放的是各字符的ASCII码。例ABC。,2023/7/19,信息工程学院,6,(2)变量变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量都具有三个属性。段值(SEGMENT):指变量所在段的段基址。段内偏移地址(OFFSET):指变量所在地址与所在段首地址之间的地址偏移字节数。类型(TYPE):指变量中每个元素所包含的字节数:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)等。(3)标号:,标号是可执行指令语句的地址的符号表示,可作为程序转向的目标地址。具有三个属性。(1)段值(SEGMENT):标号所在段的段基址。(2)段内偏移地址(OFFSET):标号所在地址与所在段的段首址之间的偏移地址字节数。(3)类型(TYPE):,2023/7/19,信息工程学院,7,(7)表达式,表达式:运算对象+运算符。在汇编时进行运算,运算结果作为语句中的操作数。运算对象:常数、变量、标号。得到的运算结果可以是一个常数字,也可以是一个存储器的地址。MASM中6类运算符:如表4-1所示。算术运算符(Arithmetic Operators)逻辑运算符(Logical Operators)关系运算符(Relational Operators)数值返回运算符(Value-Returning Operators)修改属性运算符(Modifing attribute Operators)其它运算符(other Operators),2023/7/19,信息工程学院,8,表41 MASM的表达式中的运算符(1),2023/7/19,信息工程学院,9,表41 MASM的表达式中的运算符(2),2023/7/19,信息工程学院,10,表41 MASM的表达式中的运算符(3),2023/7/19,信息工程学院,11,包括7种:十、一、*、/(除,只取除法运算结果之商)、MOD(模,只取除法运算结果之余数)、SHL(左移,左移1位相当于乘2)、SHR(右移,右移1位相当于除2)。注意:所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加减某一个数字量。,一、算术运算符,2023/7/19,信息工程学院,12,例4.3 汇编程序指令格式如下:DAEQU300MOVAX,DA80MOVBX,DA MOD 100MOVCX,DA/100MOVDH,0110 0100B SHR 2汇编时,计算表达式形成指令为:DAEQU300MOVAX,220MOVBX,0MOVCX,3MOVDH,19H,2023/7/19,信息工程学院,13,包括4种:AND(与)、OR(或)、NOT(非)、XOR(异)或)注意:按位运算的,只能对常数进行运算,得到结果也是常数。,二、逻辑运算符,2023/7/19,信息工程学院,14,例4.4MOVAL,NOT 0FFHMOVBL,8CH AND 73HMOVAH,8CH OR 73HMOVCH,8CH XOR 73H汇编时,计算表达式形成指令为:MOVAL,0MOVBL,0MOVAH,0FFHMOVCH,0FFH注意:逻辑运算符不要与逻辑指令助记符混淆。,2023/7/19,信息工程学院,15,包括6种:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。意:关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址;若结果为真,输出全是l,即0FFH或0FFFFH;若结果为假,输出全是0。,三、关系运算符,例4.5MOVAX,10H GT 16ADDBL,6 EQ 0110B汇编时,计算表达式形成指令为:MOVAX,0ADDBL,0FFH,2023/7/19,信息工程学院,16,数值返回运算符也称作分析运算符(Analytic opertors)。包括5种:OFFSET、SEG、TYPE、LENGTH、SIZE。功能:加在变量或标号前,返回运算对象的某个参数值。例如偏移地址值、段地址值、类型属性、变量包含的单元数等。1OFFSET:格式:OFFSET 变量或标号功能:返回标号或变量的偏移地址值。例4.6 若DA1为数据段中一个变量名MOV BX,OFFSET DA1;等价于LEA BX,DA1,四、数值返回运算符,2023/7/19,信息工程学院,17,2SEG:格式:SEG 变量或标号功能:取变量或标号的段基值。例4.7MOVAX,SEG M1MOVDX,AX解:设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令;汇编后指令变为:MOVAX,0500HMOVDX,AX,2023/7/19,信息工程学院,18,3TYPE:格式:TYPE 变量或标号功能:加在变量前,返回变量的类型属性;加在标号前,返回标号的距离属性。如下表所示。,TYPE 运算符返回值,2023/7/19,信息工程学院,19,例4.8A1DB 20H,30HA2DW 0438HA3DD?L1:MOVAH,TYPE A1MOVBH,TYPE A2ADDAL,TYPE A3MOVBL,TYPE L1汇编时,计算表达式形成指令为:MOVAH,1MOVBH,2ADDAL,4MOVBL,0FFH,2023/7/19,信息工程学院,20,4LENGTH:格式:LENGTH 变量功能:当变量中使用DUP时,LENGTH返回此变量所包含的单元数,对其它变量则返回1。,例4.9M1DW 100 DUP(?)M2DW 1,2,3M3DB A,B,C,D MOVCX,LENGTH M1MOVBL,LENGTH M2MOVAL,LENGTH M3汇编时,计算表达式形成指令为:MOVCX,100;返回变量所包含的100个字单元MOVBL,1MOVAL,1,2023/7/19,信息工程学院,21,5SIZE:格式:SIZE 变量功能:加在变量前,返回该变量包含的总字节数。SIZELENGTH*TYPE,例4.10 M1DW 100 DUP(?)M2DW 1,2,3M3DB A,B,C,D MOVCX,SIZE M1ADDBL,SIZE M2MOVAL,SIZE M3汇编时,计算表达式形成指令为:MOVCX,200;返回变量所包含的200个字单元MOVBL,2MOVAL,1,2023/7/19,信息工程学院,22,修改属性运算符也称作合成运算符(Synthetic operators)。包括6种:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等。1段操作符:格式:段前缀:变量或地址表达式功能:表示某个变量或地址被修改到指定的段寄存器提供的段基址中。例4-11 MOV AX,ES:BX,五、修改属性运算符,2023/7/19,信息工程学院,23,2PTR:格式:类型/距离 PTR 变量或标号功能:将PTR左边的类型属性赋给右边的变量或标号。注意:PTR本身不分配存储单元,仅对已分配的存储单元赋予新的属性;常与类BYTE、WORD、DWORD、NEAR、FAR等连用。,2023/7/19,信息工程学院,24,例4.12N1DB15H,36H N2DW1122H,3344HLO:MOVAX,WORD PTR N1;使N1转换成AX类型MOVBL,BYTE PTR N2;使N2转换成BL类型例 MOV BX,10H分析:将立即数送入BX间址指定的存储单元,可以通过PTR指明是存入字节单元还是字单元。MOV BYTE PTR BX,10H;BX10H MOV WORD PTR BX,10H;BX,BX+10010H也可用PTR来改变距离属性,JMP FAR PTR LOOP在JMP语句中将标号LOOP改为FAR,使JMP指令在其它代码段中也可以用,实现段间转移。,2023/7/19,信息工程学院,25,3THIS:格式:变量/标号 EQU THIS 类型/距离功能:将EQU THIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。例4.13FIRSTEQU THIS BYTETABLE DW 200 DUP(?)FIRST的偏移地址值与TABLE的偏移地址值相同,区别在于FIRST变量为字节类型,TABLE为字类型。此功能类似于LABEL伪指令的功能。,2023/7/19,信息工程学院,26,4SHOT:格式:SHORT 标号功能:说明转移类指令中转向地址的属性为短转移:-128+127之间。例L1:JMPSHORT L2L2:MOVAX,05HIGH和LOW:格式:HIGHLOW 符号常量功能:HIGH和LOW称为字节分离运算符。HIGH从中分离出高位字节,LOW分离出低位字节。,2023/7/19,信息工程学院,27,例4.16K1EQU 0ABCDHK2EQU 1234HMOVAH,HIGH K1MOVBL,LOW K2汇编时,计算表达式形成指令为:MOVAH,0ABHMOVBL,34H,2023/7/19,信息工程学院,28,1圆括号():()中的运算符具有最高优先权。2方括号:方括号主要用来表示存储器的偏移地址。,六、其它运算符,2023/7/19,信息工程学院,29,表达式的计算原则:同级运算符从左到右的,圆括号()可改变优先级次序。运算符的优先级别如下表所示。,七、优先级,2023/7/19,信息工程学院,30,4.2.3 模式定义伪指令,格式:.MODEL 存储模式功能:定义程序的规模,也就是选择程序在内存中存储模式的大小。,具有7种模式。(1)TINY:只有1个逻辑段。产生COM程序(2)SMALL:可有1个代码段和1个数据段(3)COMPACT:可以有1个以上数据段,但是只有1个代码段(4)MEDIUM:可以有1个以上代码段,但是只有1个数据段(5)LARGE:数据段和代码段均可以有1个以上(6)HUGE:允许数据段大于64KB,可以有多个数据段和多个代码段(7)FLAT:允许有一个长达512KB的段,用于存储代码数据注意对于简化段定义,模式定义不能缺少,2023/7/19,信息工程学院,31,4.2.4 段定义伪指令,段定义语句进行段定义,段分配语句明确段和段寄存器之间的关系。1段定义语句SEGMENTENDS格式:段名 SEGMENT【定位类型】【组合类型】【字长选择】【类名】逻辑段内容 段名 ENDS功能:将一个逻辑段定义成一个整体。段名是逻辑段的标识符,不可省略。它确定了逻辑段在存储器中的地址,SEGMENT和ENDS前的段名必须相同。SEGMENTENDS是段定义的伪指令助记符,任何一个逻辑段必须以SEGMENT开始,ENDS结束,不可省略,并且必须成对出现,两者之间是本逻辑段的内容。,2023/7/19,信息工程学院,32,定位类型(Align Type)定位该段起始地址。定位类型参数主要有下面4种。PARA指定定位段的起始地址必须在节的整数边界,参数缺省时,就当成PARA。BYTE指定该段起始地址定位在存储单元的任何字节地址。WORD指定该段起始地址定位在字的边界,即段的首地址必须是偶数。PAGE指定该段起始地址定位在页的边界,即段的首地址必须是256的整数倍。,2023/7/19,信息工程学院,33,组合类型(Combine Type)决定逻辑段之间的组合方式,告诉连接程序本段与其他段的关系,主要参数有6种。NONE该段与其它同名段不连接,各段独立,可作为缺省参数。PUBLIC该段与其它同名段连接时,由低地址到高地址连接,组成一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。COMMON该段在连接时与其它模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。,2023/7/19,信息工程学院,34,AT表达式定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。通常各逻辑段在存储器中的位置由系统自动分配,当要求某逻辑段在指定节的边界上时,就要用AT参数来实现。AT不能指定代码段。STACK指定该段为堆栈段,此参数在堆栈段中不可省略,多个模块只需设置一个堆栈段,各个模块中的堆栈段采用覆盖方式组合。容量为各个模块中所设置的最大堆栈段容量。MEMORY定位该段与其它模块中的同名段有相同的首地址,采用覆盖方式在存储器中组合连接,其功能与COMMON参数类似,区别是第一个带MEMORY参数的逻辑段复盖在其它同名段的最上层,其它带此参数的同名段按照COMMON方式处理。,2023/7/19,信息工程学院,35,类名(C1ass Name)汇编程序连接时将所有分类名相同的逻辑段组成一个段组。分类名可选择不超过40个字符的名称。注意:SEGMENT后面带有的三个参数必须按格式中规定的先后次序排列,但各段仍然是独立的,分类名必须用单引号 括起来。,2023/7/19,信息工程学院,36,2段分配语句(ASSUME):将逻辑段定义成代码段、数据段、堆栈段、附加段。用户可以设置多个逻辑段,但只允许4个逻辑段同时有效。格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名功能:定义4个逻辑段,指明段和段寄存器的关系。ASSUME为伪指令助记符,放在代码段的开始,不可省略。说明当前代码段、数据段、堆线段、附加段4个段如何定义。段名必须是用段定义语句SEGMENTENDS定义过的名字。ASSUME NOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUME ES DS:NOTHING,2023/7/19,信息工程学院,37,注 意:代码段和数据段必须分配,附加段可以省略。ASSUME伪指令只将代码段的段基址自动装入CS寄存器中,而不能自动把其它段基址装入相应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。堆栈段:将段基址送入SS寄存器外,还要将栈顶偏移地址置入堆栈指示器SP中。(只要定义堆栈段时使用了关键字STACK,连接程序会自动给SS和SP赋值,无需人工初始化。),2023/7/19,信息工程学院,38,3段寄存器的装入:不能把各段的段基值装入相应段寄存器中,只有将段基址装入相应的段寄存器中,该段才被定义成当前段,才可以被处理器访问。,DS和ES装入,CODESEGMENTASSUMECS:CODE;定义CODE为代码段ASSUMEDS:DATA_DS;定义DATA_DS为数据段ASSUMEES:DATA_ES;定义DATA_ES为附加段START:MOVAX,DATA_DS;MOVDS,AX;MOVAX,DATA_ES;MOVES,AX;MOVAL,DBYTE1;MOVES:DBYTE22,AL;将AL中的数据送到DATA_ES 段中DBYTE2单元。,2023/7/19,信息工程学院,39,(2)SS装入,DATA_STACK SEGMENTSTACKDW40HDUP(?);80H个字节单元TOPLABELWORD;定义TOP(SS=0080H)DATA_STACKENDS;区别:DATA_STACK SEGMENTSTACKDATA_STACKENDSCODESEGMENTASSUMECS:CODE,SS:DATA_STACKSTART:MOVAX,DATA_STACKMOVSS,AXMOVSP,OFFSETTOP,在堆栈段定义时,选择STACK选项,则会自动SS、SP相应的值如果没有选择STACK选项,则应同DS、ES一样用指令实现对SS和SP装入初值。,2023/7/19,信息工程学院,40,(3)CS装入,按照结束伪指令指定的地址装入CS和IP。格式:END【起始地址】;起始地址可用标号、表达式或逻辑地址表示。程序运行时:调用、转移、中断、复位 自动修改CS和IP,END MAIN,2023/7/19,信息工程学院,41,格式1:变量名 助记符 操作数,操作数;注释格式2:变量名 助记符 n DUP(操作数,操作数);注释功能:指定变量的存储单元,以分配存储空间或存入操作数。变量名用符号表示,可以省略,后面不跟冒号。汇编时将变量助记符后的第一个字节的偏移地址作为它的符号地址。助记符所用伪指令助记符主要有:DB:用来定义字节;DW:用来定义字;DD:用来定义双字;DQ:用来定义四个字;DT:用来定义十个字节;REAL4/8/10:用来定义实数;操作数操作数可以是常数,字符串,变量,标号,表达式等。多个操作数之间必须用逗号分开;格式2中,n必须是正整数。,4.2.5 数据定义伪指令,2023/7/19,信息工程学院,42,DA1DB 10H,52H;变量DA1中装入10H,52HDA2DW 1122H,34H;变量DA2中装入22H,11H,34H,00HDA3DD 5*20H,0FFEEH;变量DA3中装入A0H,00H,00H,00H,;EEH,FFH,00H,00H,2023/7/19,信息工程学院,43,操作数是字符串FIRSTDB HELLO;字符串HELLO的ASII码装入FIRST开始的存储单元SECONDDW OK;字符串OK的ASII码装入SECOND开始的存储单元,2023/7/19,信息工程学院,44,操作数用?定义不确定值的变量,用作保留存储空间。M1DB?;定义变量M1为不确定字节,保留l字节空间 M2DW 0D55H,?;定义变量M2第二个字为不确定,保留两个字节空间,2023/7/19,信息工程学院,45,操作数用DUP来定义重复变量(DUP前有空格)ONE DB 5 DUP(0);重复5个0存入ONE起始的存储单元 TWO DW 10 DUP(?);重复10次,保留10个字的存储单元 THREE DB 4 DUP(1,2 DUP(20H);DUP嵌套,2023/7/19,信息工程学院,46,共两种:赋值语句EQU,等号语句。它们均不占用内存。,1赋值语句EQU:格式:符号名 EQU 表达式功能:给变量、标号、常数、指令、表达式等定义一个符号名一经定义在同一个程序模块中不能重新定义,4.2.6 符号定义伪指令,3解除语句PURGEPURGE符号1,符号2,符号n,2等号语句等号语句“”与EQU语句具有相同功能区别:EQU左边的标号不允许重新定义,用“”定义的语句允许重复定义。,2023/7/19,信息工程学院,47,例 COUNT EQU100;常数值赋给符号名COUNT DATA EQUCOUNT2;表达式值赋给符号名DATA A1 EQUBXSI;变址寻址存储单元内容赋给符号名A1 B1 EQUOFFSET A1;偏移地址值赋给符号名B1 C1 EQUADD;加法指令赋给符号名C1注意:在EQU语句右边表达式中的变量或标号,必须预先定义。,例(部分代码有的编译器不支持)COUNT100 COUNT COUNT 10,2023/7/19,信息工程学院,48,过程也称作子程序。节省内存空间,便于进行模块化程序设计。格式:过程名 PROC 属性;过程内容 RET N 过程名 ENDP功能:定义一个过程,主程序可以用CALL指令调用它。过程名:过程的名字,不可缺省。子程序入口地址。过程名具有三种属性:段属性:该过程所在段的段基址。偏移地址属性:该过程第一个字节与段首址之间距离字节。距离属性:为NEAR或FAR。NEAR允许过程在段内调用;FAR允许过程在段间调用,NEAR为缺省使用。PROC的距离属性一定要与CALL指令的距离属性一致,否则编译虽能通过,但运行时会出错,与断点保护方法不同有关。,4.2.8 过程定义伪指令,2023/7/19,信息工程学院,49,PROCENDP过程定义伪指令助记符,成对出现,不可缺省。二者前面有相同的过程名。RET N为过程内部的返回指令。(FAR过程和NEAR过程的RET指令机器码不一样,FAR过程返回时出栈2次,NEAR过程返回时出栈1次)过程内部至少有条RET指令,可以在过程的任何位置,使过程返回到主程序。过程内部可以有多个RET,表示此过程具有多个返回出口(在不同条件下,从不同出口返回)。N为弹出值,表示返回后自自栈顶开始有N个字节作废,N必须为正偶数,可以缺省。过程调用允许嵌套和递归调用。嵌套与递归的深度由堆栈段的容量决定。,2023/7/19,信息工程学院,50,DATASEGMENT ONE DB 22,33,44,55 TWO DB 55,66,77,88 SUM DB 20 DUP(?)DATA ENDSSSTACK SEGMENT STACK STT DB 50 DUP(?)TOP EQU LENGTH STTSSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAMAIN PROC FARSTART:MOV AX,STACK;堆栈指针可以不要初始化 MOV SS,AX MOV SP,TOP PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX,用过程调用的方法,将内存中N个BCD码相加。,2023/7/19,信息工程学院,51,MOV SI,OFFSET ONE;SI指向第一个加数 MOV BX,OFFSET TWO MOV DI,OFFSET SUMCLD;清方向标志CLC;清进位标志 MOV CX,4LL:CALL ABC LOOP LL RETMAIN ENDPABC PROC NEAR;完成单字节数据加法运算 LODSB;【SI】AL,SI+1SI L1:ADC AL,BX;相加 DAA;十进调整 STOSB;ALDI,DI+1DI INC BX;指针改变 RETABC ENDPCODE ENDS END START,2023/7/19,信息工程学院,52,4.2.9 程序计数器与定位指令,$来保存当前正在汇编的指令的地址。例ORG$6;表示从当前地址跳过6个字节ABC DW 1,2,$4,0AH,0DH,$3设:ABC的偏移地址为1000H则:相当于ABC DW 1,2,1008H,0AH,0DH,100DHABC在内存中的存放结果如右图。,1程序计数器$:,2023/7/19,信息工程学院,53,2定位伪指令ORG:,格式:ORG 表达式 功能:给汇编程序设置位置指针,指定下面语句的起始偏移地址。ORG是伪指令助记符,不可缺省。ORG语句可以放在程序的任何位置。表达式给定的偏移地址值,表达式的计算结果必须是正整数。,2023/7/19,信息工程学院,54,例 用ORG改变数据段地址DATA SEGMENTORG 100H A1DB 10H,20H,30H;A1偏移地址100HORG200HA2DW 3031H,3233H;A2偏移地址200HDATAENDS,例 用ORG指定代码段地址CODE SEGMENTORG 100H ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART:;指定代码段起始地址偏移100HMOV AX,DATA CODEENDS,2023/7/19,信息工程学院,55,4.2.10 条件汇编指令,IFXX条件;程序段ELSE;程序段ENDIF,IF表达式/IFE表达式功能:表达式值不为0,汇编程序段1,否则跳过/表达式值为0,汇编程序段1,否则跳过IF1条件1/IF2条件2功能:汇编过程需要扫描两边源程序,第一遍判断条件1是否为真,第二遍判断条件2是否为真IFB/IFNB符号功能:符号已经定义,汇编程序段1,否则跳过/参数不为空格,汇编程序段1,否则跳过。IFDEF 符号/IFNDEF符号功能:符号已经定义,汇编程序段1,否则跳过/符号未定义,汇编程序段1,否则跳过。IFIDN/IFIDF 功能:字符串参数1与字符串参数2相同,汇编程序段1,否则跳过/字符串参数1与字符串参数2不相同,汇编程序段1,否则跳过,2023/7/19,信息工程学院,56,4.2.11 记录与结构伪指令(不作要求),1、记录定义记录格式记录名 RECORD 字段名:宽度=表达式,字段名:宽度建立记录变量变量名 记录名 引用记录WIDTH 记录名/字段名,例:data_RECORDRECORDd1:1,d2:2,d3:2,d4:2,d5:2A1data_RECORDA2data_RECORDMOVAL,WIDTH data_RECORD,2023/7/19,信息工程学院,57,2、结构定义结构格式结构名STRUC结构名ENDS建立结构变量变量名 结构名引用结构结构变量名.结构字段名或者,用指向结构变量的地址寄存器,再加上圆点和结构字名:结构变量名.结构字段名,4.2.11 记录与结构伪指令(不作要求),2023/7/19,信息工程学院,58,4.2.12 模块定义伪指令,1NAME:格式:NAME 程序名功能:为源程序目的模块赋名字。NAME为伪指令助记符,放在程序开始,在输出汇编语言源程序的列表文件时,将在每一页的开头打印出该程序名。若源程序中省略NAME伪指令,汇编程序将源文件名作目标模块的名字。,2023/7/19,信息工程学院,59,2外部伪指令功能:程序中包含多个模块时,有些程序或数据在各个模块间要相互共享,可用外部伪指令PUBLIC和EXTRN来实现此功能。其中PUBLIC用来定义共享模块,EXTRN用来调用共享模块。【格式】PUBLIC 名称,名称,;注释 EXTRN 名称:类型,名称:类型,;注释(1)PUBLIC伪指令助记符,不可缺省 名称本语句的操作数,它是本模块中已经定义过的变量,标号或常数,可供其它模块共享。多个名称之间用逗号分开,不可缺省。(2)EXTRN伪指令助记符,不可缺省。名称其它模块中用PUBLIC语句定义过的变量,标号或常数,供本模块引用,不可缺省。名称后面紧跟冒号“:”。,4.2.12 模块定义伪指令,2023/7/19,信息工程学院,60,类型属性是指该名称应具有的属性。若所定义的名称是变量,则类型为BYTE或WORD;若名称是标号,则类型为NEAR或FAR;若名称是常数则类型为ABS。类型属性应与在其它模块中被定义时的属性相同。说明:多个名称之间用逗号,将它们分开。EXTRN语句的引用,必须与已用PUBLIC语句定义过的名称相呼应。,2023/7/19,信息工程学院,61,DOS:Disk Operating SystemDOS功能文件管理:磁盘上文件建立、文件删除、文件读写和文件检索。设备管理:对显示器、键盘、打印机、磁盘及异步通信等I/O设备管理ROM BIOS:一部分固化于系统内存ROM中的部分管理软件。(FE000HFFFFFH)调用方式:软件中断调用在DOS系统中有两层内部子程序可供用户使用,即基本输入输出子程序BIOS和DOS功能模块,编写汇编语言程序时可以直接调用。表DOS常用的软中断命令,4.4 BIOS和DOS的功能调用,1、读写磁盘扇区的软件中断INT25H和INT26H2、退出程序的软件中断Int 20h,程序段前缀,DS段首地址:INT 20H的代码Int 21h,返回DOSInt 27h,驻留退出,2023/7/19,信息工程学院,62,DOS系统功能调用是通过中断指令INT 21H 来进行,通过功能号确定不同功能的调用。提供给用户的功能号为00H62H。DOS系统调用方法:置入口参数;功能号送AH寄存器;执行中断指令INT 21H。在置入参数,确定功能号后,执行指令INT 21H,即调用DOS的相应子程序。调用结束后若有出口参数,一般存放在指定的寄存器中,或由屏幕显示。,4.4.3 DOS系统功能调用,2023/7/19,信息工程学院,63,常用DOS功能表,INT 21的使用方法:,2023/7/19,信息工程学院,64,下面介绍常用的几种功能。1、键盘单字符输入 有三个功能号:01H,07H和08H。(01H最常用)01H功能:扫描键盘,等待按键;若有键按下,将相应键的ASCII码读入,并判断是否是CTRL+C键;如是,则退出命令的执行;否则将键值送入AL寄存器,同时送显示器显示。08H功能:与01H功能调用相似,但不显示。07H功能:从标准键盘输入字符到AL,无回显不检测CTRL+C键,属于直接控制台输入。例如:MOV AH,01H INT 21H,2、字符串输入:功能号为0AH:从键盘接收字符串到用户定义的输入缓冲区,直到输入回车符为止。缓冲区第一个字节指出缓冲区所接收的最多字符数,第二个字节存放实际输入字符数,从第三个字节开始存放输入的字符。调用时要求使用DS:DX指向输入缓冲区首址。,2023/7/19,信息工程学院,65,【例】DOS功能调用,输入字符串。解:调用0AH功能模块,程序如下:DATA SEGMENT BUFF DB 100;定义缓冲区长度 DB?;保留为系统填写实际输入的字符数 DB 100 DUP(?);定义20个字节的存储空间 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,2023/7/19,信息工程学院,66,START:MOV AX,DATA MOV DS,AX LEA DX,BUFF MOV AH,0AH;输入字符串 INT 21H MOV AH,4CH;返回调用模块 INT 21H CODE ENDS END START,2023/7/19,信息工程学院,67,3、单字符显示功能号为2H:它要求将要显示的字符的ASCII码值送入DL寄存器 MOVDL,:MOVAH,2INT21H,2023/7/19,信息工程学院,68,4、字符串显示功能号为9H:要求DS:DX指向串地址首址,并且字符串必须以$字符为结束。例 DATA SEGMENT MES DB PRESS ANY KEY.$DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AXLEA DX,MES MOV AH,9 INT 21H CODEENDSENDSTART,2023/7/19,信息工程学院,69,5、返回操作系统 返回DOS系统,功能调用号为4CH。调用过程如下:MOV AH,4CH INT 21H,2023/7/19,信息工程学院,70,例:通过人机对话从键盘输入一字符串,存入BUFIN为首地址的内存区,并在显示器显示该字符串。,功能号AH,09H,01H,09H,0AH,09H,4CH,综合举例:,2023/7/19,信息工程学院,71,DATA SEGMENTSTRING1DB DO YOU WANT TO INPUT DB STRING?(Y/N),0DH,0AH,STRING2DB PLEASE INPUT STRING.DB 0DH,0AH,BUFIN DB 20H,?;20H为设置长度,?为实际输入长度BUFINI DB 20H DUP(?);实际输入的字符串存放区DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART PROC FARBEGING:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX;定义使用DS,ES LEA DX,STRING1 MOV AH,09H INT 21H;显示STRING1提示 MOV AH,01H INT 21H;从键盘输入1个字符至AL,2023/7/19,信息工程学院,72,CMP AL,YJNE DONELEA DX,STRING2MOV AH,09HINT 21H;显示STRING2提示LEA DX,BUFINMOV AH,0AHINT 21H;从键盘输入字符串至BUFINMOV AL,BUFIN1CBW;计算BUFIN 末地址LEA SI,BUFIN2ADD SI,AX;SI 指向原输入回车位置MOV SI,;字符串结尾为MOV AH,09HLEA DX,BUFIN2INT 21H;显示输入的字符串,无长度DONE:RETSTARTENDPCODEENDSEND BEGIN,2023/7/19,信息工程学院,73,2023/7/19,信息工程学院,74,

    注意事项

    本文(《汇编语言设计》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开