汇编程序及试验一.ppt
第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)则:TYPEBUFFER 等于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语句赋值的符号名不能被重新赋值,但用“=”号赋值的符号名可以被重新赋值。“”号表示此项不能缺省,但该符号不需要输入。,微型计算机原理与接口技术,符号定义伪指令,例:CONSTANTEQU100 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 ABCDEFSTRING2 DW AB,CD,EFSTRING3 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,ABCVAR2 DW 1234H,40H,AB DD 12345678H DB?,11000011BARRY1 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:不组合,默认状态是NONEPUBLIC:依次连接(顺序由LINK程序确定)COMMON:覆盖连接STACK:堆栈段的依次连接AT 表达式:段定义在表达式值为段基的节边界MEMORY:相应段在同名段的最高地址处,微型计算机原理与接口技术,类别名,类别名是合法的自定义符,它必须用单引号括起来。如代码段(CODE)、堆栈段(STACK)等。凡是类别名相同的段在连接时均按先后顺序连接起来,即不同模块连接时将相同类别的段放在连续的内存区域中。,微型计算机原理与接口技术,格式:ASSUME 段寄存器:段定义名1,段寄存器:段定义名2,功能:说明所定义逻辑段的性质 该伪指令告诉汇编程序在汇编时,段寄存器CS:、DS:、SS:和ES:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值(CS除外)还要由传送指令在执行程序时赋值。,段寄存器说明伪指令,微型计算机原理与接口技术,例 题,DATA_SEG1 SEGMENT.(伪指令 Directives);数据段内定义各类程序执行需要的相关的数据DATA_SEG1 ENDSDATA_SEG2 SEGMENT(伪指令 Directives)DATA_SEG2 ENDS;还可根据具体程序的需要,定义堆栈段供程序执行过程中保持临时数据,微型计算机原理与接口技术,例 题,CODE_SEG SEGMENT ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2START: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 ENDSCODE1 SEGMENT;代码段 ASSUME CS:CODE,DS:DATASTART: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_SEGSEGMENT BEGIN PROCFAR CALL NEAR A CALL FAR B RET BEGIN ENDP APROC NEAR RET AENDPCODE_SEGENDS,CODE_SEG1 SEGMENT BPROC FAR RET BENDPCODE_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:MOVAH,1 INT21H CMPAL,Y JZ YES CMPAL,N JZ NO JNZGET_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;送字符串的首地址至DXMOV AH,09H;送功能号INT 21H;系统功能调用显示字符串 执行以上几条指令后,屏幕上将显示:How do you do!,微型计算机原理与接口技术,字符串输出显示例,DATA SEGMENTMESS1 DB Input String:0DH,0AH,$DATA ENDSCODE SEGMENT MOVAH,09MOVDX,OFFSET MESS1INT21H,微型计算机原理与接口技术,返回操作系统,返回操作系统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;是,先加7ASC1:ADD AL,30H;转换为ASCII码 MOV BL,AL;保存转换好的低位 MOV CL,4;移位控制,微型计算机原理与接口技术,子程序程序体,SHR AH,CL;将原数右移,处理高位 CMP AH,0AH;是16进制中的字母吗?JB ASC2;否,转移 ADD AH,07;是,先加7ASC2:ADD AH,30H MOV BH,AH;保存转换好的高位RETCONHA ENDP,微型计算机原理与接口技术,作业,3.1 设VAR1和VAR2为字变量,LAB为标号,分析下列指令的错误之处,并加以改正.(1)ADD VAR1,VAR2(2)MOV AL,VAR2(3)JNZ VAR13.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,AL JS ADR1 INC AHADR1:INC BX(4)LOOP ADR2,微型计算机原理与接口技术,作业,3.4 分析下列程序,回答指定问题.XOR AX,AX INC AX NEG AX MOV BX,3FFFH ADC AX,BX 问(AX)=3FFFH(BX)=3FFFH CF=1,微型计算机原理与接口技术,作业,3.5 下列操作是利用DOS功能调用INT 21H的1号功能模块,从键盘输入字符,并存到STR起始的存储区,遇到回车符(其ASCII码为0DH)结束.提示:出口参数AL=输入字符的ASCII码.STR DB 100 DUP(?)MOV SI,OFFSET STR NEXT1:(1)MOV AH,1 INT 21H(2)MOV SI,AL(3)CMP AL,0DH,微型计算机原理与接口技术,作业,JE NEXT INC SI(4)JMP NEXT13.6 分析下面程序,指出运行结果.DATA SEGMENT SUM DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,微型计算机原理与接口技术,作业,START:MOV AX,DATA MOV DS,AX XOR AX,AX MOV BX,2 MOV CX,10 LOP1:ADD AX,BX INC BX INC BX DEC CX JNZ LOP1,微型计算机原理与接口技术,作业,MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START(1)该程序完成了什么功能?(2)程序执行完毕后,SUM单元的内容是什么?3.7 编写程序实现将键盘输入的小写字母用大写字母显示出来.,微型计算机原理与接口技术,作业,3.8 编写程序计算下面的值.2X(X10)3.9 编写一个程序段,要求比较两个字符串STR1和STR2是否完全相等,若完全相等,则设置AL=1;若不完全相等,则设置AL=-1。,微型计算机原理与接口技术,作业,3.10 设有一组无序的数据:25、46、3、75、-5、30,要求对它们进行排序,编写实现此功能的程序。3.11设有一个有符号数组,共M个字,编写一程序求其中最大的数。若要求绝对值最大的数,程序应该如何修改?又若数组元素为无符号数,求最大值的程序应如何修改?3.12 编写一程序,把20个字节的数组分成正数组和负数组,并分别计算两个数组中的数据的个数。,微型计算机原理与接口技术,微型计算机原理与接口技术,微型计算机原理与接口技术,试验一:DEBUG软件的应用,DATA SEGMENT SUM DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR AX,AX MOV BX,2,微型计算机原理与接口技术,MOV CX,10 LOP1:ADD AX,BX INC BX INC BX DEC CX JNZ LOP1 MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START,微型计算机原理与接口技术,(1)该程序完成了什么功能?(2)程序执行完毕后,SUM单元的内容是什么?,