第 4 章 汇编语言程序设计基本方法 微型计算机原理与应用 教学课件.ppt

第 4 章 汇编语言程序设计基本方法 微型计算机原理与应用 教学课件.ppt

第 4 章 汇编语言程序设计基本方法 微型计算机原理与应用 教学课件

第 4 章汇编语言程序设计基本方法 4. 2 8086/8088 指令系统 4.3汇编语言程序设计的基本方法 4.4汇编语言程序的编辑、 汇编与连接 4.5程 序 的 调 试 LEADI, STRING#; MOVCX, LENG#; MOVAL, ′A′#; REPNESCASB#; JNENO-FOUND 程序中的语句REPNE SCASB完成的是重复地进行(AL)与ES:DI所指单元的内容比较,直到(AL)=((DI))(即找到)或(CX)=0(即没找到)时为止。因此,该语句结束时有两种可能, 当ZF=1 时即为找到而结束,当ZF=0 时为没找到而结束。 例 4.3.22 要求在内存某缓冲区BUFFER中搜索一个指定的字符串,若在BUFFER中不存在该字符串,则返回标志位ZF=0; 若存在则ZF=1,且将该字符串的第 1 个字母在缓冲区中的地址送入ES:DI。 我们以过程的形式给出该程序,调用该过程的入口参数为:DS中为要搜索的字符串的段地址;BX中为该字符串的偏移地址; DX中为该串的长度。 程序如下: ******************************* * 子程序名: SRCH*#; * 子程序功能: 在某缓冲区中搜索一个指定的字符串* * 入口参数: 要搜索的字符串的首地址存于DS:BX中, 字* * 符串的长度存于DX中, 某缓冲区为指定内*#; * 存区BUFFER* * 出口参数: ZF=0, 缓冲区中不存在该串* * ZF=1, 缓冲区中有该串, 其首址在ES:DI中* * [CM(6]所用寄存器: AX,BX,CX,DX,DS,ES,SI,DI* ******************************* CODES SEGMENT#; ASSUME CS:CODES#; SRCHPROCFAR#; MOVAX, SEG BUFFER; 取缓冲区段地址 MOVES, AX#; MOVDI, OFFSET BUFFER; 取缓冲区首地址 MOVAX, OFFSET BUFEND; 取缓冲区末地址 SUBAX, DX#; CLD#; SRCH1:CMPDI, AX; DI所指位置到缓冲区末尾还有一个串的长度吗?  JANOT-FOUND; 没有则结束(且没找到) MOVSI, BX; 有则继续搜索 MOVCX, DX#; PUSHDI#; REPECMPS STRING, BUFFER#; POPDI#; JEFND#; INCDI#; JMPSRCH1#; NOT-FOUND:#; FND:RET#; SRCHENDP#; CODESENDS#=[HT5SS] 程序中用到的数据段的内容为: DATAFSEGMENT#; BUFFERDB 50H DUP(?)#; BUFENDLABEL BYTE#; DATAFENDS#; DATASSEGMENT#; STRINGDB 10H DUP(?)#; DATASENDS 程序说明: (1) 例中的程序是以子程序的形式给出的, 数据段中的内容是应该由主程序(调用程序)建立的。不同的主程序可以有不同的内容, 但必须有BUFFER缓冲区。 ? (2) 在搜索过程中地址指针DI不断下移, 当移到缓冲区中已不够一个串的长度时,程序就结束并说明已找不到这个串了。 (3) 程序中在字符串比较指令CMPS前将DI的内容保存于堆栈中, 这是为了记下被找到串的首地址的。 4.3.9宏指令 宏指令是利用CPU指令系统中已有指令按照一定的规则定义的新的指令。宏指令的功能是根据用户需要自己确定的。 宏指令一旦定义,在源程序中就可以像其它指令一样使用, 宏指令的引用称为宏调用。不过,CPU指令系统中所提供的指令在汇编时,一条指令只对应一条机器指令码,而一条宏指令在汇编后往往对应几条甚至几十条机器指令码,正是这样,有了宏指令后,可以对源程序的编写带来方便。 1. 宏定义 由于宏指令不是指令系统提供的,所以,必须定义后才能使用。 宏指令的定义是利用伪指令来实现的。 定义格式为: 宏指令名MACRO〈形式参数〉  … ENDM 宏体 宏指

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档