【文档说明】第四章+汇编语言程序设计教材课件.ppt,共(85)页,442.004 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44764.html
以下为本文档部分文字说明:
汇编语言程序设计movax,12hcalldisplayJmp1234h主要内容:•汇编语言源程序的结构•汇编语言语句格式•伪指令•功能调用•汇编语言程序设计3.5汇编语言源程序机器语言——二进制数形式的指令和数据。B064是什么意思?这就是机器语言
。既不直观,又不易理解和记忆.MOVAL,64H;很容易记忆理解,这就是助记符。助记符——用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。操作数可能放在存储器中,这就涉及操作数的地址。程序中遇到转移指令或调用指令,也需要知道转移地址
,若采用具体地址就很不方便,一旦有错,改动也很麻烦。于是人们采用标号或符号来代替地址,例:LP1:movax,VAR…loopLP1汇编语言——指令助记符,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则。用汇编
语言编写的程序叫汇编语言源程序。指令除了操作码以外,还有一个操作数问题。汇编程序源程序的编译程序汇编程序汇编语言源程序机器语言目标程序汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。——高级语言中称该过程为“解释”或“编译”。执行翻译的程序称
为“汇编程序”。汇编语言程序设计与执行过程•输入汇编语言源程序源文件.ASM•汇编(编译)目标文件.OBJ•链接可执行文件.EXE•调试最终程序3.5.1汇编语言源程序的结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑
段组成:数据段——存放数据、变量堆栈段——堆栈区域代码段——存放程序指令•一个基本的汇编语言程序框架如下:stackSEGMENTPARA‘stack‘DB100DUP(‘stack’)stackENDSdataSEGMENT<数
据、变量在此定义>dataENDScodeSEGMENTASSUMECS:code,DS:data,ES:datastart:MOVAX,dataMOVDS,AXMOVES,AX<此处加入你自己的程序段>MOVAL,4CHINT21HcodeEN
DSENDstart堆栈段数据段代码段91.汇编语言语句类型语句类型8086宏汇编MASM使用的语句分成3种类型:1)指令语句:能够产生目标代码,CPU可执行2)伪指令语句:为汇编程序和连接程序提供的管理
性语句,不产生目标代码3)宏指令语句:可包括多条指令或伪指令●指令语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应;●伪指令语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示
性语句无机器码指令与其相对应。指令语句汇编时生成机器码;伪指令语句汇编时不生成机器码。汇编语言的格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是:[名字项]操作码项[操作数][;注释]•名字项是一个
符号。•操作码项是一个操作码的助记符,它可以是指令、伪操作或宏指令。•操作数项由一个或多个表达式组成,它提供为执行所要求的操作而需要的信息。•注释项用来说明程序或语句的功能,分号(;)为识别注释项的开始,也可以从一行的第一个字
符开始,此时整行都是注释,常用来说明下面一段程序的功能。•其中带方括号的部分表示任选项,即可以选用,也可以不用。1)名字项名字项可以是语句标号或标量。标号是可执行指令语句的符号地址,在代码段中定义,用作转
移指令或调用指令的操作数,表示转移地址;变量通常是指存放数据的存储器单元符号地址,它在除段码段以外的其它段中定义,可以用作指令的操作数。名字和变量统称为标识符。一.组成名字的字符及规则它是由字母打头的字符串,可由下列字符组
成:①字母A~Z,a~z。②数字0~9。③专用字符?、.、@、-、$。除数字0~9外,其他字符都可以放在名字的第一个位置。字符“.”只能出现在名字的第一个位置,其他位置不允许出现。名字最长由31个字符组成。汇编程序对
31个以后的字符不予理会,所以,当两个名字的前31个字符完全相同而从第32个字符开始有不同字符时,汇编程序将它们视为同一名字。二.标号和变量的区别标号是某条指令所存放单元的符号地址,而变量是某操作数据所存放单元的符号地址。在汇编语言程序中,指令语句中的名字一般采用标号,这个标号可以是
任选的,即可以不写。标号出现在代码段,后面跟着冒号“:”。三、变量和标号的属性标号和名字一经定义便具有两类三种属性:①段值–标号和名字对应存储单元的段地址②偏移值–标号和名字对应存储单元的偏移地址③类型–标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间–变量名的类型可以
是BYTE(字节)、WORD(字)和DWORD(双字)等地址属性类型属性2)操作码项为操作码助记符,可以是指令,伪指令及宏指令名。•指令语句:能够产生目标代码,CPU可执行•伪指令语句:为汇编程序和连接程序提供的管理性语句,不产生目标代码•宏指令语句:可包括多条指令或伪指令3)操作数项•
操作数项是操作符的操作对象。•操作符在完成相应的操作时要求有一系列的操作数。当有两个或两个以上的操作数时,各操作数之间用逗号隔开。对于指令语句,操作数项一般给出操作数地址,它们可能一个或多个,或一个也没有。对于伪指令和宏指令语句,操作数项则给出所要求的参数。•操作数一般有常数
、寄存器、标号、变量和表达式等几种形式。常量二进制数,以B结尾。如01001101B。十进制数,如85。十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。字符串:用引号括起来的1个或多个字符。如‘ERROR!’,’a’
,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。3汇编语言的标示符与表达式和运算符1.标识符包括变量、标号。标号和变量可以用LABLE和EQU伪指令来定义。2.表达式表达式是常数、寄存器、标号、变量与运算符的组合。有数字表达式和地址表
达式两种。汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。用于数字表达式,例:MOVAX,4*1024汇编后的形式为:MOVAX,4096用于地址
表达式,例:LEASI,TAB+3若TAB的偏移地址为1000H,则汇编后的形式为:LEASI,[1003H]1)算术运算符——+、-、*、/,MOD逻辑运算符只能用于数字表达式中。例:MOVCL,36HAND0F
H经汇编后:MOVCL,06H注意,不要把逻辑运算符与逻辑运算指令混淆:例:ANDAX,3FC0HAND0FF00H汇编后源操作数被翻译为:3F00H,所以上述指令与ANDAX,3F00H等价。2)逻辑运算符——AND、OR、XOR、NOT关系运算的结果是一个逻辑值:真或假关系为真,结果为全
1关系为假,结果为全0例:MOVBX,PORTGT300H若PORT的值大于300H,则汇编后为:MOVBX,0FFFFH否则汇编后为:MOVBX,03)关系运算符——EQ、NE、LT、GT、LE、GESEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VARDB1
2H……MOVBX,OFFSETVAR;取变量VAR的偏移地址MOVAX,SEGVAR;取变量VAR的段地址注意,以下指令的异同:MOVBX,OFFSETVARLEABX,VAR4)取地址运算符——SEG、OFFSET用SEG运算符求变量或标号所在的段基址。
例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义后,用SEG运算符求变量所在的段基址。DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400
H;定义双字数据DATAENDS;数据段结束MOVBX,SEGVAR1汇编成:MOVBX,0300HMOVCX,SEGVAR2汇编成:MOVCX,0300HMOVDX,SEGVAR3汇编成;MOVDX
,0300H用OFFSET运算符求标号变量的偏移量。DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400H;定义双字数据D
ATAENDS;数据段结束MOVBX,OFFSETVAR1汇编成:MOVBX,0000HMOVCX,OFFSETVAR2汇编成:MOVCX,0004HMOVDX,OFFSETVAR3汇编成:MOVDX,0008H•TYPE取变量的类型(1,2,4)•LENGTH取
所定义变量的长度(即变量中元素的个数)•SIZE取所定义存储区的字节数(=TYPE*LENGTH)例:VARDW1,2,3,4,5则TYPEVAR=2LENGTHVAR=5SIZEVAR=105)取值运算符——TYPE、LENGTH、SIZE6)属性运算符——PTR用来指定
地址操作数的类型。格式:<类型>PTR<地址操作数>类型∈{BYTE,WORD,DWORD,NEAR,FAR}•BYTE、WORD、DWORD用于描述数据存储单元(变量)地址•NEAR、FAR用于描述转移、调用的目的地址例:MOVBYTEPTR[DI],0;字
节类型MOVWORDPTR[DI],0;字类型MOV[DI],0B5H;类型不定PTR也可用来进行强制类型转换例:STR1DW?;STR1定义为字类型MOVAX,STR1;合法MOVAL,STR1;非法MOVAL,BYTEPTRSTR1;合法属性运算符——PTRVAR1DB10H,18H,2
5H,34HVAR2DW1223H,1200HMOVAX,WORDPTRVAR1执行后:AX=1810HMOVBL,BYTEPTRVAR2执行后:BL=23H汇编语言的一个实例:hello.asmdataSEGMENTHelloDB‘Hello,world!’,0DH,0AH,’$’dataEND
SprogSEGMENTASSUMECS:prog,DS:datastart:MOVAX,dataMOVDS,AXLEADX,hello;取字符串首地址MOVAH,9INT21H;显示字符串MOVAH,4CHINT21H;退回DOSp
rogENDSENDstart名字标号3.5.3伪指令•数据定义伪指令•符号定义伪指令•段定义和段寄存器指定伪指令•过程定义伪指令•结束伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:1数
据定义伪指令用于定义变量,即内存单元或数据区。数据定义伪指令的格式为:变量名数据定义伪指令操作数,操作数,…常用的数据定义伪指令有如下几种:DB定义字节DW定义字DD定义双字操作数可以是常数、变量或表达式例
1:DATA_BDB10,5,10HDATA_WDW100H,-4DATA_DDD0FFFBH汇编后的内存分配情况如右图所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA
_BDATA_WDATA_D10510H100H-40FFFBH例2:操作数可以是字符串,例如STRDB‘HELLO’汇编后的情况如图:STR‘H’‘E’‘L’‘L’‘O’48H45H4CH4CH4FH操作数?用来保留存储空间,但不存入数据.例3:ABCDB0,1,2,3,4
,’OK’,’$’RSVDW?,?,?,?,?,?,?,?•复制操作符DUP:重复的数据可以使用复制操作符DUP,如上面RSV亦可写成:RSVDW8DUP(?)若操作数中若使用$,则表示的是地址计数器的当前值。
•例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes2符号定义伪指令把一个表达式用一个符号表示,
以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。符号定义伪指令有两种:EQU,=用EQU定义的符号未清除前,不能重新定义。用”=”定义的符号可在任何时候进行重定义。二者均不占用存储空间,仅是给符
号赋值例:FIVEEQU5COUNTEQUCXTENEQU10DIST=BYTEPTR[SI+BP]GOTO=JMP…MOVAX,TENMOVCX,COUNTADDDIST,FIVEDIST=WORDPTR[SI+BP+1]ADDDIST,AXGOTOLA
BEL定义引用3段定义伪指令汇编语言程序是按段来组织程序和数据的。和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。三类段:代码(程序)、数据、堆栈段定义伪指令:SEG
MENT、ENDS、ASSUME、ORG定义一个段的基本格式:段名SEGMENT[定位类型][组合方式][类别]<汇编语言语句>段名ENDS这两个伪指令总是成对出现,二者前面的段名应一致。SEGMENT说明了一个段的开始,ENDS说明了一个段的
结束。对数据段和堆栈段,段中的语句一般是变量定义。对代码段则是指令语句。如:dataSEGMENT<指令语句>dataENDSSEGMENT和ENDS伪指令SEGMENT语句后可以带有可选参数,用以规定
逻辑段的其他一些属性。1)定位类型说明如何确定逻辑段的边界。有四种:PARA(Paragraph):逻辑段从一个节(16个字节)的边界开始。即段的起始地址应能被16整除,或这说段起始物理地址应为××××0H。——默认类型BYTE:逻辑段从字节边
界开始,即段可以从任何地址开始。WORD:逻辑段从字边界开始。即段的起始地址必须是偶数。PAGE:逻辑段从页边界开始。256字节称为一页,故段的起始物理地址应为×××00H。2)组合类型说明不同模块中同名段的组合方式。PUBLIC:所有此
类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。COMMON:所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。AT<数值表达式>:按绝对地址定位,段地址就是表达式的值。STA
CK:专用于说明堆栈段,组合方式同PUBLIC3)类别用单引号括起来的字符串。所有同类别的段被安排在连续的存储区域中。如:在模块1中有段定义:seg1SEGMENTPARASTACK‘stack’…seg1ENDS在模块2中有段定义:seg2SEGMENTPARASTA
CK‘stack’…seg2ENDS则连接时这两个段被安排在一起。ASSUME伪指令在代码段中,还必须明确段和段寄存器的关系,这由ASSUME语句来指定。如ASSUMECS:code,DS:data,ES:data语句中的code和data为段名。这个语句
说明:1.CS将指向名字为code的代码段2.DS和ES将指向名字为data的数据段但要注意,ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句MOVAX,DATAMOVDS,AXMOV
ES,AX将段基址装入段寄存器。如果程序中用到堆栈段,则SS也需装入实际的初值。代码段基地址不需要程序员装入CS寄存器,而由OS负责装入。ORG规定了段内的指令或数据存放的开始地址(偏移地址的初值),其格式为:ORG<表达式>表达式的
值即为开始地址,从此地址起连续存放程序或数据。例:ABCSEGMENTORG100Hbegin:……ABCENDSORG伪指令指令从100H开始存放4过程定义伪指令PROC、ENDP过程就是子程序。一个过程可以被其它程序所调
用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。过程定义伪指令的格式为<过程名>PROC[类型]……RET<过程名>ENDP注意:PROC和ENDP必须成对出现。过程的类型有两种:NEAR——(默认类型)表示段内调
用FAR——表示段间调用调用一个过程的格式为:CALL<过程名>5宏定义伪指令**如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。指令的格式为:<宏指令名>MACRO[形参表]<宏定义体>ENDM例:两个数
之和的宏定义和宏调用。宏定义为:DADDMACROX,Y,ZMOVAX,XADDAX,YMOVZ,AXENDMX、Y、Z是形式参数。调用宏DADD时可写为:DADDDATA1,DATA2,SUMDATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。宏调用与过程(子程序)调用都
是一次定义,多次调用。它们之间的差别是:①执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理,而CALL、RET则是由CPU执行的指令。②汇编结果:宏命令伪指令汇编后被展开。③执行速度:宏命令执行速度较快(因无调用转
移)④占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。使用过程可以节省代码占用的内存空间。•宏展开:汇编程序会把宏调用按宏定义展开。例如:宏定义为:DisplayMACROstringLEADX,stringMOVAH,9INT21HENDM程序中宏调用:…
…DISPLAYERROR_MESSAGEDISPLAYEXIT_MESSAGE……汇编后的结果:(带有+号的指令为宏展开后的结果)……+LEADX,ERROR_MESSAGE+MOVAH,9+INT
21H+LEADX,EXIT_MESSAGE+MOVAH,9+INT21H……6汇编结束伪指令END汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。格式:END[表达式]END后跟的表达式通常就是
程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。汇编语言程序上机过程汇编语言的工作环境及上机步骤1.硬件环境一般IBMPC/XT及其兼容机基本配置2.软件环境1)DOS操作系统2)编辑程序3)宏汇编程序MASM.EX
E4)连接程序LINK.EXE5)调试程序DEBUG.COM3.运行汇编语言程序的步骤1)编辑汇编语言源程序,扩展名为.ASM;2)用MASM.EXE汇编成.OBJ目标文件;3)有语法错,用编辑软件重新调入修改。无错用LINK.EXE把.OBJ文件转化成.EXE可执行文件;4)在DOS命令状态下
直接键入可执行文件文件名执行该文件。编辑文本编辑器,如EDIT.COM源程序:文件名.asm汇编汇编程序,如MASM.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如TD或DEBUG.EXE应用程序错误
汇编语言程序的开发过程错误错误错误本节教学要求1.熟悉伪指令DB、DW、DD、SEGMENT/ENDS、ASSUME、END、$、ORG、EQU和=、PROC/ENDP2.了解伪指令DQ/DT、STRUC/ENDS、NAME、PUBLIC等汇编语言
的基本表达及其运行总结本小章教学重点l理解汇编语言和汇编程序的概念、特点及应用l熟悉源程序书写规则、语句格式、分段结构l熟悉汇编语言基本表达、伪指令语句及应用l熟悉汇编语言程序的上机运行与调试,掌握基本操作技能小结本小章从汇编语言的基本表达入手,介绍了汇编语言的工作环境和源程序的建立
、汇编、连接、运行、调试等过程。熟悉汇编语言源程序的基本格式,正确运用语句格式来书写程序段掌握伪指令的功能和应用3.7DOS系统功能调用介绍系统功能调用——由OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。系统功能调用有两种,一种
称为DOS功能调用,另一种称为BIOS功能调用。用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INTn来实现。在DOS系统中,功能调用都是用软中断指令INT21H来实现的。INT2lH功能大致可以分为四个方面:设备管理、目录管理、文件管理和其它。D0S系统功能调用的
使用方法如下:①AH←功能号;②设置该功能所要求的其他入口参数;③执行INT21H指令;④分析出口参数。以下介绍INT21H的几个最常用的功能。关于数据输入和输出我们这里只讨论键盘输入和显示输出,调用系统功能需要
提供入口参数及所调用的功能号,调用结束返回结果。1.DOS键盘功能调用(1)从键盘输入一个字符(功能号=1)MOVAH,1INT21H<AL中有键入的字符>例:程序中有时需要用户对提示做出应答。GET_KEY:MOVAH,1;等待键入字符INT21H;结果在AL中C
MPAL,’Y’;是’Y’?JZYES;是,转YESCMPAL,’N’;是’N’?JZNO;是,转NOJMPGET_KEY;否则继续等待输入YES:……NO:…(2)输入字符串(功能号=0AH)此功能调用从键盘输入一串字符
并把它存入用户指定的缓冲区中。MOVAH,0AHLEADX,<字符串缓冲区首地址>INT21H(预留的N1个字节的存储单元)0DHN2N1N1:缓冲区长度(最大键入字符数)N2:实际键入的字符数(不包括回车符)用户定义的输入字符串的缓冲区格式若用户键入的字符
数(包括回车)≥定义的N1,本功能调用将不再接收新的键入,且光标不再向右移动。例:设在数据段定义键盘缓冲区如下:STR1DB10,?,10DUP(?)调用DOS功能的0AH号功能的程序段为:LEADX,STR1MOVAH,0AHINT21H此程序段最多从键盘接收
10个按键(包括回车)。2.DOS显示功能调用(1)在显示器上显示一个字符(功能号=2)MOVAH,2;功能号送AHMOVDL,<要显示的字符>;要显示的字符必须放在DL中INT21H;执行系统功能调用例:在显示器上显示一个字
符‘A’MOVAH,2MOVDL,’A’;或MOVDL,41HINT21HMOVAH,9LEADX,<字符串>;获取要显示字符串的首地址INT21H注意:被显示的字符串必须以’$’结束,否则会引起屏幕混乱。显示时如果希望光标能自动换行,则应在字符串结束前加上回车及换行的
ASCLL码ODH和OAH。(2)显示字符串(功能号=9)例:在屏幕上显示:’HELLO,WORLD!’;在数据段定义字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代码段中进行显示输出MOVAH,9LEADX,STR1INT21H3.返回到DOS
•一个实际可运行的用户程序在执行完后,应该返回到DOS提示符状态(简称返回DOS),简单的用HLT指令使CPU停止运行将无法把控制权交还给DOS操作系统。为了能使程序正常退出并返回DOS,可使用DOS系统
功能调用的4CH号功能。用4CH号功能返回DOS的程序段如下:•MOVAH,4CH;功能号送AH•INT21H;返回DOS附:BIOS功能调用•BIOS:基本输入输出系统,是固化在EPROM中的一组实现基本输入输出功能的子程序。•BIOS调用通过多个软中断提供,调用
方法为:MOVAH,<功能号><设置入口参数,一般将参数放在寄存器中>INT<中断类型>BIOS中的几个主要中断类型如下:INT10H——屏幕显示INT13H——磁盘操作INT14H——串行口操作INT16H——键盘操作INT17H——打印机操作每类中断由
包含许多子功能,调用时通过功能号指定。DOS调用和BIOS调用在使用上有什么差别?解答:BIOS是基本输入输出系统DOS是磁盘操作系统的简称。BIOS是系统提供的基本输入输出服务程序,它不依赖操作系统,所
以当还没有可以利用的操作系统资源时,就只能使用BIOS调用。DOS调用是DOS操作系统提供的一个功能齐全、使用方便的中断服务程序的集合。使用DOS操作比使用相应功能的BIOS操作更简易,而且对硬件的依赖性更少些。3.6汇编语言程序设计基础3.6.1概述1.程序质量(自学)2.
汇编语言程序设计的步骤:1-根据实际问题抽象出数学模型,确定算法2-画出程序框图(流程图)3-分配内存工作单元和寄存器4-根据框图编写源程序,存成.ASM文件5-对源程序汇编,生成.OBJ目标文件6-把.OBJ文件连接成.EXE执行文件7-运行、调试3.源程序的基本结构:顺
序、分支、循环、子程序(1)用方框表示工作框,框中用简明语言标明要完成的功能(2)用菱形框表示判断框框中标明比较、判断和条件如何绘制程序框图(流程图)?NY?(4)各框之间用直线连起来表示程序走向。框中标明子程序名字(入口参数等)(
3)用框表示调用子程序或过程。汇编语言上机过程YYYNNN有错?有错?有错?结束汇编输入(修改)源程序连接运行查错开始用EDIT,NOTEPAD等任何文本编辑器。源程序存为.ASM文件用MASM宏汇编程
序进行汇编。汇编后生成.OBJ目标文件。命令格式:MASM<源文件名.ASM>;用LINK连接程序进行连接。连接后生成.EXE可执行文件。命令格式:LINK<目标文件名.OBJ>;用TD、DEBUG等调试程
序进行调试。命令格式:TD<可执行文件名.EXE>3.6.2顺序结构程序设计标号:条件满足?处理3.6.3分支程序IF…THEN结构程序结构:…测试/比较指令(TEST/CMP)条件转移指令(Jx标号)处理体标号:其他
指令…标号:条件满足?处理NY程序结构:TEST/CMP指令Jx标号1处理体P1JMP标号2标号1:处理体P2标号2:其他指令…条件满足?处理P1处理P2标号1:标号2:条件1条件2IF…THEN…ELSE结构标号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:P2PnNNYY3.6.4循环程序1.DO…UNTIL<条件>结构先执行,再判断条件。工作部分至少执行一次。初始化循环体循环控制继续
循环?YN2.DOWHILE<条件>结构先判断条件,再执行。工作部分有可能一次都不执行。初始化循环体循环控制继续循环?YN注意:循环可以嵌套(多重循环),但多个循环体之间不能交叉,控制条件不能混淆。掌握以下几点:调用子程序用CALL指令,返回调用程序用RET指令。子程序允许嵌套调用
。进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保护现场),退出子程序前要恢复现场。调用前要预先确定子程序中要使用哪些寄存器,并定义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈(要
用BP寻址)。3.6.5子程序设计举例例1:二进制数(0-F)转换成ASCII(‘0’-‘F’)的子程序。BIN2ASCPROC;要转换的数在AL的低四位;转换结果仍在AL中CMPAL,9JAA2FADDAL,30HJMPDONEA
2F:ADDAL,37HDONE:RETBIN2ASCENDP调用方法:(在主程序中)…MOVAL,0CHCALLBIN2ASC(AL中有0CH的ASCII码43H,’C’)