微机原理第四章_第1页
微机原理第四章_第2页
微机原理第四章_第3页
微机原理第四章_第4页
微机原理第四章_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

4.2.4过程定义伪指令PROC、ENDP过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。过程定义伪指令的格式为

<过程名>

PROC[类型]……RET

<过程名>

ENDP注意:PROC和ENDP必须成对出现。1过程的类型有两种:

NEAR——(默认类型)表示段内调用

FAR——表示段间调用

调用一个过程的格式为:

CALL

<过程名>24.2.5宏定义伪指令如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。指令的格式为:<宏指令名>

MACRO

[形参表]

<宏定义体>

ENDM3例:两个数之和的宏定义和宏调用。宏定义为:DADDMACROX,Y,ZMOVAX,XADDAX,YMOVZ,AX

ENDMX、Y、Z是形式参数。调用宏DADD时可写为:

DADD

DATA1,DATA2,SUMDATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。4宏调用与过程(子程序)调用都是一次定义,多次调用。它们之间的差别是:①执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理,而CALL、RET则是由CPU执行的指令。②汇编结果:宏命令伪指令汇编后被展开。③执行速度:宏命令执行速度较快(因无调用转移)④

占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。使用过程(子程序)可以节省代码占用的内存空间。5宏展开:汇编程序会把宏调用按宏定义展开。例如:宏定义为:DisplayMACROstringLEADX,stringMOVAH,9INT21HENDM程序中宏调用:……DISPLAYERROR_MESSAGEDISPLAYEXIT_MESSAGE……汇编后的结果:(带有+号的指令为宏展开后的结果)……+LEADX,ERROR_MESSAGE+MOVAH,9+INT21H+LEADX,EXIT_MESSAGE+MOV AH,9+INT21H……64.2.6汇编结束伪指令END汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。格式:END[表达式]END后跟的表达式通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。74.3DOS系统功能调用介绍系统功能调用——由OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。系统功能调用有两种,一种称为DOS功能调用,另一种称为BIOS功能调用。用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INTn来实现。在DOS系统中,功能调用都是用软中断指令INT21H来实现的。8INT2lH功能大致可以分为四个方面:设备管理、目录管理、文件管理和其它。D0S系统功能调用的使用方法如下:① AH←功能号;② 设置该功能所要求的其他入口参数;③ 执行INT21H指令;分析出口参数。以下介绍INT21H的几个最常用的功能。9关于数据输入和输出我们这里只讨论键盘输入和显示输出,调用系统功能需要提供入口参数及所调用的功能号,调用结束返回结果。1.DOS键盘功能调用(1)从键盘输入一个字符(功能号=1)

MOVAH,1INT21H<AL中有键入的字符>

10例:程序中有时需要用户对提示做出应答。GET_KEY:MOVAH,1

;等待键入字符

INT21H

;结果在AL中

CMPAL,’Y’ ;是’Y’?JZYES ;是,转YESCMPAL,’N’ ;是’N’?JZNO ;是,转NOJMPGET_KEY ;否则继续等待输入YES: …

…NO: …11(2)输入字符串(功能号=0AH)此功能调用从键盘输入一串字符并把它存入用户指定的缓冲区中。

MOVAH,

0AH

LEADX,<字符串缓冲区首地址>

INT21H

(预留的N1个字节的存储单元)

0DHN2N1N1:缓冲区长度(最大键入字符数)N2:实际键入的字符数(不包括回车符)用户定义的输入字符串的缓冲区格式12若用户键入的字符数(包括回车)≥定义的N1,本功能调用将不再接收新的键入,且光标不再向右移动。例:设在数据段定义键盘缓冲区如下:

STR1DB10,?,10DUP(?)调用DOS功能的0AH号功能的程序段为:

LEADX,STR1MOVAH,0AHINT21H此程序段最多从键盘接收10个按键(包括回车)。132.DOS显示功能调用(1)在显示器上显示一个字符(功能号=2)

MOVAH,2

MOVDL,<要显示的字符>INT21H例:在显示器上显示一个字符‘A’MOVAH,2MOVDL,’A’;或MOVDL,

41HINT21H14

MOVAH,9LEADX,<字符串>

INT21H注意:被显示的字符串必须以’$’结束。(2)显示字符串(功能号=9)15例:在屏幕上显示:’HELLO,WORLD!’;在数据段定义字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代码段中进行显示输出

MOVAH,9LEADX,STR1INT21H完整的程序:HELLOW.ASM163.退回DOS功能调用(4CH)一个实际可运行的用户程序在执行完后,应该返回到DOS提示符状态(简称为返回DOS),简单的使用HLT指令使CPU停止执行将无法将控制权交还给DOS操作系统。为了能使程序正常退出并返回DOS,可使用DOS系统功能调用的4CH号功能,用4CH号功能返回DOS的程序段如下:

MOVAH,4CH;功能号送AHINT

21H;返回DOS17BIOS功能调用BIOS:基本输入输出系统,是固化在EPROM中的一组实现基本输入输出功能的子程序。BIOS调用通过多个软中断提供,调用方法为:

MOVAH,<功能号>

<设置入口参数,一般将参数放在寄存器中> INT <中断类型>

BIOS中的几个主要中断类型如下:

INT10H——屏幕显示

INT13H——磁盘操作

INT14H——串行口操作

INT16H——键盘操作 INT17H——打印机操作 每类中断由包含许多子功能,调用时通过功能号指定。 每个中断包含的主要功能可查阅相关书籍。18汇编语言的一个实例:

HELLOW.ASM

194.4汇编语言程序设计基础4.4.1概述1.程序质量(正确性和完整性;易读性;执行时间和效率;所占内存的大小。)2.汇编语言程序设计的步骤:1-根据实际问题抽象出数学模型,确定算法2-画出程序框图(流程图)

3-分配内存工作单元和寄存器

4-根据框图编写源程序,存成.ASM文件

5-对源程序汇编,生成.OBJ目标文件

6-把.OBJ文件连接成.EXE执行文件

7-运行、调试3.源程序的基本结构:顺序、分支、循环、过程

20(1)用方框表示工作框,框中用简明语言标明要完成的功能(2)用菱形框表示判断框

框中标明比较、判断和条件如何绘制程序框图(流程图)?NY?21(4)各框之间用直线连起来表示程序走向。框中标明子程序名字(入口参数等)(3)用

框表示调用子程序或过程。22汇编语言上机过程YYYNNN有错?有错?有错?结束汇编输入(修改)源程序连接运行查错开始用EDIT,NOTEPAD等任何文本编辑器。源程序存为.ASM文件

用MASM宏汇编程序进行汇编。汇编后生成.OBJ目标文件。命令格式:MASM<源文件名.ASM>;

用LINK连接程序进行连接。连接后生成.EXE可执行文件。命令格式:LINK<目标文件名.OBJ>;

用TD、DEBUG等调试程序进行调试。命令格式:TD<可执行文件名.EXE>

234.4.2顺序程序顺序程序是最常见、最基本的程序结构,CPU按照指令的排列顺序逐条执行。例子:对于三个8位无符号数86H,34H,21H,编写S=86H*34H-21H的程序。分析:1.有三个数参加运算,所以要定义三个源操作数2.还需要定义一个变量来存放结果,因运算中有乘法,结果为16位。3.运算中要用到减法指令和乘法指令,而三个操作数为无符号数,所以乘法指令用MUL.画出程序流程图如右图所示。取被乘数取乘数取第三个操作数将减数扩展为16位做减法结果送指定处初始化结束做乘法24DatasegmentNumdb86h,34h,21hResultdw?DataendsCodesegmentassumecs:code,ds:dataStart:movax,data

movds,ax;ds指向data段leasi,num;num的偏移地址送sileadi,result;result的偏移地址送dimoval,[si];取86hmovbl,[si+1];取34hmulbl;两数相乘movbl,[si+2];取第三个数movbh,0;减数扩展为16位subax,bx;相减mov[di],ax;将结果S送result单元

movah,4ch;返回dosint21hCodeendsendstart程序如下:25标号:条件满足?处理4.4.3分支程序NYIF…THEN结构程序结构:

… 测试/比较指令(TEST/CMP)条件转移指令(Jx标号)

处理体

标号:其他指令 …26程序结构:

;测试条件TEST/CMP指令

Jx标号1

处理体P1JMP标号2标号1:

处理体P2标号2:其他指令…条件满足?处理P1处理P2标号1:标号2:条件1条件2IF…THEN…ELSE结构27标号1:条件1成立?P1NYCASE结构程序结构:…TEST/CMP指令(测试条件1)

Jx标号1;不满足转标号1

处理体P1…

JMP标号n+1标号1:TEST/CMP指令(测试条件2)

Jx标号2;不满足转标号2

处理体P2…

JMP标号n+1标号2:TEST/CMP指令(测试条件3)Jx标号3;不满足转标号3

处理体P3…JMP标号n+1标号3:TEST/CMP指令(测试条件4)……标号n+1:(公共出口)条件2成立?条件n成立?…Pn+1标号2:标号n:标号n+1:P2PnNNYY28DatasegmentBufferdw0086h,00h,8021hDataendsCodesegmentassumecs:code,ds:dataStart:movax,data

movds,ax;ds指向data段

movax,bufferorax,axjezero;为0跳转jnsplus;为正数跳转movbx,offhjmpcountiZero:movbx,0jmpcountiPlus:movbx,1Counti:movah,4ch;返回dosint21hCodeendsendstart程序如下:

1(x>0)Y=0(x=0)-1(x<0)294.4.4循环程序1.DO…WHILE<条件>结构先执行,再判断条件。工作部分至少执行一次。初始化循环体循环控制继续循环?YN302.WHILE<条件>结构先判断条件,再执行。工作部分有可能一次都不执行。初始化循环体循环控制继续循环?YN31注意:循环可以嵌套(多重循环),但多个循环体之间不能交叉,控制条件不能混淆。32掌握以下几点:调用子程序用CALL指令,返回调用程序用RET指令。子程序允许嵌套调用。进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保护现场),退出子程序前要恢复现场。调用前要预先确定子程序中要使用哪些寄存器,并定义入

温馨提示

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

评论

0/150

提交评论