微机原理与接口技术第四章_第1页
微机原理与接口技术第四章_第2页
微机原理与接口技术第四章_第3页
微机原理与接口技术第四章_第4页
微机原理与接口技术第四章_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

微机原理及接口技术第四章汇编语言程序设计汇编语言和汇编语言程序格式伪指令汇编语言程序设计及举例微机原理及接口技术一、三种语言1.机器语言:计算机执行的指令一组二进制代码最原始编写程序的方式2.汇编语言:利用指令的助记符、符号、地址、

标号来编写的语言。说明:面向机器的语言,和机器硬件密切相关。3.高级语言:独立于机器第一节汇编语言和汇编语言程序格式微机原理及接口技术源程序汇编程序目标程序源程序编译程序目标程序微机原理及接口技术4.比较(1)机器语言:不易记忆和理解,使用和修改麻烦但程序效率高,执行最快。(2)汇编语言:执行速度与机器语言相当比机器语言易理解仍不能独立于机器多用于实时控制,实时通信程序(3)高级语言:易学习,使用方便,通用性强源程序较短,但目标程序大执行时间比较长,效率低微机原理及接口技术二、汇编语言程序格式源程序分段,若干段形成一个源程序,每段由若干语句行组成。NAME1SEGMENT

;段开始

语句NAME1ENDS

;段结束NAME2SEGMENT…NAME2ENDS…END<标号>微机原理及接口技术三、语句行的构成语句行:由标记(Token)及分隔符按一定规则组织起来的。标记符号表达式语句微机原理及接口技术1.标记

宏汇编源程序的最小的,有意义的单位。(1)字符集

1)字母:大小写英文字母

2)数字:0--9

3)特殊字符:+-*/=…可打印字符制表符,回车等不可打印字符(2)界符(Delimiters)

界符为特殊字符,表明某个标记的结束。如:,;<-?/微机原理及接口技术(3)常量

1)数字(整数)常量:二进制以B结束十进制十六进制以H结束

2)字符串常量:单引号内的ASCII字符构成‘A’(4)标识符(Identifiers)

程序员建立的有意义的字符序列,如SUM。最多为32个字母,数字,特殊字符(?@-$),不能是数字打头。微机原理及接口技术(5)保留字(Reservedwords)1)指令助记符,如:ADD,SUB,MOV2)寄存器名,如:AX,AL,SP3)伪指令,如:SEGMENT,END

4)其它保留字,如:BYTE,WORD(6)注释(Comment)

;后的任意字符序列,直至行末。返回微机原理及接口技术2.符号符号用来代替存储单元、寄存器、数据、表达式等,是一种标识符。(1)寄存器(Registers)

代表某一操作数,为8位或16位。(2)变量(Variable)

存放在存储单元中的操作数,程序中出现的是存储单元地址。

1)段值(SEGMENT):段地址的高16位,低四位为02)偏移量(OFFSET):段内偏移量16位

3)类型(TYPE):字节(BYTE),字(WORD),双字DWORD微机原理及接口技术(3)标号(Lable)

某条指令所存放单元的地址。属性:(1)段值

(2)偏移量

(3)类型:NEAR近,只改变IPFAR远,改变CS和IP(4)数

常数也以符号的形式出现,便于修改。如:COUNTEQU100(5)其它符号返回微机原理及接口技术3.表达式表达式由标志、符号通过运算符组合起来。一个表达式由操作数和运算符组成。(1)操作数(Operands)

一个操作数,代表一个数据,或一个寄存器名,一个存储单元地址。

1)常量操作数:如100,COUNT2)存储器操作数:为标识符,分为标号和变量。微机原理及接口技术(2)运算符(Operators)

一个运算符取一个或多个操作数的值,形成一个新值。

1)算术运算符:如+-*/MOD

对地址的运算如:加,减

2)逻辑运算符:如AND、OR、XOR、NOT微机原理及接口技术3)关系运算符相等EQ(Equal)

不等NE(NotEqual)

小于LT(LessThan)

大于GT(GreaterThan)

小于或等于LE(LessThanorEqual)

大于或等于GE(GreatThanorEqual)

说明:①两个操作数,或都为数字,或是同一段的存储单元地址,结果总是一个数值。②关系是假,数值为0

关系是真,数值为全1微机原理及接口技术

例1:MOVBX,PORT_VALLT51)若PORT_VAL<5关系为真,汇编后产生语句为

MOVBX,0FFFFH2)若PORT_VAL≥5关系为假,汇编后产生语句为

MOVBX,0

例2:与逻辑运算符结合用MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)1)PORT_VAL<5为:MOVBX,202)PORT_VAL≥5为:MOVBX,30微机原理及接口技术4)分析运算符存储器单元地址段地址偏移量类型分解成5)合成运算符

由已存在的存储器操作数生成一个段值和偏移量相同,而类型不同的新的存储器操作数。返回微机原理及接口技术4.语句

(1)指令型语句

即指令,汇编程序把它们翻译成机器代码。如:

MOV、ADD、JMP(2)指示型语句即伪指令,汇编程序并不把它们翻译成机器代码。伪指令用来为汇编程序提供某些信息,让汇编程序在汇编中执行某些特定功能。如:规定一个程序的数据段从哪里开始;分配存储单元。微机原理及接口技术(3)宏指令语句一条宏指令是一系列语句的缩写,可以是指令、指示性指令或宏指令。汇编程序将它解释为多个语句,然后汇编成机器代码。微机原理及接口技术说明:

1)指令格式标号:助记符参数,…参数;注释

伪指令格式名字命令参数,…参数;注释注意:指令标号后有冒号,伪指令后没有。

2)

指令的标号与指令的地址相联,可作为JMP和CALL指令的目标操作数。伪指令的名字与指令的地址毫无关系,绝不能转向它。18微机原理及接口技术四、汇编语言程序的开发汇编语言程序的开发过程:

1.源程序的编辑建立.ASM文件。

2.源程序的汇编用汇编器MASM.EXE汇编源程序,建立.OBJ文件。

3.目标文件的连接用连接器LINK.EXE将一个或多个目标文件与库文件进行连接,生成.EXE可执行文件。微机原理及接口技术4.可执行文件的运行汇编和连接后,生成的.EXE可执行文件可以直接运行。在命令行下键入文件即可。

5.可执行文件的调试用调试器对可执行文件进行调试,来发现错误。

DEBUG是最简单的调试器。

CodeView是多窗口、全屏幕的调试工具。微机原理及接口技术第二节伪指令二、数据定义语句一、符号定义语句三、段定义语句四、过程定义语句五、结束语句六、宏指令微机原理及接口技术一、符号定义语句(Symbol)1.等值语句格式:NAMEEQUEXPRESSION

功能:用来给变量,标号,常数,指令,表达式等定义一个符号。例:NUMBEREQU100常数赋给符号名表达式赋给符号NEW_PORTEQU PORT_VAL+1A1 EQU [BX+SI]B1 EQU OFFSETA1COUNT EQU CX存储单元内容赋给符号偏移地址赋给符号COUNT定义为CX的同义语微机原理及接口技术2.等号语句格式:NAME=EXPRESSION功能:与EQU的功能相同,区别在于EQU的左边标号不能重新定义,而=语句可以。例:

EMP=6EMP=EMP+1A1=BX+SIMOVAX,[A1];[BX+SI]单元内容→AXB1=ADDA1=BXMOVCX,[A1];[BX]单元内容→CX微机原理及接口技术3.解除语句格式:PURGE符号1,符号2,...

功能:已经用EQU定义的符号,不用了可用

PURGE语句来解除。例:

PURGENEW_PORTNEW_PORTEQUPORT_VAL+10

解除后的符号又可用EQU来重新定义了。返回微机原理及接口技术二、数据定义语句(Data)1.定义存储单元:DB,DW,DD,DQ,DT功能:DB定义字节,DW定义字,

DD定义双字,DQ定义4个字,

DT定义10个字节。

在MASM6.X中DB、DW、DD、DQ、DT可分别写作BYTE、WORD、DWORD、QWORD、TBYTE。微机原理及接口技术例:THINGDB25存储单元THING处存放25安排存储单元BUF1,内容不定BUF2单元开始留出9个单元,内容不定42H放BUF3单元,41H放BUF3+1单元BUF4单元开始留出4个字单元,内容不定()中为值,内容不定BUF1DB?BUF2DB9DUP(?)BUF3DW4142HBUF4DW4DUP(?)重复次数微机原理及接口技术BIGGEST_THINGDD12345678H双字,定义4个字节IN_PORTDBPORT_VAL初始值为表达式,PORT_VAL已赋值BUF5DB6DUP(0)BUF6DB4DUP(1,2DUP(20H))BUF5开始的6个单元,初始值为0DUP嵌套外重复次数内重复次数20H,20H重复四次

1,20H,20HLITTLE_CYCLEDWCYCLECYCLE的段内偏移放入LITTLE_CYCLE,LITTLE_CYCLE+1BIG_CYCLEDDCYCLECYCLE段地址和偏移,4个字节POWERS_2DB1,2,4,6,16参数为一个表,5个字节EXAM1 DB‘THISISAEXAMPLE’定义了字符串COUNT DT?定义了10个字节,内容不定微机原理及接口技术说明:(1)定义数据是使汇编程序在汇编时为数据分配存储单元。(2)?表示内容不定,但保留存储单元。(3)DUP后的()中给出一个初值(或一组初值),前面的数字为初值的重复次数。微机原理及接口技术例:设有下列数据段定义:

data segment d1 db -1,?,3*2 db 2dup(2dup(?),5),14h n equ 10 d2 dw -1,?,3462h,n d3 db ‘ABC’ d4 dd 0abcdh data ends(1)EQU不占用内存空间。(2)

变量d1的偏移地址为0。(3)对d3的定义等价于d3 db ‘A’,‘B’,‘C’19微机原理及接口技术2.分析运算符功能:把存储器单元地址分解成它的组

成部分,如段地址、偏移量和类型。运算符:SEG段地址

OFFSET偏移地址

TYPE类型

LENGTH单元数

SIZE字节总数微机原理及接口技术若在一个程序的数据段定义:DATA_TABLESSEGMENTBUFFER1DB100DUP(0)BUFFER2DW200DUP(20H)BUFFER3DD100DUP(13)DATA_TABLESENDS微机原理及接口技术(1)

段地址SEG

格式:SEG

变量或标号功能:返回变量或标号的段地址

例:MOVAX,SEGBUFFER1;数据段地址→AXMOVDS,AX(2)偏移地址

OFFSET

格式:OFFSET

变量或标号功能:返回变量或标号的偏移地址

例:MOVBX,OFFSETBUFFER1MOVSI,OFFSETBUFFER2微机原理及接口技术(3)

类型

TYPE

格式:TYPE

存储器操作数功能:返回存储器操作数的类型

存储器操作数类型数据字节1

数据字2

数据双字4NEAR指令单元-1FAR指令单元-2注意:(1)字节、字、双字类型分别是它们所占字节数。

(2)指令单元的类型没有实际的物理意义。

微机原理及接口技术(4)LENGTH格式:LENGTH

变量功能:返回一个与存储器地址操作数相联系的单元数(字节,字,双字)。

注意:存储区必须用DUP()定义,否则返回1

例:

MOVCX,LENGTHBUFFER1;100→CXMOVBX,LENGTHBUFFER2;200→BX微机原理及接口技术(5)SIZE

格式:SIZE

变量功能:返回该变量包含的总字节数。

SIZE=TYPE×LENGTH

例:

SIZEBUFFER1=100SIZEBUFFER2=400SIZEBUFFER3=400MOVBX,SIZEBUFFER2;400→BX微机原理及接口技术3.合成运算符(1)PTR

格式:类型/距离

PTR

变量或标号功能:将左边的类型属性赋给右边的变

量或标号。

注意:(1)PTR本身不分配存储单元,仅给已分配的存储单元赋予新的属性,以保证运算时操作数类型匹配。

(2)常与类型BYTE,WORD,DWORD,

NEAR,FAR连用。微机原理及接口技术例1:TWO_BYTEDW?分配存储单元赋予新属性,但不分配存储单元ONE_BYTEEQUBYTEPTRTWO_BYTE(1)TWO_BYTE定义类型是字。(2)PTR建立一个新的存储器操作数ONE_BYTE,由PTR左边的BYTE规定了类型为字节。(3)这样TWO_BYTE只能用于字操作,如:

MOVTWO_BYTE,AXONE_BYTE只能用于字节操作,如:

MOVAL,ONE_BYTE微机原理及接口技术例2:MOV[BX],6

用PTR指明送入的是字节还是字。

MOVBYTEPTR[BX],6MOVWORDPTR[BX],6

第一条指令是06H→[BX]

第二条指令是0006H→[BX+1][BX]例3:JMPFARPTRINCHES;段间转移微机原理及接口技术(2)THIS

格式:变量/标号EQUTHIS

类型/距离

功能:将EQU右边的类型/距离属性赋给左边的变量/标号,左边的变量/标号的段地址和偏移与下一存储单元的地址相同。

注意:THIS和PTR一样,也不分配存储单元。微机原理及接口技术例1:DATA_TABLESSEGMENTWBUFFER1EQUTHISWORDBUFFER1DB100DUP(0)BBUFFER2EQUTHISBYTEBUFFER2DW200DUP(20H)DWBUFFER3EQUTHISWORDBUFFER3DD100DUP(13)DATA_TABLESENDS(1)WBUFFER1用THIS指定,其段地址和偏移与BUFFER1相等,区别是WBUFFER1为字,BUFFER1为字节。(3)DWBUFFER3是字,BUFFER3是双字。(2)BBUFFER2是字节,BUFFER2是字。返回微机原理及接口技术1.ORG

格式:ORG<表达式>

功能:指定段内程序和数据存放的起始地址。例:ORG0100H;定位于偏移地址0100HORG$+20

定位于当前地址后的20个字节处,$指本条指令的第一个字节地址。三、段定义语句(Segment)微机原理及接口技术例:数据段:

S01 DB 12H,34H ORG$+4S02 DW 2,0ABCDH12H34HS01S0202H00HcdHabH微机原理及接口技术2.SEGMENT…ENDS

格式:段名SEGMENT定位类型,组合类型,‘分类名’

逻辑段内容段名ENDS

功能:将一个逻辑段定义成一个整体。段名:逻辑段标识符,不可省略。SEGMENT…ENDS:段定义的伪指令助记符,成对出现,右边三个参数一般可省略。微机原理及接口技术3.ASSUME

格式:

ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定义4个逻辑段。注意:段寄存器的值程序中要赋给。说明:可用ASSUMENOTHING取消前面的定义,如

ASSUMEDS:NOTHING微机原理及接口技术例:如何使用SEGMRNT,ENDS,ASSUMEMY_DATASEGMENT;定义数据段XDB?YDW?ZDD?MY_DATAENDSMY_EXTRASEGMENT;定义附加数据段ALPHADB?BETADW?GAMMADD?MY_EXTRAENDS微机原理及接口技术MY_STACKSEGMENT;定义堆栈段

DW100DUP(?)TOPEQUTHISWORDMY_STACKENDS微机原理及接口技术MY_CODESEGMENT;定义代码段

ASSUMECS:MY_CODE,DS:MY_DATAASSUMEES:MY_EXTRA,SS:MY_STACKSTART:MOVAX,SEGXMOVDS,AXMOVAX,SEGALPHAMOVES,AXMOVAX,MY_STACKMOVSS,AXMOVSP,OFFSETTOPMY_CODEENDSENDSTART返回20微机原理及接口技术例:设有下列数据段定义:

data segment org 100h buf1 db 10h,20h,30h,40h,50h buf2 dw buf1 buf3 dd buf1 count equ buf2–buf1 buf4 dw buf2–buf1 data ends

设data的值是1200H,请图示各数据在内存的存放方式。微机原理及接口技术四、过程定义语句(Procedure)

过程也称子程序,常用的子程序独立编写,用过程定义语句定义。格式:过程名PROC属性

过程内容

RET

过程名ENDP说明:(1)过程名:不可缺少,是主程序CALL

的目标操作数。

(2)PROC….ENDP:过程定义伪指令。

(3)RET:至少有一条RET。微机原理及接口技术例:一个过程定义的例子SEGX SEGMENTSUBT PROCFARSUBCX,1RETSUBT ENDPSTART:…... CALLSUBT…... CALLSUBT……SEGX ENDS ENDSATRT返回微机原理及接口技术五、结束语句(Termination)

1.SEGMENT…ENDS段结束

2.PROC…ENDP过程结束3.源程序结束语句END格式:END<表达式>功能:告诉汇编程序,整个源程序结束。表达式通常是程序第一条指令前的标号。返回微机原理及接口技术六、宏指令(Macro)

宏是源程序中一段有独立功能的语句序列,它只要在程序中定义一次,就可以多次调用。调用时用一条宏指令语句即可。汇编器将一个宏展开为它所表示的语句,然后汇编这些新的语句。微机原理及接口技术1.

宏定义、宏调用和宏展开

宏定义由一对伪指令MACRO与ENDM实现。宏指令名MACRO[形式参数表]…;宏体

ENDM

宏指令名在同一源文件中不能重复出现,宏体可以是任意语句序列,可选的形式参数表以逗号分隔的若干参数名。微机原理及接口技术

宏调用:

宏指令名

[实在参数表]

其中,实在参数表的类型和顺序应与宏定义时的形式参数表一致。当源程序被汇编时,MASM用相应的宏体取代每个宏调用,并用实在参数按位置替换宏定义中的形式参数,称为宏展开。微机原理及接口技术例:定义一个宏ADD2,将两个数相加,和存入AX。宏定义宏体ADD2MACRONBR1,NBR2MOVAX,NBR1ADDAX,NBR2ENDM宏调用:ADD2VALUE1,VALUE2宏展开:MOVAX,VALUE1ADDAX,VALUE2微机原理及接口技术例:宏定义。宏定义宏体SHIFTMACROX,Y,ZMOVCL,XYZ,CLENDM宏调用:SHIFT4,SHL,AX宏展开:MOVCL,4SHLAX,CL微机原理及接口技术2.

跟宏有关的伪指令

(1)LOCAL伪指令

LOCAL伪指令用来定义宏内部局部符号。

LOCAL符号名,…,符号名

LOCAL伪指令必须是宏体内的第一条语句。宏展开时,MASM将源文件中的所有局部符号统一按出现次序替换为唯一的标识符(??0000~??FFFF)。21微机原理及接口技术例:宏定义。ABSOLMACROOPERLOCALNEXT CMPOPER,0JGENEXTNEGOPERNEXT:…ENDM宏调用:

…ABSOLVAR…ABSOLBX宏展开第一个宏:+

CMPVAR,0+

JGE??0000+

NEGVAR+??0000:第二个宏:+

CMPBX,0+

JGE??0001+

NEGBX+??0001:微机原理及接口技术

(2)EXITM伪指令

EXITM伪指令用来立即终止宏展开,通常与条件汇编结合使用。

MASM忽略EXITM与ENDM之间的所有语句。例:宏定义。BytesmacroCountifCounteq0dbCountexitmendifdbCountdup(0)endm宏调用Bytes0;时在汇编时被展开为db0Bytes10;时在汇编时被展开为db10dup(0)微机原理及接口技术七、其它1.NAME

格式:NAME

程序名功能:为源程序目标模块赋名字,放在

程序开始。微机原理及接口技术2.LABEL格式:名称LABEL

类型属性功能:给已定义的变量或标号另取一个名字,重新定义类型属性。名称为LABEL语句下一行所使用的语句中的变量或标号取的别名。微机原理及接口技术(1)与变量连用例1:DATBLABELBYTEDATWDW3031H,3032HMOVAL,DATB[0]MOVBX,DATW[1]DATB为DATW的别名31H→AL3032H→BX注意:

变量DATB类型为字节,变量DATW类型为字。微机原理及接口技术例2:堆栈段中常用LABELSTACKSEGMENTSTACK‘STACK’DW100DUP(?)TOPLABELWORDSTACKENDS100个字堆栈TOP为栈顶的名微机原理及接口技术(2)与标号连用例:

DISFLABELFARDISN:MOVAX,[SI]DISF为DISN的别名DISF的属性为FAR微机原理及接口技术第三节汇编语言程序设计及举例概述顺序结构分支程序循环程序字符串处理程序码转换程序DOS系统功能调用子程序设计微机原理及接口技术一、概述1.编写步骤

(1)分析问题,抽象出数学模型

(2)确定算法

(3)画程序流程图工作框判断调子程序

(4)分配内存工作单元和寄存器。

(5)按程序流程图编制程序。

(6)上机调试,排错。起始框终止框微机原理及接口技术2.程序质量判断

(1)执行时间

(2)占用内存空间

(3)语句行数3.程序结构顺序分支循环子程序返回微机原理及接口技术二、顺序结构例4-1:P.105,两个8位无符号数x和y,分别存放在BUF和BUF+1单元中,计算x-y的值,结果存回BUF单元。微机原理及接口技术SSEG SEGMENT STACK‘STACK’STA DW 100DUP(?)SSEG ENDSDSEG SEGMENT‘DATA’BUF DB 82,60DSEG ENDSCSEG SEGMENT‘CODE’ ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: … … …CSEG ENDS

END START堆栈段源程序结束代码段数据段微机原理及接口技术说明:(2)数据段DSEG SEGMENTBUF DB 82,60DSEG ENDS(1)堆栈段SSEG SEGMENT STACK ‘STACK’STA DW 100DUP(?)SSEG ENDS数据段定义减数被减数微机原理及接口技术(3)码段CSEG SEGMENT ASSUMECS:CSEG,DS:DSEG,SS:SSEG … … …CSEG ENDSASSUME语句指明了哪些段是码段、数据段、堆栈段和附加段微机原理及接口技术

1)

给DS赋值START:MOV AX,DSEG MOV DS,AX2)减法

MOV AL,BUFSUB AL,BUF+1MOVBUF,AL3)返回DOSMOVAH,4CHINT21H返回微机原理及接口技术三、分支程序例4-2:字节变量CHAR1放小写字母字符,化为大写。大转NEXT与a的ASCII码比较小转NEXT与z的ASCII码比较CODE1SEGMENT MOVAL,CHAR1CMPAL,’a’JBNEXTCMPAL,’z’JANEXT SUBCHAR1,20HNEXT:…CODE1ENDS化为大写微机原理及接口技术(1)数据段DW定义的字变量XDW定义的字变量YDATA1 SEGMENTX DW ?Y DW ?DATA1 ENDS例4-3:P.106计算函数值Y,变量X和Y是带符号的字变量。微机原理及接口技术(2)代码段X>10建立条件<00<=X<=10存结果 MOVAX,X CMPAX,0

JGECASE23 ADDAX,10 JMPRESULTCASE23: CMPAX,10

JG CASE3 MOVBX,30 IMULBX JMPRESULTCASE3: SUBAX,190RESULT:MOVY,AX …返回22微机原理及接口技术四、循环程序组成:

(1)初始化(2)循环体(3)修改参数(4)循环控制结构形式:微机原理及接口技术1.用计数器控制循环

(1)减1计数器

LOOP/LOOPE/LOOPNE(2)加1计数器微机原理及接口技术

例4-4:P.109分类统计字数组data中正数负数零的个数,放至指定的存储单元,数组元素个数存在其第一个字中。存正数个数11个字,第一个为长度存零个数(1)数据段DATA1SEGMENTDATADW10,X1,…X10POSITIONDW0NEGATIVEDW0ZERODW0DATA1ENDS存负数个数微机原理及接口技术CODE1SEGMENTASSUMECS:CODE1,DS:DATA1START

:MOV AX,DATA1MOV DS,AXXOR AX,AXXOR BX,BXXOR DX,DX MOV CX,DATA JCXZ SAVE LEA SI,data+2清零CX:减1计数器(2)代码段CX=0结束SI地址指针(3)

循环初始化给DS赋值微机原理及接口技术AGAIN: CMPWORDPTR[SI],0

JL LOWER

JE EQUAL INC AX

JMP LOOP1LOWER: INC BX

JMP LOOP1EQUAL: INC DXLOOP1: ADD SI,2

LOOP AGAIN(4)循环体与0比较0,转EQUAL负,转LOWER(5)

修改参数,指针加2(6)循环控制CX-1→CX为0结束正,AX+1负,BX+10,DX+1微机原理及接口技术SAVE:

MOV POSITION,AX

MOV NEGATION,BX MOV ZERO,DX MOV AX,4C00H INT 21HCODE1 ENDS END START存个数微机原理及接口技术

2.条件控制循环循环次数不确定,根据循环过程中某个特定条件是否满足来控制循环继续还是退出。例4-5:P.111计算数组score的平均整数,并存入内存字变量Average中,数组以-1为结束标志。微机原理及接口技术存平均数数据,以-1结束(1)数据段DATA1SEGMENTdataDW90,95,…,50,-1Average DW0DATA1ENDS23微机原理及接口技术CODE1SEGMENTASSUMECS:CODE1,DS:DATA1START

:MOV AX,DATA1MOV DS,AXXOR AX,AXXOR DX,DXXOR CX,CX LEA SI,data清零(2)代码段SI地址指针(3)

循环初始化微机原理及接口技术

AGAIN:MOV BX,[SI] CMPBX,0

JL over ADDAX,BXADCDX,0 INC CXADDSI,2

JMP AGAINover:

JCXZexit

DIVCXMOVAverage,AXexit:MOV AX,4C00HINT 21HCODE1ENDSENDSTART(4)循环体负,转over退出循环(5)

修改参数,指针加2(6)循环,无条件跳个数为0,退出求和(DXAX)个数加1计算平均值,保存微机原理及接口技术

3.用开关变量控制循环一个循环体中有两个循环支路,设一个开关变量,控制进入哪个循环支路。例4-6:数据采集系统。采到的前5个数用一种函数(FUN1)处理,开关=0。采到的后7个数用另一种函数(FUN2)处理,开关=1。微机原理及接口技术说明:(1)数据:datasegmentbufferdw5,5,5,5,5,5,5,5,5,5,5,5blockdw12dup(?)count1equ5count2equ7dataends12个数据个数存结果微机原理及接口技术(2)初始化:

源数据指针buffer→bx

处理后数据指针block→sicount1+1,count2+1→cx

开关0→dx(3)循环主体:

判开关量dx=0?dx=0callfun15个数据处理完后dx=1,cx=count2+1dx=1callfun2

每处理完一个数,修改指针bx,si微机原理及接口技术

mov dx,0 mov cx,count1+1 lea bx,buffer

lea si,blockagain:mov ax,[bx] cmp dx,0 jne anoth call fun1 loop next mov dx,1 mov cx,count2+1 jmp againnext:

mov [si],ax inc bx inc bx inc si inc si jmp againanoth:call fun2 loop next(1)循环初始化开关dx=0cx为计数器bx源指针si目的指针(2)循环主体开关量转为1为0,函数1处理处理后保存(3)修改参数函数2处理(4)循环控制开关不为0转anoth微机原理及接口技术3.多重循环

一个循环中包含另一个循环,称多重循环。如:二维数组处理,二重循环。注意:

(1)各重循环的初始控制条件及实现。

(2)内循环可嵌套在外循环中,也可几个内循环并列在外循环中,可从内循环跳到外循环,不可从外循环中直接跳进内循环。

(3)要防止出现死循环。

微机原理及接口技术例4-7:延时程序,多重循环实现软件延时。DELAY:MOVDX,3FFH

TIME:MOVAX,0FFFFH

TIME1:NOPDECAXJNETIME1DECDX

JNETIMERET

内循环控制变量AX,初值=FFFFH

外循环控制变量DX,初值=3FFH返回微机原理及接口技术

子程序技术是解决重复性问题的设计方法,在汇编语言中又称为过程。1.

子程序调用格式:CALL子程序名分近调用(NEAR)和远调用(FAR)。五、子程序设计微机原理及接口技术2.参数传递技术入口参数出口参数传递参数的方法:

寄存器存储器堆栈微机原理及接口技术(1)寄存器传送参数例4-8P.115统计字符串中相同字符的个数,个数最多的字符存CMORE单元。

CL字符串长度

AL当前字符

BX当前字符地址

DL当前字符个数

DH重复字符最多个数

CALLCPP

子程序CPP统计当前字符的重复次数放DL,当前字符放AL。微机原理及接口技术主程序:LEA BX,CSTRN MOV CL,50 MOV DX,0 MOV AL,[BX] MOV CMORE,ALLP: MOV AL,[BX]

CALL CPP CMP DH,DL JNC NEXT MOV DH,DL MOV CMORE,ALNEXT:INC BX DEC CL JNZ LP 调统计重复字符数子程序BX:字符串首地址CL:字符串长度DH:重复个数(最多)DL:重复个数(当前)当前字符个数多,保存AL:当前字符修改参数,控制循环微机原理及接口技术CPP

PROC XORDL,DL MOVCH,CLMOVSI,BX INC SILP1:CMPAL,[SI] JNZ NEXT1INC DLNEXT1:INC SIDEC CHJNZ LP1RETCPP ENDP统计当前字符的重复次数AL:当前字符SI:串地址CH:串长度DL:重复次数重复次数清0判重复?重复计数DL修改参数长度、地址送CH、SI未完继续子程序微机原理及接口技术(2)存储单元传送参数数据多,放在存储器中,传递存储地址。例4-9P.116统计字符串中数字字符、字母、其它字符的个数,存BX、CX、DI中,字符串首地址DS:DX(以字符0结束)。微机原理及接口技术COUNTPROC PUSHAX PUSH SIXORBX,BX XOR CX,CXXOR DI,DI MOV SI,DXagain:MOV AL,[SI]INC SICMP AL,0JE overCMP AL,’0’JL otherCMP AL,’9’保护现场<‘0’转other数字字符计数清0其它字符JG nextINC BXJMP againnext:CALL UPPERCMP AL,’A’JL otherCMP AL,’Z’JG otherINC CXJMP againother:INC DIJMP againover:POP SIPOP AXRETCOUNTENDP<‘A’>’Z’other字母恢复现场字符0结束24微机原理及接口技术(3)堆栈传送参数数据定义:

STRINGDB‘……’LENGTH1DW$-STRINGKEYDB‘x’主程序中将数据压入堆栈。

LEABX,STRINGLEACX,LENGTH1PUSHBX;压入参数1

PUSHCX;压入参数2CALLDELCHAR子程序中取出堆栈中数据。STRHSTRLLENGHLENGL返回H返回LSP高微机原理及接口技术子程序:DELCHAR:PUSHBPSTRHSTRLLENGHLENGL返回H返回LBP(SP)BPHBPLSPSPSPMOVBP,SPMOVSI,[BP+4];取LENGTH1地址MOVDI,[BP+6];取STRING地址

……POPBPRET4再弹出4个字节微机原理及接口技术例4-10:P.117,从一个字符串中删去一个字符。说明:字符串要删的字符长度(1)数据段

DATASEGMENT

STRING

DB‘…’

LENGTH1DW$-STRINGKEYDB‘x’DATAENDS微机原理及接口技术(2)参数传送采用堆栈,主程序中:

LEABX,TRINGLEACX,LENGTH1PUSHBX;压入STRING地址

PUSHCX;压入LENGTH1地址

MOVAL,KEYCALLDELCHAR;调用删字符子程序微机原理及接口技术(3)子程序DELCHAR:删一个字符

1)取出参数DELCHARPROCPUSHBPMOVBP,SPPUSHSIPUSHDIPUSHCXCLDMOVSI,[BP+4];取LENGTH1地址→SIMOVCX,[SI];得到长度

MOVDI,[BP+6];取STRING地址→DI微机原理及接口技术

2)删去一个字符

REPNESCASBJNEDONEMOVSI,[BP+4]DECWORDPTR[SI]MOVSI,DIDECDIREPMOVSB扫描字符串找到删字符未找到退出SI串长度地址串长度减1依次向前移DIDISIxSTRING微机原理及接口技术

3)子程序返回

DONE:POPCXPOPDIPOPSIPOPBPRET4DELCHARENDPCODEENDSENDSTART返回25微机原理及接口技术六、码转换程序十六进制、二进制、BCD码、ASCII码转换方法:(1)算术和逻辑运算指令,软件实现;(2)查表指令;(3)硬件译码。微机原理及接口技术1.十六进制→ASCII例4-11:有一个二进制数码串,把每一个字节中的二进制转换为两位十六进制数的ASCII码,高四位的ASCII码放在地址高的单元。串中的第一个字节为位串的长度。微机原理及接口技术说明:

(1)十六进制:0~9A~FASCII码:30H~39H41H~46H

对0~9,加上30H

对A~F,加上‘A’-10(2)地址指针:源(十六进制)bx

目的(ASCII)si(3)cx=L1=2,每次循环转换一个字节两位十六进制数:低位与高位拆开:1)AND AL,0FH2)MOV CL,4SHR AL,CL低四位原高四位→低四位微机原理及接口技术

数据段data segmentl1 dw 2string db 14h,9Ahl2 dw ?buffer db 2*2dup(?)data ends串长度l1放串长度l2十六进制数放ASCII微机原理及接口技术code segmentassumecs:code,ds:data,es:datastart:movax,datamovds,axmoves,axmovcx,l1leabx,stringleasi,buffermovax,cxsalcx,1movl2,cxmovcx,ax存ASCII码串长度源串长度→CXbx:源地址指针si:目的地址指针

代码段微机原理及接口技术again:moval,[bx]movdl,alandal,0fh

callchangemoval,dlpushcxmovcl,4shral,clpopcx

callchangeincbx

loopagainmovah,4chint21h取十六进制数低四位→ASCII高四位→ASCII微机原理及接口技术一位十六进制数ASCII码子程序:

change proc cmpal,10 jladd_0

addal,’A’-’0’-10add_0: addal,’0’ mov[si],al incsi retchange endpcode ends endstart0~9转add_0A~F0~9微机原理及接口技术2.ASCII→压缩BCD说明:(1)对非压缩BCD码,只要将ASCII的高4位屏蔽(AND)即可。

(2)对压缩BCD码,要处理两个ASCII码,先为低位BCD码,后为高位BCD码,组合起来。

微机原理及接口技术datasegmentl2dw4bufferdb34h,33h,38h,39hl1dw?stringdb2dup(?)dataendsstacksegmentstack’stack’db100dup(?)stackendsASCII存BCD码微机原理及接口技术

codesegment

assumecs:code,ds:data,es:data,ss:stackstart

:movax,datamovds,axmoves,ax微机原理及接口技术

movcx,l2shrcx,1movl1,cxleabx,bufferleasi,stringagain:moval,[bx]

andal,0fhmovdl,alincbxmoval,[bx]

andal,0fhBCD码区长度取ASCII码化为BCD码取下一个ASCII码化为BCD码微机原理及接口技术

pushcxmovcl,4shlal,cl

popcx

oral,dl

mov[si],al

incbxincsiloopagainmovah,4ch

温馨提示

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

评论

0/150

提交评论