【文档说明】汇编语言程序设计课件-.ppt,共(79)页,445.512 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44783.html
以下为本文档部分文字说明:
汇编语言程序设计5.1宏汇编语言的基本语法5.2伪指令5.3宏指令5.4汇编语言程序的结构5.5DOS系统功能调用5.6汇编语言程序设计第5章汇编语言●汇编语言是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用符号或标号代表地址。●
使用汇编语言编写的程序称作汇编语言源程序。汇编语言源程序不能由机器直接执行而必须翻译成由机器代码组成的目标程序,这个过程称为汇编。●把汇编语言源程序翻译成目标程序的软件称为汇编程序。汇编语言源程序目标程序汇编程序汇编过程的含义如图:宏汇编语言的基本语法5.1.1常数、变量和符号●常数
、变量和符号是汇编语言能识别的数据项,是指令和伪指令语句中操作数的基本组成部分,其大小和属性与机器语言代码生成有直接关系。5.1变量标号常数常数●常数是没有任何属性的纯数值。在汇编期间,它的值已经完全确定,而且在程
序的运行中也不会发生变化,它可以有以下几种类型:2.八进制数:●以字母O或Q结尾,由若干个0到7的数字组成的序列。例如:255Q、377Q1.二进制数:●以字母B结尾的由一串“0”和“1”组成的序列。例如:0010110B3.十进制数:●由若干个0到9的数字组成的序列,可以以字母
D结尾,也可以省略字母。例如:1234D或1234。4.十六进制数:●以字母H结尾,由若干个0到9的数字和字母A到F组成的序列,且必须以数字开头。例如:56H,0B3FH5.字符串常量:●用引号括起来的一个或多个字符。这些字符以ASCII码形
式存在内存中。例如:“A”的值是41H,”B”的值是42H常数变量●变量通常是存放在某些存储单元的数据,这些数据在程序运行期间可以修改。变量使用数据定义伪指令DB、DW、DD等定义的。经过定义的变量,每个变量均有三个属性:1
.段属性(SEGMENT):●表示变量存放在哪一个逻辑段中(即变量所在段的段地址)。2.偏移属性(OFFSET):●表示变量的偏移地址,即在逻辑段中距段的起始点的字节数。3.类型属性(TYPE):●表示变量占用存储单元的字节数。用DB定义的变量类型属性为字
节;用DW定义的变量类型属性为字(2字节);用DD定义的变量类型属性为双字(4字节)标号●标号表示一条指令所在的地址,所以标号也是指令语句的地址符号,常用作转移指令(包含子程序调用指令)的操作数,即目标地址
。●标号通常由字母数字串组成,但第一个字母必须为字母。标号有三种属性:1.段属性(SEGMENT):●表示标号所在段的段基址。2.偏移属性(OFFSET):●表示标号的偏移地址,即标号地址在逻辑段中距段的
起始点的字节数。3.距离属性(或类型属性TYPE):●表示标号作为段内或段间的转移属性。(1)NEAR(近):●表示本标号只能被标号所在段内的转移和调用指令访问(即段内转移)距离属性分为两种:(2)FAR(远):●表
示本标号可以被其他段(不是标号所在段)的转移和调用指令访问(即段间转移)表达式与运算符8086宏汇编语言允许使用的表达式有两种类型:5.1.2它所产生的结果是一个存储器地址,如果这个地址存放的是数据,
一般称它为变量,如果存放的是指令,一般称它为标号。只产生数值结果。数指表达式地址表达式1.算术运算符2.逻辑运算符3.关系运算符运算符主要包括以下6种类型4.分析操作符5.综合运算符6.其他运算符:算术运算符[例5-1]CONT=15*4;CONT=60CONT=CONT/8;CONT
=7CONT=CONTMOD3;CONT=1MOVAL,21HSHL2;AL=84H●包括加(+)、减(-)、乘(*)、除(/)、求余数(MOD)、左移(SHL)和右移(SHR)注意:●除了加和减法运算符可以使用变量和符号
外,其他运算符只适用于常数的数值运算。逻辑运算符[例5-2]ANDDX,PORTANDOFEH其中第二个AND是逻辑运算符,在程序汇编时,计算PORTANDOFEH产生一个立即数作为指令操作数。而第一个AND是指令助记符,在汇编
以后执行AND指令,DX的内容与上述立即数相“与”,结果放在DX中。●包括按位操作的与(AND)、或(OR)、异或(XOR)、和非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。注意:●AND、OR、XOR和NOT也是指令助记符。关系运算符[例5-4]MOVBX
,((PORTLT5)AND20)OR((PORTGE5)AND30)此例中当PORT的值小于5时,执行MOVBX,20否则执行MOVBX,30。[例5-3]MOVBX,PORTLT5若PORT的值小于5,则汇编程序把上
条指令汇编为:MOVBX,OFFFFH;否则被汇编为:MOVBX,0。●包括EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或大于)、GE(大于或等于)共六种。分析操作符(数值返回运算符)(2)取段基址格式:SEG变量名或标号功能:取变量名或标号所在段的段地址
。(1)取地址的偏移量格式:OFFSET变量名或标号功能:取变量名或标号所在段的段内偏移量。格式:TYPE变量名或标号功能:返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距
离属性;返回的数值与性的关系表4-1。求变量名或标号的类型值(3)标号/变量属性类型值字节变量BYTE1字变量WORD2双字变量DWORD4标号NEAR-1标号FAR-2表5-1存储器操作数的类型值[例5-5]BUF1DB100DUP(0)BUF2DB200DUP(20H)BUF3DD100DU
P(13H)则LENGTHBUF1=100LENGTHBUF1=100LENGTHBUF1=100(4)求长度格式:LENGTH变量名功能:返回一个变量名所占的存储单元(字节、字或双字)的数目。如果变量使用重复定义子句说明的,
则返回DUP前面的数值;若没有DUP明,则返回值总是1。分析操作符(数值返回运算符)(5)求大小格式:SIZE变量名功能:返回变量名所占存储单元的字节数,它等于LENGTH和TYPE两个运算符返回值的乘积。[
例5-6]上例中SIZEBUF1=100SIZEBUF2=200SIZEBUF3=0分析操作符(数值返回运算符)综合运算符[例5-7]MOVBYTEPTR[DI],4;指明目的操作数为字节类型JMPDWORDPTR[BP
];指明目的操作数为双字节类型(即指明转移操作为段间转移)(1)PTR运算符格式:类型PTR表达式功能:用于指出变量、标号或地址表达式的类型属性,新的类型只在当前指令内有效。[例5-8]AEQUTHISBYTEBDW20DUP(?)A、B对应同一存储器地址,对变量A为字节访问,对
变量B为字节访问,且A和B具有相同的段基址和偏移量。(2)THIS运算符格式:THIS类型功能:把它后面指定的类型或距离属性赋给当前的变量、标号或地址表达式。综合运算符●THIS运算符使下面的“原标号或原变量”另有新的名字和类型,但
并不分配新的存储单元。注意:其他运算符[例5-9]K1EQU1234HMOVAL,LOWK1;AL←34HMOVBL,HIGHK1;BL←12H(1)HIGH和LOW运算符格式:HIGH表达式LOW表达式功能:从
运算对象中分理处高字节或低字节。[例5-10]L1:JMPSHORTL2┇L2:MOVAX,BX┇运算符的优先级见表4-2所示。(2)SHORT运算符格式:SHORT标号功能:当转移的目标地址与本转移指令
的下一条指令之间的字节距离在–128~127范围时,可以用SHORT运算符进行说明。其他运算符表5-2运算符的优先级别优先级别运算符高低0括号中的表达式1LENGTH,SIZE,WIDTH,MASK2PTR,OFFSET,SEG,TYPE,THIS,段前缀(段寄存器名)3HIGH
,LOW4*,/,MOD,SHL,SHR5+、-6EQ,NE,LT,LE,GT,GE7NOT8AND9OR,XOR10SHORT伪指令5.2.1伪指令语句的格式伪指令语句的格式为:符号名定义符操作数;注释●定义符字段在伪指令语句中,定义符表
示该语句的伪操作功能。定义符有汇编程序规定,宏汇编程序中使用了数十种定义符。5.2●符号名字段符号名用在伪指令语句的前面,用空格和定义符隔开。●操作数字段操作数可以是常数(二进制、十进制、十六进制等)、字符串、常量名、变量名、标号和
一些专用符号等。●注释字段这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。常用伪指令●符号名一被EQU定义,就不能再赋值,既不能用EQU在位符号名重新赋值。[例5-11]ALFAEQU100CO
UNTEQUALFA(1)等值伪指令格式:符号名EQU表达式功能:将表达式的值赋给符号名。1.符号定义伪指令(赋值语句)5.2.2注意:[例5-12]ALFA=100MOVAL,ALFA;AL←100ALFA=ALF
A+2;ALFA=102MOVAL,ALFA;AL←102(2)等号伪指令格式:符号名=表达式功能:将表达式的值赋给符号名等号伪指令可以在程序中不同的地方多次使用以重新为符号名赋值。常用伪指令[例5-13]BARYLABELWORD;定义BARY为字类型┆ADDAX,BA
RY;字加法ABCFLABELFAR;ABCF为FAR类型标号(3)定义符号名和伪指令格式:符号名LABEL类型功能:定义一个标号或变量,并指定其类型。常用伪指令格式:[变量名]DB表达式;定义字节[变量名]DW表达式;定
义字[变量名]DD表达式;定义双字[变量名]DQ表达式;定义8个字节[变量名]DT表达式;定义10个字节数据定义伪指令2.●表达式是赋给变量的初始值,可以有一个,也可以有多个,常见的有以下几种:[例5-14]BUFDB20H,30HDATD
W1234H,5678H;变量BUF字节单元的内容是20H,下一个字节单元即BUF+1单元的内容为30H。;字变量DAT的内容为1234H,占用两个字节单元,34H存放在低地址单元,12H存放在高地址
单元,下一个字单元即DAT+2单元的内容为5678H,仍是低字节存在低地址单元。●这实际上是为数据分配存储单元,并把变量名作为该存储单元的名称。数值表达式(1)[例5-15]STRINGDB‘ABCD’;将A的ASCII码41H存在STRING字节单
元,将B、C、D的ASCII码依次存放在后续单元(即STRING+1、STRING+2和STRING+3单元)*DW伪指令可以有两个字符组成的字符串分配一个字单元。[例5-16]STRING1DW‘AB’;等价于STRING1DW4142HASCII
字符串●可以用DB伪指令为ASCII字符串中的每一个字符分配一个字单元。(2)?表达式●这是为数据项分配存储单元的一种方法,只是存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最终结果。[例5
-17]RESULTDB?;预置一个字节单元,其值不定(4)重复定义子句DUP●利用重复定义子句DUP可以为若干个重复数据分配存储单元。带DUP的表达式格式如下:nDUP(表达式)●其中圆括号内的表达式是重复的
内容,n是重复次数。(3)段定义伪指令●段定义伪指令用于将源程序划分成若干段,这些逻辑段按用途可分为代码段(用于存放程序)、数据段(用于存放数据)、堆栈段(用于堆栈操作)和附加段(附加的数据段)。●需要说明的是,并不是所有的程序都必须包含这四个逻辑段,有时只需要一个段或两个段。格式:段名S
EGMENT[定位类型][组合类型][′类别名′]┆段名ENDS●功能:把模块划分为若干个逻辑段。每个SEGMENT/ENDS可定义一个逻辑段。3.●SEGMENT后的三个参数一般来说可以任选,它们的含义、类型及功能如下:●定位类型表
示将某段装入内存时,对段的起始边界的要求。合理选择定位类型能够在进行段和模块的定位时充分利用存储空间。它有以下四种选择:●PAGE:●PARA:●WORD:●BYTE:定位类型(1)组合类型●用来在多模块连接时告诉连接程序本段和其他段的组合关系。组合类型有以下几种:●NONE:●PUBLI
C:●COMMON:●STACK:●AT表达式:●MEMORY:(2)类别●可以是任何合法的自定义符,必须用单引号括起来。连接程序只使其与同类别段发生关联,这些同类别段被依序放在连续存储区域内,但各段仍独立。典型类别如:′STACK′′CODE′
(3)段寄存器说明伪指令格式:ASSUME段寄存器:段名[,段寄存器:段名…]功能:向汇编程序指示当前各段所用的段寄存器,设定段寄存器与段的对应关系。注意:①本伪指令只是指示各逻辑段使用寄存器的情况,并没有对段寄存器内容
进行装填。段寄存器的实际值(CS除外)还要由传送指令在程序中装填数据。②ASSUME伪指令也可以用来取消段寄存器与段之间的对应关系(用NOTHING),然后再建立新的对应关系。4.过程定义伪指令●过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行完后,控制返回调用
它的地方。过程的定义是用过程定义伪指令完成的。格式:过程名PROC[NEAR/FAR]┇}过程体RET过程名ENDP功能:完成过程定义,在过程体中实现过程的操作功能5.注意①过程名是自定义符,定义开始和结束时的过程名必须相同。②过程名有三个属性:段地址
、偏移量和距离属性(NEAR或FAR),汇编程序在汇编时根据过程类型生成段内或段间的调用或返回指令代码。③在一个过程中,可以有多个RET指令。一个过程总是通过RET指令返回,RET常作为过程的最后一条指令。【例5-20】CODESEGME
NTAPRCPROCNEARADDAX,BX┆APRCENDPSTAT:MOVAX,NOM┆CALLAPRC┆CALLAPRC┆CODEENDSENDSTATRET模块定义及通信伪指令●汇编语言可以把程序划
分成许多模块,并对每个模块独立地进行汇编和调试。(1)模块开始伪指令格式:NAME模块名功能:指明程序模块的开始,并指出模块名。●模块名是自定义符,不能是系统保留字。若该项使用默认值,则取TITLE语句中的页标题6个字符;若没有T
ITLE语句,则取源程序文件名为模块名。6.模块结束伪指令(源程序结束伪指令)格式:END启动标号或过程名功能:END表示一个模块的结束。通知汇编程序源程序到此结束,并给出执行程序的入口位置。①END通常与模块开始伪指令NAME联合使用,当N
AME缺省时,则END只表示源程序的结束。②汇编处理时,一个模块就是一个独立的汇编单位,汇编处理只进行到模块结束语句END为止。【例5-21】START:MOVAX,DATA┇ENDSTART(2)注意定义公
共符号名伪指令格式:PUBLIC符号名[,┅]符号名可以是变量、符号常量、标号或过程名。功能:由PUBLIC定义的符号名,可以被其他模块引用,即由其定义的符号名是公共符号名,可以被外部模块引用。●在一个模块中,同一个符号名只能被定义一次。例如:PUBLICABC,ALFA(3)注意定义外部符
号名伪指令格式:EXTRN符号名:类型[,┅]符号名在其他模块中已由PUBLIC所定义。类型指的是符号名的类型,符号名的类型应与原模块中定义的类型一致。它们可以是:●内存变量型:BYTE、WORD、DWORD●过程型:NEAR、FAR●数值型:AB
S功能:定义本模块中将要引用的外部模块中的符号名,它们应在各自的模块中已用PUBLIC伪指令进行了定义。●在一个模块中,同一个符号名只能被定义一次。【例5-22】EXTRNABC:BYTE,FLP:FAR(4)注意列表伪指令(1)格式控制伪指令●格式控制伪指令用于对源程序排版、加标题和子标题。1)
自动排版(行数、列数)格式:PAGE[行],[行字数]功能:打印列表文件时,规定页的行数和每行的字符数。例如:PAGE60,132其中行取值10~155(默认值为66),列取值60~132(默认值为80)。7.建立标题格式:TITLE标题正文SUB
TTL子标题正文功能:在打印列表文件时,TITLE伪指令用来给源程序设置标题,以后每页的第一行都列出该标题(不超过60个字符)。SUBTTL伪指令实现每页打印标题后再打印子标题(字符数不限)。当SUBTTL不带正文时,表示取消前面规定的子标题。2)列表控制伪指令●这些伪指令用于打开或关闭列表
文件的输出。格式:.LIST.XLIST%OUT功能:.LIST用于打开列表文件的输出。.XLIST用于关闭列表文件的输出。%OUT可在汇编时显示接在其后的信息,以便了解汇编的过程。(2)记录伪指令(1)记录定义格式:记录名RECORD字段名:
宽度[=表达式][,┅]功能:用于定义一个记录。指明记录中字段的位长度及初值,并用记录名表示已定义的记录。【例5-23】表示一个学生情况的记录,设年龄占5位,性别占1位(1:男,0:女),身体状况占2位(00:健康,01:良好,10:一般,11:差),可定义为
:STDRCRECORDYER:5,SEX:1=0,STT:2①记录名、字段名必须存在,不可使用默认值。②各字段总和不能超过16位。③表达式的初值应取正整数。8.注意记录存储单元分配及赋值格式:记录变量名记录名
<字段值表>功能:将字段值表中的各字段值赋给记录的各字段。【例5-24】TANRECORDX:6,Y:4,Z:6APTAN<5,10,,>BPTAN<12,20>●字段值表中缺省项的默认值为0。(2)注意●此例在存储器中分配两个记录,每个记录为两个字节。记录操作符1)取字段宽度操作符格式:
WIDTH记录名或记录字段名功能:用于返回该记录或记录字段的宽度(二进制位数)。【例5-25】MOVAL,WIDTHYER;AL←5MOVBH,WIDTHSEX;BH←1MOVAH,WIDTHSTDRC;AH←8(3)取字段
位置操作符格式:MASK字段名功能:返回一个8位或16位的二进制数。该字段所在的位为1,其他位为0,以确定该字段在记录中所在的字段的位置。【例5-26】MOVBL,MASKYER;BL←11111000MOVAH,MASKSE
X;AH←000001002)结构伪指令●结构伪指令是把多个数据定义语句组成一个结构,而把每一个数据定义语句称为一个结构字段,内存变量名称为字段名。(1)结构定义伪指令格式:结构名STRUC[字段名]〈数据定义语句〉┇结构名ENDS功能:定义一个结构。它含有由数据定义语句所确定的数据结构,
并引用结构名来代表这种结构。【例5-27】ABCSTRUCADB?BDB′ABC12′CDW120ABCENDS9.结构及字段的引用格式:结构变量名.结构字段名功能:通过引用结构变量名及其字段名来使用结构类型数据中的字段。【例5-29】MOVAL,SA.A;引用结构变量SA的A字段值(
3)条件汇编伪指令●条件汇编的主要作用是根据条件有选择地对程序汇编。一般格式:IF××〈表达式〉┇}程序段1[ELSE]┇}程序段2ENDIF功能:当条件为真时,对程序段1进行汇编,如有ELSE及程序段2则跳过;当条件为假时,跳过
程序段1,对程序段2进行汇编(若有ELSE及程序段2)。10.●IF表达式功能:表达式值不为0,汇编程序段1,否则跳过。●IFE表达式功能:表达式值为0,汇编程序段1,否则跳过。●IFB〈参数〉功能:参数为空格,汇编程序段1,否则跳过。(参数要用〈〉扩起)●IFNB
〈参数〉功能:参数不为空格,汇编程序段1,否则跳过。●IFIDN〈参数1〉,〈参数2〉功能:字符串参数1与字符串参数2相同,汇编程序段1,否则跳过。有多种伪指令操作,下面介绍常用的几个:条件汇编其他伪指令(1)定位伪指令格式:ORG数值表达式功能:指定在它之后的程序段或数据块所存放的起始地址
的偏移量。【例5-31】ORG0100H;从0100H开始存放ORGDS|+20;DS|为当前地址,从此地址后20字节处开始存放●当无ORG伪指令时,从段首址开始存放程序或数据。11.注意注释说明伪指令格式:COMMENT定界符注释定界符功能:用于
在程序中加入注释,即定界符间的内容全部为注释。(2)宏指令●为了简化汇编语言源程序,可以把一些频繁出现的程序段定义为“宏指令”1.宏定义及其调用宏定义的一般格式为:宏指令名MACRO[形参,形参,┅]┇宏体ENDM5.3●为了实现ASCII码和BCD码之间的相互转换
,往往需要把AL中的内容左移或右移4位。设左移4位,可用下列指令序列实现:MOVCL,4SALAL,CL●若多次使用,则可用一条宏指令来代替,宏定义如下:SHIFTMACROMOVCL,4SALAL,CLENDM【例5-32】带参数的宏【例5-34】SHIFTMACROXMOVCL,XSAL
AL,CLENDM●X是一个形式参数,这里代表移位次数。在调用时,可把实际要求的移位次数作为实际参数代入,如SHIFT4,就可用实在参数4代替在宏定义体中出现的形式参数X,从而实现移位4次。若再引用一个形式参数:SHIFTMACROX,YMOVCL,XSALY,CLENDM●用形式参数Y
来代替需要移位的寄存器,只要在调用时,把要移位的寄存器作为实际参数代入,就可以对任一个寄存器实现指定的左移操作。2.主要的宏操作伪指令(1)宏定义伪指令格式:宏指令名MACRO[形参,形参,┅]┇宏体ENDM(2)取消宏指令名伪指令格式:PURGE宏指令名[
,┅]功能:用于注销若干宏定义。(3)重复伪指令格式:REPT(表达式)┇宏体ENDM功能:重复执行若干次宏体所包含的语句。其中执行的次数由表达式的值决定。3.汇编语言程序的结构●汇编语言源程序由语句序列组成,该语句序列应包括可执行指令组成的指令语句和对符号定义、分配存储单元
、分段等一些伪指令语句。●此外,80X86微处理器系统的存储结构是分段式访问结构,这种结构是程序运行的基础。因此80X86汇编语言源程序通常具备数据段、代码段和堆栈段等。5.4.1汇编语言源程序的结构5.4汇编语言和DOS操作系统之间
的接口●为保证用户程序执行完后能回到DOS,应采取两项措施:●将用户程序中主程序的一部分定义为FAR过程,其最后一条指令为RET●在代码段的主程序(即FAR过程)的开始处将PSP所在段的段基值DS(或ES)保存进栈,然后再将
一个全0的字压入堆栈(PSP的段内偏移地址)。5.4.2DOS系统功能调用●MSDOS中常用的软中断有8条,系统规定它们的中断类型码为20H~27H,它们各自的功能及入口/出口参数见表4-3。5.5●INT21H中断本身包含很多子程序,每个子程序对应一
个功能,其编号从0~62H。调用它们时采用统一的格式如下:①传送入口参数到指定寄存器中;②功能号送入AH寄存器;③INT21H。常用的系统功能调用1.键盘输入单字符——1号系统功能调用使用格式如下:MOVAH,1INT21H2.键盘输入字符串——0AH号系统功能调用●功能是将键盘输入的字符串
写入到内存缓冲区中,因此必须事先定义一个缓冲区。输出单字符——2号系统功能调用使用格式如下:MOVDL,′A′MOVAH,2INT21H●执行2号系统功能调用时,将置入DL寄存器中的字符A送屏幕显示。3.输出字符串——9号系统功能调用●功能是将指定的内存缓冲区中
的字符串在屏幕上显示出来,缓冲区的字符串以“DS|”为结束标志。使用格式如下:BUFDB′GOODBYEDS|′┇MOVDX,OFFSETBUFMOVAH,9INT21H;在显示器屏幕上显示GOODBYE4.使
用格式如下:MOVAH,4CHINT21H●它没有入口参数,执行结果是结束当前正在执行的程序,并返回DOS操作系统。返回操作系统——4CH号系统功能调用5.直接控制台输入/输出单字符——6号系统功能调用如果DL=0FFH,则表示是从键
盘输入单字符送AL寄存器;如果DL≠0FFH,则表示是将DL寄存器中的内容送屏幕显示输出。它们的使用格式如下:MOVDL,0FFHMOVAH,6INT21H;键盘输入单字符送ALMOVDL,′A′MOVAH,6INT21H;将DL中的字符A送屏幕显示6.从串口输入单字符——3号系统功能调用使用
格式如下:MOVAH,3INT21H●它没有入口参数,系统将从异步通信口串行输入的字符置入AL寄存器中。使用格式如下:MOVDL,′DS|′MOVAH,4INT21H●执行时将DL寄存器中的字符通过异步通信口串行输出。为节省篇幅,不再赘述其他的系统功
能调用,需要时请参阅附录B。8.向串口输出单字符——4号系统功能调用7.汇编语言程序设计5.6.1程序设计步骤●程序是计算机命令的有序集合,用计算机求解某些问题时往往需要编制程序,其设计步骤归纳如下:(1)分析问题(2)建立数学模型(3)确定算法(4)绘
制程序流程图(5)内存空间分配(6)编制程序与静态检查(7)程序调试5.6汇编语言程序设计方法1.简单程序设计●简单程序,又称为顺序程序。这种程序的形式最简单,计算机执行程序的方式是“从头到尾”,逐条执行指令语句,直到程序结束,这是最基本的形式
,任何程序都离不开这种形式。●在汇编语言程序中简单程序主要由数据传送指令、算术运算指令和逻辑运算指令组合而成。5.6.22.分支程序设计●分支程序可以有两种形式:简单分支结构和多分支结构。其中简单分支结构有两种,相当于高级语言中的IFTHEN和IFTHENELSE结构;多分支结构则相当于高级语言
中的DO-CASE结构。它们的流程图如图4-3所示。【例5-38】比较两个无符号数的大小。在A和B单元各有一个8位无符号数,要求比较这两个无符号数,并根据比较结果在屏幕上显示A>B或B>A(假设这两个数不相等)。分析:首
先使用比较指令比较两个无符号数的大小,然后根据标志位,使用无符号数转移指令实现转移。其程序流程图如图5-4所示。简单分支程序设计(1)(2)多分支程序设计3.(1)循环程序的结构与组成循环程序设计1)循环的初始化部分。2)循环工作部分。3)循环控制部分。4)循环结束部分。(2)循环控制方法1)计
数法2)条件控制法(3)多重循环●图5-6给出了二重循环程序的结构框图。子程序设计●子程序相对主程序而言,是一个子的程序段,确切地说,它是被主程序调用的程序。子程序调用示意图如图5-8所示。图5-8子程序调用示意图子子子1子2子1子2主主主主bacd4.●一般来说有
公用性、重复性或有相对独立性的程序段应设计成子程序。这种结构给程序设计带来了许多方便。(1)(2)子程序设计应注意的问题1)现场保护和恢复。2)参数传递。3)子程序说明。·子程序名·功能、技术指标(如执行时间等)·入口参数、出口参数·嵌套哪些子程序子程序调用和返回子程序调用技巧1)子程序嵌
套2)子程序递归3)可重入子程序4)协同子程序●子程序调用子程序的过程称为子程序嵌套,如图4-8d所示。●子程序调用自身的过程称为递归,如图4-9a所示。●子程序被调用后没有执行完又被另一程序重复调用称为可重入子程序。一般用于多用户系统如图4-9b所示。●两个以上子程序协同完成同一任务,且相互
调用,直到任务结束。(3)图5-9子程序递归和重入示意图主子子程序主程序1主程序2ab程序设计举例●前面已经介绍了程序设计的基本方法。本节将给出一些程序设计的例子,这些例子涉及一些常用程序,通过这些例子可以掌
握一些程序设计的技巧和方法。1.算术运算程序【例5-9】多字节压缩型十进制数加法。【例5-45】非压缩的十进制数相乘。5.6.3非数值处理程序●非数值处理即处理数值以外的数据,如字符、字符串、代码、记录和表格等。非数值处理程序有很多,主要有:代码转换、字符处理、表处理等。(1)代
码转换1)二进制码与ASCII码间的相互转化。2)二进制与BCD码间的相互转化。3)BCD码与ASCII码间的相互转换。4)二进制数到七段显示码的转换。2.图5-11七段显示器及其显示码表数0123456789码40H79H24H30H19H12H02H78H
00H18H0D6D5D4D3D2D1D0gaabef不用gdccbdefa)外形图b)各段与字节各位的对应关系c)十进制数于七段显示码的关系表字符数据处理1)字符串比较2)字符的删除与插入(3)表处理。●字符和字符串的处理是计算机应用的一个重要方面。字符数据处理一
般包括统计、比较、删除、插入等。●表格是软件最基本的数据结构。表格中可以存放一系列相关联的数据及执行结果,可供运算和查询。(2)小结●常数、变量和标号的概念5.1.2表达式与运算符5.2.1伪指令语句的格式5.1宏汇
编语言的基本语法5.1.1常数、变量和标号5.2.2常用伪指令●宏定义及其调用●带参数的宏●主要的宏操作伪指令5.2伪指令5.4.1汇编语言源程序的结构5.3宏指令5.4汇编语言程序的结构5.4.2汇编语言和DOS操作系统之间的接口5.5DOS系统功能调用5.6汇编
语言程序设计5.6.1程序设计步骤5.6.2汇编语言程序设计方法●简单程序设计●分支程序设计●循环程序设计●子程序设计5.6.3程序设计举例●算术运算程序●非数值处理程序