分享
分享赚钱 收藏 举报 版权申诉 / 80

类型计算机接口技术课件第4章.ppt

  • 上传人:mcady
  • 文档编号:5378101
  • 上传时间:2019-02-25
  • 格式:PPT
  • 页数:80
  • 大小:528KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    计算机接口技术课件第4章.ppt
    资源描述:

    1、第四章 汇编语言程序设计,用汇编语言编写的程序称为汇编语言源程序,将汇编语言源程序翻译成机器语言的系统程序称为汇编程序assembler,翻译的过程叫做汇编assemble。汇编程序有两种:ASM小汇编程序, MASM宏汇编程序。,2,汇编语言指令到机器指令的示意图,3,4.1.1 汇编语言源程序的结构,数据段名 SEGMENT 数据段名 ENDS 附加数据段名 SEGMENT 附加数据段名 ENDS 堆栈段名 SEGMENT 堆栈段名 ENDS 代码段名 SEGMENT 代码段名 ENDSEND,每段以SEGMENT 语句开始,整个程序以END 语句结束,以ENDS 语句结束,下面举例来加以

    2、说明:,这是一个两个字相加的程序 DSEG SEGMENT ;定义数据段DATA1 DW 0F865H ;定义被加数DATA2 DW 360CH ;定义加数DSEG ENDS ;数据段结束ESEG SEGMENT ;定义附加段SUM DW 2 DUP(?) ;定义存放结果区ESEG ENDS ;附加段结束,CSEG SEGMENT ;定义代码段ASSUME CS:CSEG,DS:DSEG,ES:ESEG START: MOV AX,DSEGMOV DS,AX ;初始化DSMOV AX,ESEGMOV ES,AX ;初始化ESLEA SI,SUM ;存放结果的偏移地址送SIMOV AX,DATA

    3、1 ;取被加数ADD AX,DATA2 ;两数相加MOV ES:SI,AX ;和送附加段的SUM单元中HLT CSEG ENDS ;代码段结束END START ;源程序结束,6,总结:,1、标号域 语句中的标号是一个标示符,表示一条指令所在的存储单元的地址,或叫符号地址。 2、操作码域:所有指令的助记符、伪指令等都在操作码域。 3、操作数域:操作数以逗号间隔。操作数可以是常数、寄存器、标号、变量、表达式。 4、注释域:说明。 标号和操作码之间用冒号,或空格;操作码和操作数之间用空格;操作数和注释之间用分号。,7,4.1.2 汇编语言语句类型,语句类型:指令性语句、指示性语句 指令性语句由指令

    4、组成、CPU可以执行; 指示性语句用来告诉编译程序MASM如何对源程序进行汇编,它不生成目标代码,不由CPU执行,所以常称为伪操作指令; 例如:START: MOV AX,DATADATA DB 11H,12H,13H 区别:START是指令性语句的标号,它是指令的符号地址,后边通常加上“:”; DATA是指示性语句的名字,名字通常表示变量名、段名和过程名,后边不加“:”指示性语句中的操作数可以有多个,相互之间用逗号分开;,8,4.1.3 数据项及表达式,操作数可以是寄存器、存储器单元或数据项。存储器可以按字节、字、双字Double Word、四字Quad Word、十字节操作。而数据项又可以

    5、是常量、标号、变量或表达式。 1、常量:分为数字常数和字符串常数。 B:二进制 D:十进制,可以省略 H:十六进制(以字母开始的16进制数,要在前面加一个0) 字符串常数用单引号括起来,编译程序将其翻译成ASCII码。,9,2.标号Label 指令的标号由程序员确定: 不能与指令助记符或伪指令重名; 不允许由数字打头; 字符个数不超过31个; 标号代表存放一条指令的存储单元的地址; 标号可以作为程序转移、过程调用、循环控制等指令的操作数; 标号有三种属性:段、偏移量、类型 偏移量是一个16位的无符号数; 类型有两种:近过程属性NEAR(2字节)和远过程属性FAR(4字节);,10,DELAY

    6、PROCPUSH BX PUSH CX MOV BL,2 NEXT: MOV CX,2801H W20ms: LOOP W20msDEC BLJNZ NEXTPOP CXPOP BXRET DELAY ENDP,11,3.变量Variable 变量是存储器中某个数据区的首地址,在指令中可以作为存储器操作数使用;变量也具有三种属性:段、偏移量、类型 段值:一般在DS或ES寄存器; 变量的类型:有BYTE、WORD、DWORD、QWORD、TBYTE; 常用数据类型伪指令DB、DW、DD、DQ、DT来定义。 例如: NUM DB 11H,22H,33HDATA2 DW 100H,200H,长度LE

    7、NGTH:变量的个数。 大小SIZE:分配给同一变量名的所有 变量的总字节数。,变量名与标号名的区别:变量名是变量的符号地址,标号是指令的符号地址。例如: MOV AX,VAR1MOV BL,VAR2JMP DONE DONE: ADD AL,5,13,4、表达式,表达式由常数、标号、变量、寄存器和运算符组成。表达式不是指令,本身不能执行。 表达式中的运算是在汇编时完成的,而不是在指令执行时完成的。 表达式常用运算符有: 算术运算符: +、-、*、/和MOD(取余数) 逻辑运算符: AND、OR、XOR、NOT 关系运算符:EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等

    8、于)、GE(大于等于) 取值运算符:OFFSET、SEG 属性运算符:PTR 其他运算符: 、:,14,表达式中的运算符,1、算术运算符:+、-、*、/、求余(MOD)、它们运算的结果都取整数。MOV AL,8+5MOV AX,NUM+82 2、逻辑运算符 与AND、或OR、异或XOR、非NOT四种,逻辑运算符只能用于数值表达式,结果也是数值,不能用于地址表达式中。 例:AND AL,0ADH AND 0CCH 注意:逻辑运算符与逻辑运算指令在形式上相同,但是逻辑运算指令出现在指令码段,逻辑运算符出现在操作数段。,15,3、关系运算符,相等EQ、不相等NE、小于LT、大于GT、小于等于LE、大

    9、于等于GE 例: MOV AX, 4 EQ 3MOV AX, 4 NE 3 关系运算符可对两个性质相同的数据进行关系运算,这两个数据可以是数字,也可以是同一个段区域中的两个存储器地址。如果表达式成立,则运算结果为真TRUE,输出结果为全1;若表达式不成立,则表示结果为假FALSE,输出为全0。 汇编之后: MOV AX, 0MOV AX, 0FFFFH,16,SEG、OFFSET又称为数值返回运算符,用以获取变量或标号的属性。 例: MOV AX,SEG BUFFERMOV AX,OFFSET BUFFER PTR是类型运算符:CALL DWORD PTRBXMOV AL,BYTE PTRSI

    10、,4、取值运算符和类型运算符,17,4.2 伪指令,伪指令由编译程序执行,不参与程序的运行;功能:定义数据、存储区分配、定义段、定义过程等。 常用的伪操作指令: 数据定义伪指令 符号定义伪指令 设定段寄存器伪指令 过程定义伪指令 宏命令伪指令 模块定义与连接伪指令,18,4.2.1 数据定义伪指令,数据定义伪指令用来定义一个变量,说明变量的类型,给变量分配存储空间,并赋初值。一般格式为:变量名 伪操作助记符 操作数1 ,操作数2,操作数可以是常数、字符或字符串、表达式、?常用的数据定义伪操作有5种:DB: 定义字节类型的变量 如: DELY1 DB 11H,22H,33H,44HDELY2 D

    11、B HELLODATA1 DB ?,?DW:定义字类型的变量DATA2 DW 100H,200HNUM DW 1005+88,DELY1,DELY2,19,DD:定义双字类型的变量 如: DATA3 DD 35F87123H DQ:定义四字类型的变量 DT:定义十字节类型的变量,每个操作数为10个字节的压缩BCD码; SUM DQ 0011223344556677H 如果一个变量的操作数有多个,而且都一样; 可以使用重复操作符DUP 来定义:DATA1 DB 20 DUP(?)DATA2 DB 20 DUP(30),DATA3,SUM,20,2、符号定义伪指令,符号定义伪指令EQU用于给一个表

    12、达式赋予一个名字; 指令格式:符号名 EQU 表达式 表达式可以是常数、符号、数值表达式、地址表达式、甚至是一个指令助记符。 例如:DATA EQU 0DHCOUNT EQU THERE*2+1024ADDR EQU ALPHABP+SI+5 注意:若表达式中有变量,则应在EQU命令前定义。,21,例如:XYZ EQU CXLOAD EQU MOVP8 EQU DS:BP+5 注意:1、不能重复定义同一个符号。2、如果对表达式进行修改,则下面重复出现的符号名自动修改。= 可以对一个符号重复定义:FACTOR=10HFACTOR=25H,22,3、段定义伪指令,segment 和ends段定义伪

    13、指令,定义源程序中的逻辑段; 指令格式: 段名 SEGMENT 定位类型组合类型类别 段名 ENDS 定位类型:说明该段对起始地址的要求;有四种选择PARA, BYTE, WORD, PAGEPARA表示段必须从能被16整除的地址开始; 组合类型:在具有多个模块的程序中,它指示在汇编后进行连接时,该段是否和其它的段进行组合,如果一个程序不需要和其他程序组合,也可省略该项。 类别:用单引号扩起来的字符串。STACK, CODE, DATA具有相同类别的逻辑段装入连续的内存区;,23,stack segment para stack stackStack ends 该段是堆栈段,段名为stack;

    14、segment指明堆栈段开始;para说明该段必须从能被16整除的地址边界开始;stack指明组合类型;stack指明类别是堆栈类。 注意:同一个段的起始和结束必须是同一个标号名。,24,4.2.4 设定段寄存器的伪指令,该伪指令的一般格式为: ASSUME CS:CODE,DS:DATA,ES:EDATA,SS:STACKASSUME伪指令说明用SEGMENT伪指令定义的段的段基址要放在那个段寄存器中;但是段基址装入段寄存器的操作必须由程序实现。,25,Code segment para public codeassume cs:code,ds:data,es:edata,ss:stack

    15、Begin: mov ax,datamov ds,axmov ax,edatamov es,axmov ax,stackmov ss, ax 该段程序没有给CS赋值,汇编后以浮动地址形式给出。,26,4.2.5 过程定义伪指令,过程也叫子程序,过程名就是子程序的名字,也是子程序入口的符号地址,过程由PROC开始,至ENDP结束。 PROC和ENDP之间的部分是过程体,过程体内至少要有一条返回指令RET,以便在过程调用结束后返回主程序。过程定义伪指令一般格式:NAME1 PROC FAR(NEAR)RETNAME1 ENDP过程可以嵌套也可以递归;,27,例:编写一个20ms的延时子程序,DEL

    16、AY PROCPUSH BX PUSH CX MOV BL,2 NEXT: MOV CX,2801H W20ms: LOOP W20msDEC BLJNZ NEXTPOP CXPOP BXRET DELAY ENDP,28,4.2.6宏命令伪指令,宏命令名 MACRO 形式参数,ENDM 宏定义和过程定义类似,但宏定义结束符ENDM前不加宏命令名; 例如:DADD MARCO X,Y,ZMOV AX,XADD AX,YMOV Z,AXENDM 在源程序中调用:DADD DATA1,DATA2,SUM,形式参数,29,宏调用与过程的区别:,宏命令由宏汇编程序MASM在汇编过程中处理, MASM在

    17、每个宏调用处,都用其对应的宏定义体替换; 宏定义简化了源程序,但不能简化目标程序;不节省内存单元; 宏指令执行速度快;,30,例:求从TABLE开始的10个无符号数的和,结果放在SUM单元中; DATA SEGMENTTABLE DB 12H,23H,34H,45H,56HDB 67H,78H,89H,9AH,0FDHSUM DW ?DATA ENDSSTACK SEGMENTDW 50 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK,31,START: MOV AX,DATAMOV DS,

    18、AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA AX,TOPMOV SP,AXLEA SI,TABLEMOV CX,10XOR AX,AX NEXT: ADD AL,SIADC AH,0INC SILOOP NEXTMOV SUM,AX,32,MOV AH,4CHINT 21HCODE ENDSEND START,33,ORG程序起点伪指令,格式:ORG 表达式 说明程序段或数据区的开始地址,程序或数据从该单元开始存放,直到遇到一个新的ORG伪指令。汇编结束伪指令 格式: END 标号例如:END START ;源程序结束,程序从START ;处开始执行,34,4.3

    19、系统功能调用,微机的操作系统中提供的功能调用有两种,一种叫高级调用;另一种称为BIOS功能调用,也叫低级调用; DOS功能调用都是利用软中断指令INT 21H来实现的, INT 21H包含了90多个子功能 ,包括:设备管理、目录管理、文件管理和其他功能,用户可以直接使用。 DOS操作系统将所有子功能顺序编号,从0057H。,35,DOS功能调用,DOS系统功能调用的方法如下: MOV AH ,功能号 在其它寄存器中放人该功能所要求的入口叁数; INT 21H 分析出口参数。,36,1号功能:,系统扫描键盘,等待从键盘输入一个字符,将字符送入寄存器AL,不需要入口参数。如果输入的是CTRL+BR

    20、EAK,则退出调用;否则将输入的字符存入AL。 MOV AH,1INT 21H功能号1、7、8,37,例4-8 从键盘输入一个“Y”或“N”字符。 KEY: MOV AH,1 ;有回显的键盘输人。功能号1送 (AH) INT 21H ;当按下键后,返回(AL)=字符的ASCII码CMP AL,Y ;比较键人的是否是YJZ YES ; 键入字符“Y”则转至Yes语句处CMP AL,N ; 比较健人的是否是NJZ NOT ; 键人字符“N”则转至NOT语句处JMP KEY ;键入其他字符,转至KEY语句 处,继续等待键人 YES: NOT: ,38,0A号功能:输入字符串,此功能要求用户指定一个键

    21、入缓冲区来存放输入的字符串,缓冲区起始偏移地址预置入DX寄存器。缓冲区结构如图,其中第一字节为用户定义的缓冲区长度,第二个字节为实际键入的字符数(不包括回车符),它由0A号功能自动填入;从第三个字节开始存放键入的字符;若实际键入的字符数(包括回 车符)大于用户定义的缓冲区长度, 则喇叭会嘟嘟响;,DX,保存输入的字符,39,例49 从键盘上输入字符串HELLO,并在串尾加结束标志$。DATA SEGMENTSTRING DB 10,0,10 DUP(?) ;定义缓冲区DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMO

    22、V DS,AXLEA DX,STRING MOV AH ,0AH ;功能号送AH INT 21H MOV CL,STRING+l ;实际键入的XOR CH,CH ;字符个数送CL,STRING,40,ADD DX, 2ADD DX,CX ;得到字符串尾地址MOV BX,DXMOV BYTE PTRBX,$ ;插入串结束符MOV AH,4CH INT 21H CODE ENDSEND START 2、显示器输出(2、6、9) 用2号功能显示一个字符:MOV DL, MOV AH,2 INT 21H ,41,MOV DL, MOV AH,6INT 21H 用9号功能显示一个字符串: 该功能要求被显

    23、示的字符串必须以“$”结束;如果希望光标能自动换行,则应在字符串结束前加上回车及换行的ASCII码0DH和0AH;MOV DX,OFFSET CHARS;字符串起始地址送DXMOV AH,09H ;字符串显示功能INT 21H ;,用6号功能显示一个字符:,42,3退回到DOS为了能使程序正常退出并返回DOS,可使用DOS系统功能调用的4CH号功能。用4CH号功能返回DOS的程序段如下:MOV AH,4CH ;功能号送AHINT 21H ;返回DOS,MOV AX, 4C00H INT 21H,43,8086/8088汇编语言程序设计,一、程序设计的基本步骤: 分析问题 确定算法 画程序流程图

    24、 为数据和程序代码分配内存单元和寄存器 编写源程序 汇编、调试与修改,44,二、汇编语言源程序基本设计方法,1、顺序程序设计2、分支程序设计3、循环程序设计4、子程序设计 程序设计应尽量采用结构化、模块化的设计方法。将程序按功能划分成一个个独立的模块,每个模块进行独立的编辑和汇编,生成自己的源文件和目标文件,然后通过链接形成一个完整的可执行文件。,45,4.4.2 顺序程序,没有分支、没有循环、没有转移 例4-11 对于三个8位无符号数86H、34H和21H,编写S=86H34H-21H的程序。,取被乘数,求乘积,取乘数,取第三个数作操作数,做减法,结果送指定处,46,结束,初始化,取被乘数,

    25、求乘积,取乘数,取第三个数作操作数,做减法,结果送指定处,NUM DB 86H,34H,21H RESULT DW ?SI作为数据区的指针;DI作为结果指针;,47,DATA SEGMENT NUM DB 86H,34H,21H ;定义源操作数 RESULT DW ? ;定义结果存放单元 DATA ENDS CODE SEGMENTASSUME CS:CODE,DS: DATA START: MOV AX,DATAMOV DS,AXLEA SI, NUM,48,LEA DI, RESULT MOV AL, SI MOV BL,SI+ 1MUL BL ;求乘积MOV BL,SI+2 ;取第三个数

    26、作操作数MOV BH ,0 SUB AX, BXMOV DI, AX ;结果送RESULTMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START,49,例412 内存自TABLE开始的连续16个单元中存放着015的平方值(称平方表),查表求DATA中任意数X(0X15)的平方值,并将结果放在RESULT中.DSEG SEGMENT TABLE DB 0,1,4,9,16,25,36, 49,64,81,100,121,144,169,196,225 ;定义平方表 DATA DB ? RESULT DB ? ;定义结果存放单元 DSEG ENDS SSEG SEGM

    27、ENT STACK STACK STA DW 100 DUP(?) ;定义堆栈空间 TOP EQU LENGTH STA SSEG ENDS,TABLE,BX,50,CSEG SEGMENTASSUME CS:CSEG, DS:DSEG, SS:SSEGBEGIN: MOV AX,DSEG ;初始化数据段MOV DS,AXMOV AX,SSEG ;初始化堆栈MOV SS,AXMOV SP,TOP ;置堆栈指针 LEA BX,TABLE ;置数据指针 MOV AH,0MOV AL,DATA ;取待查数ADD BX,AX ;查表MOV AL,BXMOV RESULT,AL ;平方数存RESULTM

    28、OV AH,4CHINT 21HCSEG ENDSEND BEGIN,51,4.4.3 分支程序设计,条件1成立?,条件2成立?,条件n成立?,Pn+1,Pn,P2,P1,Y,Y,Y,N,N,N,判定条件,P1,P2,Y,N,分支程序的基本结构,(a),(b),52,例4-13 编写程序,将数据区中以字节变量BUFFER为首地址的100个单元清零。DATA SEGMENTBUFFER DB 100 DUP(?)COUNT DB 100 ;定义数据缓冲区长度DATA ENDSSTACK SEGMENT STACKDW 32 DUP(?)STACK ENDSCODE SEGMENTASSUME C

    29、S:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AX ;初始化数据段,53,MOV AX,STACK MOV SS,AX ;初始化堆栈段MOV CL,COUNT ;置单元长度MOV CH,0LEA BX,BUFFER AGAIN:MOV BX,0 ;实现100个单元清零INC BXINC CHCMP CH,CLJB AGAIN ;CHCL则转移MOV AH,4CHINT 21HCODE ENDSEND START,54,DATA SEGMENTBUFFER DB 100 DUP(?)DATA ENDS CODE SEGMENTASSUME CS:

    30、CODE,DS:DATA START: MOV AX,DATAMOV DS,AX MOV CX,100 ;置缓冲区长度LEA BX,BUFFER AGAIN: MOV BX,0 INC BXLOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START,55,3、循环程序设计,1、循环程序设计结构,初始化部分,工作部分,修改部分,循环结束?,结束部分,初始化部分,循环结束?,工作部分,修改部分,结束部分,先执行后判断,先判断后执行,56,例4-14 在数据段DATA1开始的80个连续的存储单元中,存放80位同学某门课程的考试成绩(0100)。编写程序统计成绩90分的

    31、人数,8089分的人数,7079分的人数,6069分以及60分的人数。将结果存放到DATA2开始的存储单元中。DATA SEGMENTDATA1 DB 80 DUP(?) ;假定学生成绩已放入这80个单元中DATA2 DB 5 DUP(0) ;统计结果的存放单元DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX,57,MOV CX,80 ;统计80个学生的成绩LEA SI,DATA1 LEA DI,DATA2AGAIN: MOV AL,SI CMP AL,90 ;与90比较JC NEXT1 ;小于90分,

    32、转NEXT1 INC BYTE PTR DI ;否则90分以上的人数加1JMP STO ;转循环控制处理NEXT1: CMP AL,80 ;与80比较JC NEXT2 ;小于80分,转NEXT2INC BYTE PTRDI+1 ;否则80分以上的人数加1JMP STONEXT2: CMP AL,70 ;与70比较JC NEXT3 ;小于70分,转NEXT3INC BYTE PTR DI+2 ;否则70分以上的人数加1,58,JMP STONEXT3: CMP AL,60 ;与60比较JC NEXT4 ;小于60分,转NEXT4INC BYTE PTR DI+3 ;否则60分以上的人数加1JMP

    33、 STO ;转循环控制处理 NEXT4 NEXT4: INC BYTE PTR DI+4 ;60分以下的人数加1STO: INC SI ;指向下一个学生成绩 LOOP AGAIN ;循环,直到所有成绩都统计完MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START,例4-15 把从MEM单元开始的l00个16位无符号数按从大到小的顺序排列。,60,DSEG SEGMENT MEM DW l00 DUP(?) ;假定要排序的数已 DSEG ENDS ;存入这200个单元中 CSEG SEGMENTASSUME CS:CSEG,DS:DSEG START: MOV AX

    34、,DSEGMOV DS,AXLEA DI,MEM ;DI指向MEM的首址MOV BL,99 ;外循环只需99次即可,;外循环体从此开始NEXT1: MOV SI,DI ;SI指向当前要比较的数MOV CL,BL ;CL为内循环计数器,循环次数每次减l;以下为内循环NEXT2: MOV AX,SI ;取第一个数NiADD SI, 2 ;指向下一个数Nj,CMP AX,SI ;比较Ni 和NjJNC NEXT3 ;若Ni 大于Nj ,则不交换 MOV DX,SI ;否则,交换Ni和NjMOV SI-2,DX MOV SI,AXNEXT3: DEC CL ;内循环结束?JNZ NEXT2 ;若未结束

    35、,则继续;内循环到此结束,DEC BL ;外循环结束?JNZ NEXT1 ;若未结束,则继续;外循环体结束MOV AX,4C00H ;返回DOSINT 21HCSEG ENDSEND START,63,例如4-21 两个多字节二进制数求和程序;DATA SEGMENTBUFF1 DB 4FH,0B6H,7CH,34H,56H,1FHBUFF2 DB 13H,24H,57H,68H,0FDH,9AHSUM DB 6 DUP(?)COUNT DB 3DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV S

    36、I, OFFSET BUFF1MOV DI ,OFFSET BUFF2MOV BX,OFFSET SUM,64,MOV CL,COUNT ;初始化计数器MOV CH,0CLC ;CF=0 GOON: MOV AX,SIADC AX,DIINC SI INC SIINC DIINC DIMOV BX,AXINC BXINC BXLOOP GOONMOV AH,4CHINT 21H CODE ENDSEND START,65,循环控制的方法,控制循环有多种方法: 1、计数器控制循环; 2、条件控制循环; 3、开关变量控制循环; 4、逻辑尺控制循环;,66,4、子程序设计,1、子程序的作用: 功能独

    37、立,可重复调用;便于程序设计模块化; 2、子程序说明:子程序名;子程序功能描述;子程序入口参数和出口参数;子程序中使用那些寄存器和存储单元;该子程序是否又调用其它子程序;子程序调用形式、举例;,67,使用子程序的注意事项:,参数传递 寄存器传递参数,常用于参数较少的情况; 堆栈传递,常用于子程序嵌套调用或递归调用; 参数表传递,适用于参数较多的情况; 变量、地址表等; 主程序现场保护: 常常是子程序用到的寄存器主程序也会用到,为了防止破坏主程序中寄存器的内容,需要在子程序入口处将其所用到的寄存器内容压栈保护。,68,子程序部分,通常一个完整的子程序由下面五个部分组成: 子程序入口:通常用子程序

    38、名作为子程序入口,也就是标号地址。 保护现场:为了不破坏主程序原有信息,进入子程序首先把子程序中将要用到的寄存器、存储单元等压入堆栈或存入空存储单元中。 子程序体 恢复现场:把前边保护的现场信息进行恢复。 子程序返回:RET指令,返回到主程序的断点处,继续执行主程序。,69,例:编写一个20ms的延时子程序,DELAY PROCPUSH BX PUSH CX MOV BL,2 NEXT: MOV CX,2801H W20ms: LOOP W20msDEC BLJNZ NEXTPOP CXPOP BXRET DELAY ENDP,子程序入口,保护现场,子程序体,恢复现场,子程序返回,70,运行汇

    39、编语言源程序,一、运行汇编语言源程序的步骤 编辑源程序,调用编辑程序(edit)建立一个扩展名为.asm的源程序文件; 汇编源程序。调用汇编程序MASM.EXE对XX.ASM进行汇编,生成XX.OBJ目标文件; 连接:调用 LINK.EXE连接程序,将XX.OBJ目标程序转换为可执行文件XX.EXE; 调试程序:调用DEBUG.COM调试程序进行调试。 运行可执行文件XX.EXE;,71,二、调试工具,Microsoft的DEBUG,支持命令行方式调试,不支持符号信息; DEBUG的更新产品是SYMDEB,支持命令行方式调试,支持符号信息; CodeView,支持全屏幕方式,能进行源程序级调试

    40、; Borland 公司的Turbo Debugger,全屏幕调试器,能进行源程序级调试; Nu-Mega Technology 公司的soft-ICE功能最强;,72,作业:,1 、2、3、4、7、12、14、15、17,73,全屏编辑软件:WPS、EDIT.COM、NE.COM、WORD、等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。,74,TASM适用于8086/8088Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的机器代码程

    41、序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。,75,辅助工具程序(.EXE),进行汇编语言程序调试有: DEBUG.COM 动态调试程序 CREF.EXE 交叉引用程序 TD(turbo Debugger简称)也是动态调试程序,可在DOS和Windows环境下运行,用户界面十分友好。,76,汇编源程序,用编辑软件建立的源程序.ASM文件,必须经过汇编才能产生.OBJ文件。为此,需键入:C:MASM 屏幕上显示: Microsoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985

    42、,1987 ALL rights reserved OBJ filename.obj: Source listingnul.lst: Cross-referencenul.crf:,77,汇编后生成以下几个文件: (1).OBJ文件 .OBJ文件是目标代码文件,当源程序中无语法错误时,则在当前工作盘上自动存入一个.OBJ文件,供下一步连接用。 若源程序有语法错误时,会出现错误信息提示:源程序文件行 错误信息代码 错误说明信息 Warning errors (警告错误) Severe errors (严重错误) 若严重错误总数不为0,则.OBJ文件没有生成,需回到编辑状态下修改源程序直到无错为止

    43、。,78,(2).LST文件(列表文件) .LST文件对调试程序有帮助,它是将源程序中各语句及其对应的目标代码和符号表以清单方式列出(3).CRF文件(交叉引用文件) .CRF文件给出了源程序中定义的符号引用情况,按字母顺序排列。.CRF文件不可显示,须用CREF.EXE系统程序将.CRF文件转换成为.REF文件后方可显示输出。,79,三、 连接目标程序 汇编后生成的.OBJ文件,其所有目标代码的地址都是浮动的偏移地址,机器不能直接运行。必须用连接程序(LINK.EXE)对其进行连接装配定位,产生.EXE可执行文件,方可运行。 在系统提示符下键入: LINK 屏幕上出现以下提示信息: Micr

    44、osoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved Run file .EXE: List File nul.map: Libraries .lib: LINK ;多了一个分号,表示结束后续询问。,80,连接后,可生成两种文件:.EXE和.MAP (1).EXE文件(可执行文件) 若连接过程中无错误,则自动在当前工作盘生成.EXE文件。若有错误,则会给出错误信息提示,这时必须重新修改源程序,再汇编、连接。 (2).MAP(连接映像文件) (3).LIB库文件 连接程序询问是否使用某种库文件,不需使用库文件直接按回车键。 (4)若要连接多个模块目标程序,可用“+”把它们连接起来。如:LINK files1+files2+files3 如: LINK ;多了一个分号,表示结束后续询问。,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:计算机接口技术课件第4章.ppt
    链接地址:https://www.docduoduo.com/p-5378101.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开