收藏 分享(赏)

汇编语言168061.ppt

上传人:dreamzhangning 文档编号:3251602 上传时间:2018-10-09 格式:PPT 页数:30 大小:373.50KB
下载 相关 举报
汇编语言168061.ppt_第1页
第1页 / 共30页
汇编语言168061.ppt_第2页
第2页 / 共30页
汇编语言168061.ppt_第3页
第3页 / 共30页
汇编语言168061.ppt_第4页
第4页 / 共30页
汇编语言168061.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、第三章 汇编语言程序设计,一、汇编语言语句,语句行组成:,标号 操作码 操作数 ;注释,至少一个空格,第一节 汇编语言的格式,不要求一个语句只能写一行,一个语句可以有后续行,规 定以字符“&”作为后续行的标志。,二、8086汇编语言源程序的格式,1 .段的定义,2 .过程(子程序)的定义,过程定义设计具有一定功能的程序段,或称为子程序。,段内调用:过程名 PROC NEAR,段间调用:过程名 PROC FAR,3.源程序典型结构,MYSTACK SEGMENT MYSTACK ENDS MYDATA SEGMENT MYDATA ENDS MYEXTRA SEGMENT MYEXTRA END

2、S MYCODE SEGMENT START: MYCODE ENDSEND START,第二节 语句行的构成,一、标记,(三)、常量(在程序运行中不会变化),1.数字常量,2.字符串常量,(四)、标识符,1-31个字母、数字及规定的特殊字符,不能用数字开头,(五)、保留字(不能用于标识符),(一)、IBM宏汇编的字符集,(二)、界符,(六)、注释(便于阅读、理解),二、符号,(一)寄存器,(二)变量,(三)标号,变量三种属性: 1.段值2.偏移量 3.类型:byte,word,double word,指令所存放单元的符号地址,三种属性: 1.段值2.偏移量 3.类型:near , far(未

3、说明则假定为NEAR),(四)数,常量,用EQU或=定义(作用:定义一个标识符代替一个表达式)。,(五)其他符号,三、表达式,1.算术运算符,+、-、*、/、MOD(余),1)用于数字操作数,2)用于地址操作数(同段内加、减),例:MOV SUM+2,ALJMP CYCLE+4JNZ NODONE-GO,2.逻辑运算符,AND、OR、XOR、NOT,与指令助记符不同,对数字操作数进行运算。,PORT EQU 09H MOV DX,PORT AND 0FEH=MOV DX,08H,3.关系运算符,EQ(相等) NE(不相等) LT(小于) GT(大于) LE(小于或等于)GE(大于或等于),表达

4、式成立,则结果为0FFH或0FFFFH 表达式不成立,则结果为00H或0000H,例:MOV BX,PORT LT 5 若PORT EQU 3 则(BX)=0FFFFH 若PORT EQU 8 则(BX)=0000H,第三节 指示性语句,一、符号定义语句,(一)EQU,作用:定义一个字符串代替一个表达式。但不申请内存。,格式: 标识符 EQU 表达式,常数、操作数寻址方式的表达式等(不允许地址标号!),例: CBD EQU ADDBRR EQU BP+8 则: MOV AL,BRR=MOV AL,BP+8CBD AL,CL=ADD AL,CL,注意:EQU定义后,除非用解除语句解除原定义,否则

5、不能重新 定义!,(二)=,与EQU类似,但可重新定义。只能定义常数。,(三) PURGE(解除 ),PURGE 标识符1,标识符2,,解除定义后,才可用EQU语句重定义标识符1,标识符2,,例:PURGE PORTPORT EQU 100,二、数据定义语句,为一个数据项分配存储单元,用一个符号(变量名,也即符号地址)与这个存储单元相联系,可以为这个数据提供初始值。,例:,NUM1 DB 32H,32 ;申请字节序列数为32H,20H,NUM2 DB A;申请一字节ASCII码为“41H”,NUM3 DB ?;申请一字节,单元中为随机数,NUM4 DB 100 DUP(0);申请100个字节,

6、预置为“0”,NUM5 DB 10H DUP(4 DUP(2),7);申请10H组预置数为“2,2,2,2,7”的单元,;共50H个单元,3220,DS:NUM1,DS:NUM2,41,00,DS:NUM3,DS:NUM4,DS:NUM5,50H 个单元,100 个单元,DUP 复制操作数 格式: 重复数 DUP (表达式) 可嵌套使用,另外:DW、DD还可用于预置变量或标号的段内偏移地址或完整地址(包括段地址)。,例: ARRAY DB 100 DUP(?)APRT DW ARRAY 100个字节首地址,例:AM DW CYCLE 段内偏移量 CYCLE: MOV BX,AX,ORG : 规

7、定段内起始地址。(段内偏移量)ORG ,三、几个操作符,1.SEG 变量名或标号,给出变量或标号的段地址,例:MOV AX, SEG NUM,2.OFFSET 变量名或标号,给出变量或标号的段内偏移地址,例:MOV AX, OFFSET NUM 对比:MOV AX,NUM,3.TYPE 变量名或标号,给出变量或标号的类型代码。(数值P.104),例:MYTYPE EQU TYPE CYCLE,4.PTR,类型符 PTR 表达式,定义或重定义类型属性。,例:OPR1 DW ?MOV BYTE PTR OPR1,ALJMP FAR PTR NEXT,5.LENGTH,返回变量中使用DUP时分配给该

8、变量的单元数,对于其他情况则回送1。,例:FEES DW 100 DUP(0)MOV CX,LENGTH FEES(CX)=100,例:ARRAY DW 1,2,3MOV CX,LENGTH ARRAY(CX)=1,6. SIZE,返回变量所分配到的字节数。,SIZE(变量)=LENGTH(变量)*TYPE(变量),例:FEES DW 100 DUP(0)MOV CX,SIZE FEES(CX)=200,例:ARRAY DW 1,2,3MOV CX,SIZE ARRAY(CX)=2,7.THIS,与PTR 类似,建立一个新类型的存储器地址操作数,并且不分配存储器。操作数类型在THIS中指定,他

9、的地址即汇编时当前值。,例:DATA SEGMENT WBUFFER1 EQU THIS WORDBUFFR1 DB 100 DUP(0),四、段定义语句,1、SEGMENT,2、ENDS,3、ASSUME,指明所定义段与段寄存器的对应关系。,格式: ASSUME 段寄存器名:段名符,段寄存器名:段名符,例: ASSUME CS:MYCODE,DS:MYDATAASSUME ES:MYEXRA ,SS:MYSTACK,注: (1) ASSUME语句一定设置于代码段内,一般在段开始处。(2)一个源程序模块能允许包括多个代码段和其他段,也允许多次使用ASSUME语句重新约定段寄存器和段的关系。(3

10、)ASSUME指明的段与段寄存器的对应关系只是一种“承诺”,除了CS寄存器放入了代码段的段地址,其他段地址还没有真正置入相应的段寄存器。,伪指令:,指令代码(助记符):MOV、ADD、INT 等,指示性语句:DATA SEGMENT、DATA ENDSCODE SEGMENT、CODE ENDSASSUME CS:CODE,DS:DATAEND START,指示性代码:DATA、CODE(段名)、START(标号), 代码段中:, 数据段中:,变量名:NUM1、NUM2、NUM3,伪指令:DB,操作数:3、5(立即数)、?(随机数),指示性语句中的SEGMENT、ENDS、ASSUME END

11、 称为“伪指令”,(1)伪指令不与任何微处理器指令对应的指示性代码或语句,称为伪指令或伪操作。(指令不占内存),(2)伪操作命令的主要功能, 程序段及存储器的分配;, 过程(子程序)定义;, 符号定义,如符号变量、标号等;, 程序模块的定义与通信;, 宏汇编及宏调用;, 条件汇编;, 格式控制,列表控制及其他功能。, 变量定义及存储器申请;,第五节 汇编语言程序设计及举例,1.编辑汇编程序的基本思路,(1)明确所设计程序的要求;,(2)数据的设置与存储器安排;,(3)寄存器的使用与安排。,2. 判断程序质量的标准(1)程序执行时间(2)程序所占内存(3)程序的语句行数,3. 程序流程图,一、概

12、述,Stack segment para stack stack,补充知识:,段名符 对接型 接合型 级名符,三个参数提供了段之间连接方式的信息,可选,不指明为默认类型,1.对接型参数:指明本段起始地址与前一段的最后地址是如何相接的。,1) PARA 本段第一个地址在段边界上(能被16整除的地址)本段在前一段结束后第一个段边界上,与前一段之间间隔取决于前一段的末地址。如前一段地址是XXXXFH,则两段之间间隔0单元,如前一段末地址为XXXX0H,则两段之间间隔最大,为15个单元。,PARA为默认的对接类型 参数。,2) WORD 本段第一个地址在字的边界开始(被2整除) 与前一段末地址之间最多

13、只能有一个空闲单元,3)BYTE 本段与前一段末地址之间无空闲单元,4)PAGE 本段第一个地址在页面边界开始(被256整除) 最多空闲255个单元间隔。,2. 结合型参数:指明段与段的结合关系。(几段是否结合成一段,如结合成一段,是一个接一个,还是互相覆盖),1) STACK 指明堆栈,产生可执行文件时自动把定义的堆栈段地址和指针地址置入SS,SP。同名段且同是STACK结合型,连为一个大的统一堆栈空间。,2)PUBLIC 同名连接为一段,接续方式,连结按对接类型规定,除了对接类型为BYTE 外,段之间可能有缝隙 。,3) COMMON 同名开始地址相同,互相覆盖。,4)AT 后跟段地址常数

14、,指明段地址后可跟ORG偏移地址常数,指明代码段开始地址。,5) MEMORY 排在可执行程序的最后,同名段互相覆盖。,3. 级名符连接时,段名不同级名相同的段被组合在一起,依次排列。不写级名,认为是“无名”级。,例:P.117 C0 D0 SISTRI1偏移地址 DISTRI2偏移地址 CXCOUNT,返回DOS,ALDS:SI, SI(SI)+1 AL(AL)+DI+C 十进制调整 ES:DI(AL), DI(DI)+1 (CX)-1=0?,STRI1,STRI2,N,Y,程序段开始:PUSH DS MOV AX,0PUSH AX,目的:程序执行之后返回DOS 进入程序时,DS中是程序段前

15、缀的起始地址,前缀中放的是一条INT 20H,返回DOS子程序P.138,因为START是FAR过程,RET是段间返回,返回时,堆栈弹 出IP、CS,指向程序段前缀INT 20H 其它返回DOS的方法:,当主程序不设计为过程(属性为FAR)时 程序末尾使用以下语句:,MOV AH,4CHINT 21H,二、算术运算程序设计,32位无符号数乘法程序,A B C D B D A DB C + A C ,部分积1,部分积2,最后乘积,部分积3,部分积4,A B C D,mulnum,B*C(L)+,A*C(L)+,A*D(L)+,B*C(H)+,AX data 段地址 DS (ax) ES (ax)

16、 BX mulnum 的EA AX bx ; B AX SI bx + 4 ; D SI DI bx + 6 ; C DI (AX) * (SI) DX: AX ;B*D BX+8 AX ; (B*D)(L) BX+0AH DX ; (B*D)(H) AX BX + 2 ; A AX (AX) * (SI) DX: AX ; A*D (AX)+ BX + 0AH AX ; (A*D)(L)+(B*D)(H) AX (DX) + 0 + CF DX ; (A*D)(H) + CF DX BX + 0AH (AX),A B C D B D A DB C + A C ,BX + 0CH (DX) A

17、X BX (AX) * (DI) DX: AX ; B*C (AX) + BX + 0AH AX ; (B*C)(L)+(A*D)(L)+(B*D)(H) (DX) + BX + 0CH + CF DX ; (B*C)(H)+(A*D)(H) BX + 0AH (AX) BX + 0CH (DX) PSW 入栈 保存后一次相加的进位位CF AX BX + 2 ; 取A (AX) * (DI) DX:AX ; A*C PSW出栈 CF+(AX)+BX+0CHAX ;(A*C)(L) + B*C(H) +A*D(H) CF + (DX) + 0 DX ; A*C(H) + C BX + 0CH (AX) BX + 0EH (DX) 返回,例3-2 32位符号数乘法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报