汇编程序及试验一.ppt_第1页
汇编程序及试验一.ppt_第2页
汇编程序及试验一.ppt_第3页
汇编程序及试验一.ppt_第4页
汇编程序及试验一.ppt_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 汇编语言程序设计,白 云 飞 ,微型计算机原理与接口技术,本章主要内容:,汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计,微型计算机原理与接口技术,4.1 汇编语言源程序,了解: 计算机的三种语言 源程序的结构 汇编语言语句格式,微型计算机原理与接口技术,一、计算机设计语言,机器语言 汇编语言 高级语言,面向机器 的语言,机器语言,汇编语言,高级语言,微型计算机原理与接口技术,汇编程序,汇编语言源程序,用助记符编写,源程序的编译程序,汇编程序,汇编语言源程序,机器语言目标程序,微型计算机原理与接口技术,汇编程序的功能,汇编程序的主要功能是将由汇编语言(助记符)编写的源程序翻译成用机器语言(二进制代码)编写的目标程序。下图可用以说明这个功能。,微型计算机原理与接口技术,汇编程序的功能,目标代码文件:其中的地址数据还是浮动的(相对的),不能直接运行; 列表文件:包含程序的逻辑地址、代码程序及源程序对照清单,附有引用符号表,可用DOS的TYPE命令输出; 交叉索引文件:包含了符号定义行号和引用行号,不能用TYPE命令输出,需要执行CREF文件后生成索引列表文件(REF)才能输出。,观察可得:汇编语言源程序作为汇编程序(MASM或ASM)这个“翻译”的输入, 而这个“翻译”的输出是三个文件:,微型计算机原理与接口技术,取值运算符,OFFSET 取得其后变量或标号的偏移地址 SEG 取得其后变量或标号的段地址,TYPE 取变量的类型 LENGTH 取所定义存储区的长度 SIZE 取所定义存储区的字节数,用于分析存储器操作数的属性,微型计算机原理与接口技术,取值运算符,取值运算符的格式: (1)SEG 求段基址 格式:SEG 符号名 (2)OFFSET 求偏移地址 格式:OFFSET 符号名 (3)TYPE 求符号名类型值 格式:TYPE 符号名,微型计算机原理与接口技术,取值运算符,(4)SIZE 求为符号名分配的字节数 格式:SIZE符号名 (5)LENGTH 求为符号名分配的项数 格式:LENGTH 符号名 注意:SIZE和LENGTH要求为符号名定义的数据项必须是用重复格式DUP()定义的。,微型计算机原理与接口技术,取值运算符例,MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA,等价于,微型计算机原理与接口技术,取值运算符例,若BUFFER存储区是用如下伪指令定义: BUFFER DW 200 DUP(0) 则: TYPE BUFFER 等于2 LENGTH BUFFER 等于200 SIZE BUFFER 等于400 注意:SIZE=TYPE*LENGTH,微型计算机原理与接口技术,属性运算符,属性运算符PTR 用于指定其后存储器操作数的类型 格式:(类型) PTR(符号名) 例1:MOV BYTE PTRBX,12H 例2:已知内存变量D1是字节属性,要把它 的两个字节内容送到AX中。 MOV AX, WORD PTR D1,微型计算机原理与接口技术,其它运算符,方括号: 方括号中内容为操作数的偏移地址 段重设符 段寄存器名: 用于修改默认的段基地址 例: MOV AX,BX MOV AX,ES:BX,微型计算机原理与接口技术,4.2 伪指令,掌握: 伪指令的格式及实现的操作 伪指令的应用,微型计算机原理与接口技术,伪指令,由汇编程序执行的“指令系统”。伪指令没有对应的机器指令,它不是由8086/8088CPU来执行,而是由MASM-86识别,并完成相应的功能。 用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等,微型计算机原理与接口技术,标号名,伪指令,操作数,注释,,,伪指令语句格式,这是一个任选字段。标号名后面不能用冒号“:”,这是它与指令语句的突出区别。不同的伪指令,标号名可以是常量名、变量名、过程名、结构名、记录名等。它们可以作为伪指令语句和指令语句的操作数,这时,标号名就表示一个常量或存储器地址。,这是伪指令语句不可省略的主要成分。伪指令种类很多,如定义数据伪指令DB,DW,DD;段定义伪指令SEGMENT;定义过程伪指令PROC等。它们是伪指令语句要求汇编程序完成的具体操作命令。,本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一个常数、字符串、常量名、变量名、标号、一些专用的符号等。,这是一个任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。,伪指令语句格式,微型计算机原理与接口技术,伪指令,MASM-86识别的伪指令可分成以下几类: (1)符号定义伪指令 (8)定位伪指令 (2)内存数据定义伪指令 (9)列表伪指令 (3)段定义伪指令 (10)系统隐含进位制伪指令 (4)段寄存器说明伪指令 (11)连接伪指令 (5)子程序定义伪指令 (12)记录伪指令 (6)模块开始伪指令 (13)结构伪指令 (7)模块结束伪指令 (14)块注释伪指令 (15)宏命令伪指令,微型计算机原理与接口技术,符号定义伪指令,格式: (1)名字EQU表达式 (2)名字=表达式 作用:把表达式的值赋给符号名。 区别:在同一程序中,用EQU语句赋值的符号名不能被重新赋值,但用“=”号赋值的符号名可以被重新赋值。 “ ”号表示此项不能缺省,但该符号不需要输入。,微型计算机原理与接口技术,符号定义伪指令,例: CONSTANT EQU 100 VAR EQU 30H+99H,EQU说明的表达式不占用内存空间,微型计算机原理与接口技术,内存数据定义伪指令,用于定义数据区中变量的类型 此指令主要有以下五大类:,字节定义伪指令DB 定义的变量为字节型 字定义伪指令DW 定义的变量为字类型 四字节定义伪指令DD 定义的变量为双字型 八字节定义伪指令DQ 定义的变量为4字型 十字节定义伪指令DT 定义的变量为10字节型,微型计算机原理与接口技术,字节定义伪指令,格式: 名字 DB表达式或数据项表 表达式值或项表中的每一项是一个字节数,它们从符号名地址开始按字节连续存放,直到表中数据项结束(地址递增方向)。方括号 表示该项可以缺省。,字定义伪指令,格式: 名字 DW 表达式或数据项 除表达式值或项表中的每一项是两个字节数之外,其它与DB伪指令相同。,微型计算机原理与接口技术,四字节定义伪指令,格式: 名字 DD表达式或数据项 表达式值或项表的每一项是四个字节数。,八字节定义伪指令,格式: 名字 DQ 表达式或数据项表 表达式值或数据项表的每一项是八字节数,各项从小地址一端连续存放,允许浮点数形式,与DD伪指令相同。高四个字节填0。,微型计算机原理与接口技术,十字节定义伪指令,格式: 名字 DT表达式或数据项表 表达式值或数据项表的每一项是10个字节数,允许浮点数形式,与DQ伪指令相同,若项表中的数据项是十进制整数书写的,汇编程序按组合的BCD码格式存放,最低字节在高地址一端存放,数据的最高字节的最高位是符号位,“0”表示正,“1”表示负。,微型计算机原理与接口技术,数据定义伪指令,该伪指令主要为数据项分配存储单元并预初值。 该伪指令构成的语句格式是: DB 变量名+ DW +表达式1,表达式2, DD 其中表达式1,表达式2,是给变量赋予的初值。表达式可以有如下几种情况: (1)数值表达式 (2)?表达式 (3)字符串表达式 (4)带DUP表达式,微型计算机原理与接口技术,数值表达式,例如: DA_BYTE DB 50H, 50 DA_WORD DW 0A3F1H, 4981H 变量DA_BYTE的内容为50H,它的下一个字节为32H。DA_WORD字单元内容为0A3F1H,它的下一字单元为4981H。,?表达式,不带引号的?表示可预置任何内容。 例如: DA_B DB ?, ? DA_W DW ?, ? 第一条语句是要求汇编程序分配两个字节单位,第二条语句是要求分配两个字单元。这些单元里现在可以是任意值。,微型计算机原理与接口技术,字符串表达式,DB伪指令:为字符串中每一个字符分配一个字节单元。字符串必须是用引号括起来且不超过255个字符。字符串自左至右以字符的ASCII码按地址递增的排列顺序依次存放。 DW伪指令:可以给两个字符组成的字符串分配两个字节存储器单元,且这两个字符ASCII码的存储顺序是前一字符在高字节,后一字符在低字节,每一个数据项不能多于两个字符。 DD伪指令:仅可给两个字符组成的字符串分配四个字节单元,且这两个字符ASCII码是存储在两个低字节中,两个高字节均存放00H。,微型计算机原理与接口技术,字符串表达式,动画,STRING1 DB ABCDEF STRING2 DW AB,CD, EF STRING3 DD AB,CD,微型计算机原理与接口技术,带DUP表达式,DUP是定义重复数据操作符。 使用DUP操作符格式是: DB 变量名+ DW +表达式1 DUP (表达式2) DD 其中表达式1是重复的次数,表达式2是重复的内容 例如: BB1 DB 12H DUP(ABCD) BB2 DW 10H DUP(4),微型计算机原理与接口技术,ARRAY1 DB 2 DUP(0,1,2,?),ARRAY2 DB 100 DUP(0, 2 DUP(1,2), 0, 3),700bytes,ARRAY2,例 题,动画,微型计算机原理与接口技术,内存数据定义伪指令例题, VAR1 DB 32H,ABC VAR2 DW 1234H,40H,AB DD 12345678H DB ?, 11000011B ARRY1 DB 2 DUP(0,1) ARRY2 DW 2 DUP(?,1) ,微型计算机原理与接口技术,段定义伪指令,存储器在逻辑上是分段的,各段的定义由伪指令实现 格式: 段名SEGMENT定位方式连接方式类 别名 : 段名ENDS 段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB(字节)。SEGMENT后面的参数是可选项。,微型计算机原理与接口技术,定位方式,定位方式制定段的起始地址边界,方式有以下四种: (1)PAGE:指定起始地址的低8位是0,即其值能被256整除(称为页边界)。 (2)PARA:指定起始地址的低4位是0,即其值能16整除(称为段边界)。缺省值是PARA (3)WORD:指定起始地址的最低位是0,即其值能被2整除(称为字边界)。 (4)BYTE:指定起始地址是任意值。,微型计算机原理与接口技术,连接方式,连接方式告诉连接程序本段与其它段可按以下方式连接: (1)PUBLIC:告诉连接程序把本段与其它同名类别的段连接起来,公用一个段的起点地址,形成一个物理段。 (2)STACK:表示本段是堆栈段。 (3)空缺(NONE):表示本段不与任何段连接。 (4)COMMON:表示本段与同名同类别的段共用同一段起始地址,即同名同类的段相重叠,段的长度是最长段的长度。 (5)MEMORY:表示本段在连接时定位在所有段之上。 (6)AT表达式:本段定位在表达式值指定的段地址处。,微型计算机原理与接口技术,连接方式,NONE: 不组合,默认状态是NONE PUBLIC: 依次连接(顺序由LINK程序确定) COMMON: 覆盖连接 STACK: 堆栈段的依次连接 AT 表达式:段定义在表达式值为段基的节边界 MEMORY: 相应段在同名段的最高地址处,微型计算机原理与接口技术,类别名,类别名是合法的自定义符,它必须用单引号括起来。如代码段(CODE)、堆栈段(STACK)等。凡是类别名相同的段在连接时均按先后顺序连接起来,即不同模块连接时将相同类别的段放在连续的内存区域中。,微型计算机原理与接口技术,格式: ASSUME 段寄存器:段定义名1,段寄存器:段定义名2, 功能:说明所定义逻辑段的性质 该伪指令告诉汇编程序在汇编时,段寄存器CS:、DS:、SS:和ES:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值(CS除外)还要由传送指令在执行程序时赋值。,段寄存器说明伪指令,微型计算机原理与接口技术,例 题,DATA_SEG1 SEGMENT . (伪指令 Directives) ;数据段内定义各类程序执行需要的相关的数据 DATA_SEG1 ENDS DATA_SEG2 SEGMENT (伪指令 Directives) DATA_SEG2 ENDS ;还可根据具体程序的需要,定义堆栈段供程序执行过程中保持临时数据,微型计算机原理与接口技术,例 题,CODE_SEG SEGMENT ASSUME CS:CODE_SEG, DS:DATA_SEG1, ES:DATA_SEG2 START: MOV AX,DATA_SEG1 MOV DS,AX MOV AX,DATA_SEG2 MOV ES,AX : : : ;完成具体操作的指令序列 CODE_SEG ENDS END START,实际操作(实现X+YZ),DATA1 SEGMENT ; 数据段 X DB 05H Y DB 04H Z DB ? DATA1 ENDS CODE1 SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ; 数据段基址AX MOV DS,AX ; AX DS MOV AL,X ; 内存单元X的数据AL ADD AL,Y ; 内存单元Y的数据+ALAL, 即X+Y AL MOV Z, AL; AL内存单元Z, 即求和结果送回Z MOV AH,4CH ;送功能号 INT 21H ;系统功能调用,返回操作系统 CODE1 ENDS END START,微型计算机原理与接口技术,子程序定义伪指令,格式:过程名PROC NEAR(或FAR) : 过程名ENDP 过程名是自定义符。定义过程是为实现子程序调用而设的。 调用格式为: CALL 过程名 过程由RET指令返回,它可以不是最后一条指令,它在过程中可以设多点返回。并且过程起始名和终止名必须相同。,微型计算机原理与接口技术,例 题,CODE_SEG SEGMENT BEGIN PROC FAR CALL NEAR A CALL FAR B RET BEGIN ENDP A PROC NEAR RET A ENDP CODE_SEG ENDS,CODE_SEG1 SEGMENT B PROC FAR RET B ENDP CODE_SEG1 ENDS,微型计算机原理与接口技术,宏命令伪指令,格式: 宏名MACRO形式参数1,形式参数2, ENDM 功能: 宏命令伪指令为指令序列定义一个宏名,称为宏指令,宏名可以像指令一样在程序中引用。,. ,宏体(指令序列),宏命令源程序中由汇编程序识别的具有独立功能的一段程序代码,微型计算机原理与接口技术,宏指令的使用,宏指令的使用步骤: (1)宏定义:对各个宏指令进行定义,并分别起一个名字; (2)宏调用:在需要使用的地方,通过宏指令名来调用它; (3)宏扩展:由宏汇编程序用宏定义中的指令来代替宏调用中的宏指令名。,微型计算机原理与接口技术,宏命令伪指令,当代换指令中的符号时,在其前面需加一个宏代换符& 例如: AD1 MACRO Y,X MOV CL,X RO&Y AX,CL ENDM 宏调用:经宏代换语句定义的宏名,在应用时可直接引用,这个过程称为宏调用。 例如: AD1 R,5 注意:宏调用时,形式参数要用实在的参数取代,顺序也应与形式参数顺序相同。,微型计算机原理与接口技术,宏指令-宏命令伪指令,宏指令与过程的区别: (1)宏调用语句由宏汇编程序中的宏处理程序来识别,并完成相应的处理,而调用过程中的CALL语句由CPU来执行。 (2)汇编语言源程序在汇编过程中要将宏指令所代替的程序段汇编成相应的机器代码,每次调用均需插入到源程序的目标代码中,这样使用宏调用并不能缩短目标代码的长度。而在过程调用中,由于其目标代码与主程序分开独立存放的且在存储器中只保留一份从而能有效的缩短目标代码的长度。,微型计算机原理与接口技术,(3)过程调用时需要保留程序的断点和现场,待过程执行完毕还要恢复现场,这些操作需要耗费CPU的时间,而宏汇编则不需要进行这些操作,因此,过程调用可节省程序占有的存储空间,但会降低程序的执行速度;而宏调用不能节省存储空间,却能有较快的执行速度。 (4)在每次宏调用时允许修改有关的参数,使得同一条宏指令在各次调用过程中可完成不同的操作;而“过程”一旦被定义,一般不允许修改,因此,任何一个“过程”在各次调用中只能完成完全相同的操作。,宏指令-宏命令伪指令,微型计算机原理与接口技术,4.3 系统功能调用,一、系统功能调用概述,为给编写汇编语言源程序提供方便,MS-DOS系统中设置了几十个内部子程序,它们可完成I/O设备管理、存储管理、文件管理和作业管理等功能。其入口地址已由系统置入中断入口地址表中,在汇编语言源程序中可用软件中断指令调用它们。,DOS 功能调用 高级调用,操作系统提供 BIOS功能调用 低级调用,微型计算机原理与接口技术,DOS 功能调用,包含多个子功能的功能包,用软中断指令调用,中断类型码固定为21H 各子功能采用功能号来区分,微型计算机原理与接口技术,二、系统功能调用方法,系统功能调用中的几十个子程序成为汇编语言程序员的重要工具,调用它们时采用统一的格式,只需要使用三个语句,如下所示: (1)传送入口参数到指定寄存器中; (2)功能号送入AH寄存器中; (3)INT 21H。 有的子程序无入口参数,则只需安排后两个语句,调用结束后,系统将出口参数送到指定寄存器中或从屏幕显示出来。,微型计算机原理与接口技术,常用的系统功能调用,常用的系统功能调用有以下14个: (1)键盘输入单字符 (7)从串口输入单字符 (2)键盘输入字符串 (8)向串口输出单字符 (3)输出单字符 (9)返回操作系统 (4)输出字符串 (10)设置日期 (5)设置时间 (11)取得日期 (6)取得时间 (12)无回显键盘输入单字符 (13)直接控制台输入/输出单字符 (14)无回显直接控制台输入单字符,微型计算机原理与接口技术,键盘输入单字符,键盘输入单字符1号系统功能调用 格式: MOV AH , 1 INT 21H 说明:该调用没有入口参数,执行1号系统功能调用时,系统等待键盘输入,待程序员按下任何一键,系统先检查是否Ctrl-Break键,如果是则退出,否则将键入字符的ASCII码置入AL寄存器中,并在屏幕上显示该字符。 注意:区分1、7和8号功能,微型计算机原理与接口技术,单字符输入例,GET_KEY: MOV AH,1 INT 21H CMP AL,Y JZ YES CMP AL,N JZ NO JNZ GET_KEY YES: NO: ,交互式应 答程序,;输入的字符在AL中,当第一、二条指令执行完时,系统等待键盘按键。按下任一字符时,AL中的内容即为该字符的ASCII码,同时显示器上显示出所按下的字符。,微型计算机原理与接口技术,键盘输入字符串,键盘输入字符串 0AH号系统功能调用 格式: BUF DB 20 DB ? DB 20 DUP( ?) : : : MOV DX,OFFSET BUF MOV AH,0AH INT 21H,;代码段中0A功能调用,;字符串在内存中的存放地址,在数据段中定义缓冲区,微型计算机原理与接口技术,定义字符缓冲区,用户自定义缓冲区格式:,从第三个字节开始用来存放键入的字符串,微型计算机原理与接口技术,输出单字符,输出单字符2号系统功能调用 格式: MOV DL , A MOV AH , 2 INT 21H 说明:执行2号系统功能调用时,将置入DL寄存器中的字符从屏幕上显示输出(或打印)。,;待输出字符A送到DL中,微型计算机原理与接口技术,输出字符串,输出字符串9号系统功能调用 格式: BUF DB good bye $ MOV DX , OFFSET BUF MOV AH , 9 INT 21H 说明:执行9号系统功能调用时,将内存缓冲区BUF中存放的字符串送屏幕显示输出(或打印),缓冲区中的字符串必须以“$”字符作为结束标志。,待输出字符串的偏移地址,微型计算机原理与接口技术,例,. BUFF2 DB How do you do!$ . MOV DX,OFFSET BUFF2 ;送字符串的首地址至DX MOV AH,09H ;送功能号 INT 21H ;系统功能调用显示字符串 执行以上几条指令后,屏幕上将显示: How do you do!,微型计算机原理与接口技术,字符串输出显示例,DATA SEGMENT MESS1 DB Input String: 0DH,0AH,$ DATA ENDS CODE SEGMENT MOV AH,09 MOV DX,OFFSET MESS1 INT 21H ,微型计算机原理与接口技术,返回操作系统,返回操作系统4CH号系统功能调用 格式: MOV AH , 4CH INT 21H 说明:该调用没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。屏幕显示操作系统提示符(N),N为当前使用驱动器名。,微型计算机原理与接口技术,程序的编辑、汇编及连接过程,汇编语言的程序一般要经过编辑、汇编(MASM或ASM)、连接(LINK)和调试(DEBUG)这些步骤。 1建立源程序文件 2汇编(MASM或ASM)源程序 3程序连接 4执行程序 5调试程序,微型计算机原理与接口技术,汇编语言程序设计与执行过程,输入汇编语言源程序 源文件 .ASM 汇编(编译) 目标文件 .OBJ 链接 可执行文件 .EXE 调试 最终程序,微型计算机原理与接口技术,微型计算机原理与接口技术,实验操作步骤,在MS-DOS下,用Edit命令进入编辑状态,完成所编写程序的输入。 程序编写完成后,将文件保存为xx.asm,并退出编辑状态。 用masm命令对所编写的程序进行编译,格式如下: masm xx; 回车 用link命令对所编写的程序进行连接,格式如下: link xx; 回车 运行程序命令格式如下: xx; 回车,微型计算机原理与接口技术,实验操作步骤,用debug 命令对所编写的程序进行调试,格式如下: debug xx.exe 回车 常用的debug命令: “T”回车,单步运行程序并显示寄存器状态。 “R”回车,显示各寄存器内容。 “DDS:XX”回车,察看数据段中偏移量为XXH的内存单元中的内容。 “U”回车,反汇编当前机器码,也就是显示待执行的汇编语句。 “G XX”回车,执行内存中的可执行代码,直到偏移量为XXH的代码为止。 “Q”回车,退出DEBUG调试状态。 在提示符状态下输入“Exit”命令,退出DOS模式。,微型计算机原理与接口技术,4.4 汇编语言程序设计,设计步骤: 根据实际问题抽象出数学模型 确定算法 画程序流程图 分配内存工作单元和寄存器 程序编码 调试,微型计算机原理与接口技术,在计算机上进行程序设计过程,D:masmEDIT 输入源程序 D:masmMASM 汇编 D:masmLINK 链接 D:masmTD 调试,微型计算机原理与接口技术,分支程序,分支程序是利用条件指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的次序。这类程序使计算机有了判断作用。,微型计算机原理与接口技术,循环程序,循环程序是强制CPU重复执行某一指令系列的一种程序结构形式,凡是要重复执行的程序段都可以按循环结构设计。循环结构程序简化了程序执行过程。相反,增加了一些循环控制等环节,总的程序执行语句和时间会有所增加。 循环程序的组成: 循环程序的组成可分为初始化、循环化、循环控制和循环结束处理。,微型计算机原理与接口技术,循环程序,()初始化:完成建立循环次数计数器,设定变量和存放数据的内存地址指针的初值,装入暂存单元的初值等。 ()循环体:是程序的处理部分 ()循环控制:包括修改指针、修改变量为下一次循环作准备,以及修改循环计数器,判断循环次数完成否。 ()结束处理:主要用来分析和存放程序的结果。,循环程序基本结构框图,微型计算机原理与接口技术,循环程序例题2,例2:在一串数中找出最大值和最小值,并将最大值和最小值放在指定的存储单元中。,程序流程图,微型计算机原理与接口技术,循环程序例2程序体,DATA SEGMENT BUFFER DW X1,X2,Xn COUNT EQU $-BUFFER MAX DW ? MIN DW ? DATA ENDS PROG SEGMENT ASSUME CS:PROG, DS :DATA SEHRCH PROG FAR START : MOV AX, DATA MOV DS, AX,微型计算机原理与接口技术,循环程序例2程序体,MOV CX, COUNT SHR CX, 1 LEA BX, BUFFER MOV AX, BX MOV DX, BX DEC CX LP : INC BX INC BX CMP AX, BX JGE NET1 MOV AX, BX,微型计算机原理与接口技术,循环程序例2程序体,NEXT1: CMP DX, BX JL NEXT2 MOV DX, BX NEXT2: LOOP LP MOV MAX, AX MOV MIN, DX MOV AH, 4CH INT 21H SEARCH ENDP PROG ENDS END START,微型计算机原理与接口技术,子程序,子程序相对主程序而定,是一个子的程序段,确切地说,它是被父程序调用的程序。一般子程序具有公用性,重复性或有相对独立性的特点。,一子程序的调用与返回 子程序的调用与返回由CALL和RET指令实现。 子程序的调用实际上是程序的转移,但它与转移指令有所不同,转子指令CALL执行时要保护返回地址,而转移指令不考虑返回问题。每个子程序都有RET指令负责把压入栈后的返回地址弹出送IP或CS和IP(段间返回)实现程序返回。,微型计算机原理与接口技术,子程序,二子程序设计与应用应该注意的问题 ()现场保护与恢复 子程序使用时,要注意寄存器内容的保护。由于CPU的寄存器的数量有限,子程序使用的寄存器往往会和调用的寄存器发生冲突,破坏了调用程序中寄存器的内容,影响了子程序返回后的继续处理。为了避免这种现象,在子程序入口处把所用寄存器的内容投入堆栈,保护起来,而在退出子程序前恢复寄存器的内容是必要的。恢复现场是保护现场的逆操作。当用栈区保护现场时,应注意恢复现场的顺序。,微型计算机原理与接口技术,CALL label,RET,子程序,主程序与子程序,微型计算机原理与接口技术,子程序,()参数传递 指主程序与子程序之间相关信息或数据的传递。参数传递方式有寄存器传递,用内存单元传递或用栈区传递(寄存器、变量、地址表、堆栈等)。 ()子程序说明 由于子程序有共享性,可被其它程序调用,因此,每个子程序应有必要的使用注释。主要包括:子程序名;功能、技术指标;占用寄存器和存储单元;入口、出口参数;嵌套哪些子程序,微型计算机原理与接口技术,子程序,三子程序调用技巧 常用技巧 ()子程序嵌套 子程序调用子程序的过程。 ()子程序递归 子程序调用自身的过程。 ()可重入子程序 子程序被调用后没有执行完又被另一程序重复调用。 ()协同子程序 两个以上子程序协同完成一项任务,且又相互调用,直到任务完成。,微型计算机原理与接口技术,子程序举例,例1 编写一子程序,完成一个2位十六进制数到对应的ASCII码的转换。 子程序名: CONHA 功 能:将2位十六进制数转换成对应的ASCCII码 输入参数: AL待转换的数 输出参数: BX转换好的ASCII码 使用寄存器:AL、AH、BX、CL,微型计算机原理与接口技术,子程序程序体,CONHA PROC FAR MOV AH , AL ;保存待转换的数 AND AL , 0FH ;处理十六进制数低位 CMP AL , 0AH ;是16进制中的字母吗? JB ASC1 ;否,转移 ADD AL , 07 ;是,先加7 ASC1: ADD AL , 30H ;转换为ASCII码 MOV BL , AL ;保存转换好的低位 MOV CL , 4 ;移位控制,微型计算机原理与接口技术,子程序程序体,SHR AH , CL ;将原数右移,处理高位 CMP AH , 0AH ;是16进制中的字母吗? JB ASC2 ;否,转移 ADD AH , 07 ;是,先加7 ASC2: ADD AH, 30H MOV BH , AH ;保存转换好的高位 RET CONHA ENDP,微型计算机原理与接口技术,作业,3.1 设VAR1和VAR2为字变量,LAB为标号,分析下列指令的错误之处,并加以改正. (1)ADD VAR1,VAR2 (2)MOV AL,VAR2 (3)JNZ VAR1 3.2 假设程序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE-LIST DB 1,8,4,3,5,微型计算机原理与接口技术,3.1 ADD指令的源操作数和目的操作数不能同时为存储器单元。 源操作数和目的操作数不匹配。 条件转移指令的操作数应为标号,不能是变量。 3.2 MOV AX,OFFSET LNAME MOV SI,WORD PTR CODE_LIST CODE-LENGTH EQU $-CODE_LIST,微型计算机原理与接口技术,作业,(1)用一条MOV指令将LNAME的偏移地址放入AX (2)用一条指令将CODE-LIST的前两个字节的内容放入SI (3)写一条伪指令操作使CODE-LENGTH的值等于CODE-LIST域实际长度 3.3 在X1起始地址中,有10个有符号字节数据,统计其中正数的个数,并将个数放在AH寄存器中。下面的程序段就是为实现上述功能而编写的,但有些语句丢失了,请补充完整。,微型计算机原理与接口技术,作业,CHAR DB 10 DUP(?) (1) MOV BX,OFFSET CHAR MOV AH, 0 MOV CX, 10 ADR2: (2) MOV AL,BX (3) OR AL,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论