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

下载本文档

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

文档简介

1、数 值 计 算,汇编语言中,可进行数值计算的仅有加、减、乘、除、移位等最最基本的指令。 运用这些基本指令哪怕是完成稍微复杂一些的数值计算都是比较困难的。 要把某一问题分解成能够用加、减、乘、除完成的基本操作,然后才能着手编程。,设计思路 汇编语言没有十进制数加法指令,ADD/ADC加法指令的运算对象是二进制数,如果要进行BCD码数的加法,需要对结果进行修正。 组合BCD码的加法调整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。因此,在运用二进制数加法指令进行组合BCD码数加法时,就必须以AL为目标寄存器,紧接着用DAA指令对结果进行修正。,数值计算,例:多字节BCD码数相加 计

2、算两个组合的4字节BCD码数之和,.486 DATA SEGMENT USE16 XX DD 13572468H YY DD 55667788H SUM DB ?,?,?,?,? DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV SI,OFFSET XX MOV DI,OFFSET YY MOV BX,OFFSET SUM+4 CLC ;C标志清0 MOV CX,4 ;不影响C标志,EXE格式程序清单,BCD_ADD: MOV AL,SI ;不影响C标志 ADC AL,DI DA

3、A ;调整指令 MOV BX,AL ;不影响C标志 INC SI ;不影响C标志 INC DI ;不影响C标志 DEC BX ;不影响C标志 LOOP BCD_ADD ;不影响C标志 ADC CL,0 MOV BX,CL CALL DISP MOV AH,4CH INT 21H,DISP PROC MOV CX,5 MOV BX,OFFSET SUM LLL: MOV DH,BX ROL DX,4 AND DL,0FH ADD DL,30H MOV AH,2 INT 21H ROL DX,4,AND DL,0FH ADD DL,30H MOV AH,2 INT 21H INC BX LOOP

4、LLL RET DISP ENDP CODE ENDS END BEG,数 据 处 理,数据处理涉及的面比较宽,其中字符串处理和表格处理都属于数据处理范畴 数据表由若干表项组成。根据表项的内容可分为无序表和有序表两种。在无序表中各个表项的数值排列是无规则的,而在有序表中,表项是按其数值大小,从小到大,或从大到小依次排列的。 表格处理涉及到数据查找、插入、删除、排序、数据表转换等操作,其中查表是最基本的操作。 查表的方法有顺序查表、计算查表、对半搜索等,Eg:数据查找 设内存缓冲区从BUF单元开始,有若干单字节有符号数,要求找出最大数送MAX单元,最小数送MIN单元。,数据处理,编程思路 : 数

5、据查找的关键是进行数据比较,对于有符号数查找,其最大数和最小数都是针对真值数而言的。因此应使用有符号数的比较转移指令。,.486 DATA SEGMENT USE16 BUF DB 34,56,-1,7FH,-88,200,22,80H COUNT EQU $-BUF MAX DB ? MIN DB ? DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX,EXE格式程序清单,MOV CX,COUNT ;CX=数据个数 MOV AL,BUF MOV MAX,AL ;假设第一个数是最大数 MO

6、V MIN,AL ;假设第一个数是最小数 DEC CX ;CX=比较次数 MOV BX,OFFSET BUF+1 LAST: MOV AL,BX CMP AL,MAX ;比较 JG GREAT CMP AL,MIN JL LESS JMP NEXT,GREAT: MOV MAX,AL ;大数MAX JMP NEXT LESS: MOV MIN,AL ;小数MIN NEXT: INC BX LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG,Eg:字符串搜索 假设从STRING单元开始有一源串字符,程序执行后采用人机会话方式,从键盘输入一个任意长度的子串

7、,请查找源串中是否蕴含着键入的子串,并给出结果信息。,数据处理,设计思路: 1.子串的长度小于或者等于源串长度 时才进行搜索; 2.搜索的次数应当是源串长度减去子 串长度再加1; 3.用串指令实现主要的比较功能; 4.REPE CMPSB ;然后判断Z标志。,CMPSB指令执行前应做的准备工作: 欲进行增址型比较: 用CLD指令使方向标志D=0。源串首地 址DS:SI,目标串首地址ES:DI。 欲进行减址型比较: 用STD指令使方向标志D=1。源串末地 址DS:SI,目标串末地址ES:DI。,示范: welcome to our university our 第一次搜索 our 第二次搜索 。

8、 our 搜索到,停 止搜索 welcome to our university fox 第一次搜索 fox 第二次搜索 。 fox;未搜索到 最多搜索次数=源串长度-子串长度+1,用DOS系统0AH号功能调用,接受键入的子串, 并限制子串输入的有效长度(不包括回车)不超过源串长度(定义缓冲区时限制),;FILENAME:6115.ASM .486 DISP MACRO VAR MOV AH,9 MOV DX,OFFSET VAR INT 21H ENDM,EXE格式程序清单,DATA SEGMENT USE16 STRING DB BASIC FORTRAN_77 C+ FOXPRO JAV

9、A LENS EQU $-STRING ;源串长度 BUF DB LENS+1 ;限制子串长度最长为LENS DB ? DB LENS+1 DUP(?) ;预留子串的存储空间 NNN DW ? COUNT DB ? MESG1 DB Please Enter.$ MESG2 DB 0AH,- Found ! $ MESG3 DB 0AH,- No Found ! $ DATA ENDS,CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,ES:DATA BEG: MOV AX,DATA MOV DS,AX MOV ES,AX DISP MESG1 MOV AH,

10、0AH MOV DX,OFFSET BUF INT 21H ;接收一个子串 MOV AL,BUF+1 CMP AL,0 JZ NOFOUND ;子串长度为0转,MOV BYTE PTR NNN,AL MOV AH,LENS SUB AH,AL INC AH ;计算搜索次数 MOV COUNT,AH ;搜索次数 COUNT单元 CLD MOV BX,OFFSET STRING AGAIN: MOV SI,BX MOV DI,OFFSET BUF+2 MOV CX,NNN REPE CMPSB ;字符串搜索 JZ FOUND,INC BX DEC COUNT JNZ AGAIN NOFOUND:

11、DISP MESG3 JMP EXIT FOUND: DISP MESG2 EXIT: MOV AH,4CH INT 21H CODE ENDS END BEG,串搜索指令scas准备工作: 欲进行增址型比较: 用CLD指令使方向标志D=0。 要搜索的关键字放入AL、AX或EAX中。 目标串首址ES:DI。 欲进行减址型比较: 用CLD指令使方向标志D=1。 要搜索的关键字放入AL、AX或EAX中。 目标串末址ES:DI。,查 表 操 作,应用:根据源数据,查找目标数据 例:用XLAT指令完成十六进制 ASCII码 的转换, 并将转换结果显示于屏幕,数据处理,设计思路: 用查表指令需做准备工作

12、 查表指令要求,查表时的相对位移量需存 入AL寄存器 十六进制数有 0 9、 A F, 对应的ASCII码为30H39H、41H46H, 如何定义表?,.486 DATA SEGMENT USE16 TAB1 DB 30H,31H,32H,33H,34H,35H DB 36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H TAB2 DB 0,1,2,3,4,5,6,7,8,9 DB 0AH,0BH,0CH,0DH,0EH,0FH DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DAT

13、A MOV DS,AX,EXE格式程序清单,MOVCX,10H MOVBX,OFFSET TAB1 MOVSI,OFFSET TAB2 L1:MOVAL,SI XLAT MOVDL,AL MOVAH,2 INT21H MOVDL, MOVAH,2 INT21H INCSI LOOPL1 MOVAH,4CH INT21H CODEENDS ENDBEG,模块化程序设计,什么是“模块”? 能够独立汇编的一个逻辑段(例如仅有一个数据段),或者是能够独立汇编的若干个逻辑段的集合,就称为一个模块。每个模块都可以有自己的数据段、附加段、代码段。 什么是“模块化程序设计方法”? 把一个大型程序分解成若干个有

14、相对独立功能的小程序,由多人分别设计、调试生成各自的OBJ文件,最后由链接程序将它们链接成一个可执行文件。,模块化程序设计,模块化程序结构 1. 主模块和子模块 只允许有一个主模块,其它都是子模块 子模块用“END”做为本源程序结束语句 主模块用“END 启动指令标号”做为源程序 的结束语句,模块化程序设计,2. 模块之间符号名的引用 用于模块间 转移 模块间 调用 模块间 互访 等一系列跨模块的操作,模块化程序设计,PUBLIC伪指令 (公用符号名说明语句) 格式:PUBLIC 符号名,符号名 例如:PUBLIC BEG,NEXT,MESG 功能: 语句右侧列出的符号名是本模块中定义的变量名

15、、 标号名、过程名,它们要被其他的模块引用。 用于被调用模块 通常的做法是PUBLIC语句放在定义这些符号名的 模块的上方。,模块化程序设计,EXTRN伪指令 (外部符号名说明语句) 格式: EXTRN 符号名:类型,符号名:类型 例如: EXTRN BEG:FAR,NEXT:FAR,MESG:BYTE 功能:语句右侧的符号名是本模块引用的,而在其他模块中定义过的变量名、标号名、过程名。 符号名右侧的类型,必须是这些符号名在定义时被说明的类型,类型说明符有BYTE(字节型)、WORD(字型)、DWORD(双字型)、FAR(远)、NEAR(近)。 通常的做法是EXTRN语句放在调用模块的上方,它

16、通知汇编程序,所列出的符号名,在其他模块中已定义过了,否则汇编时出错。 用于调用模块,模块化程序设计,这两个伪指令提供了模块之间互访的可能性。 这两个伪指令的使用必须相匹配。 链接(TLINK)程序的任务之一就是要检查每个模块中EXTRN说明的符号是否与其相连的其他模块中的PUBLIC说明的符号相匹配,若不匹配,则给出出错信息。,模块化程序设计,INCLUDE伪指令 格式: INCLUDE 盘符:路径文件名.扩展名 功能: 通知汇编程序把指定的文件“拷贝”一份,插入到该语句的下方供汇编时使用。当然,当前盘的盘符、路径可以省略。,模块化程序设计,模块化程序的设计考虑 (1) 合理划分模块,使每一

17、个模块有相对独立的功能, 大小适中,尽量减少模块之间的耦合。 (2) 在实模式下,链接之后的同类型逻辑段不能超过 64K。 (3) 模块之间,同类型逻辑段的组合与否,是重点考 虑的问题。 (4) 模块之间的转移和调用 (5) 模块之间出现符号名引用的时候必须用PUBLIC 、EXTRN语句说明。,模块化程序设计,*模块之间,同类型逻辑段的组合与否 (1)不同模块中的代码段,可以组合成一个统一的代码段,也可以不组合,仍旧是各自独立的代码段。 (2) 不同模块中的数据段(附加段),可以组合成一个统一的数据段(附加段),也可以不组合,仍旧保持各自的独立性。 以代码段为例,怎样把各模块中的代码段组合成一个统一的代码段呢?需要采取以下措施: 各模块的代码段选用相同的段名。 在代码段段定义语句中都选用“PUBLIC”链接参数。 以上措施缺一不可。如果选用相同的分类名更好。 反之,如果不采取以上措施,则链接后各模块的代码段仍旧是各自独立的。,模块化程序设计,*模块之间的转移和调用 如果各模块之间的代码段,最后要组合成一个代码段,那么模块之间的转移就是段内转移

温馨提示

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

评论

0/150

提交评论