微机原理与接口技术第七章2
更新时间:2023-08-30 05:02:01 阅读量: 教育文库 文档下载
汇编语言程序举例三 查找关键字
六、过程定义伪操作 格式 过程名 PROC 类型 、、、 过程名 ENDP
▲ 过程定义由伪操作 过程定义由伪操作PROC开始、ENDP结束。 开始、 结束。 开始 结束 其中: 必须成对出现, 其中: PROC 和ENDP 必须成对出现 且语句前必须有过程名,过程名必须相同。 且语句前必须有过程名,过程名必须相同。 ▲ PROC和ENDP语句之间为子程的指令序列。 语句之间为子程的指令序列。 和 语句之间为子程的指令序列 ▲ 程序中可以定义多个过程。 程序中可以定义多个过程。 ▲ 程序经汇编、连接及装入内存后, 程序经汇编、连接及装入内存后 过程名为一具体的内存地址,指示子程入口。 过程名为一具体的内存地址,指示子程入口。2
▲过程名常用作 过程名常用作CALL调用指令的操作数 调用指令的操作数, 过程名常用作 调用指令的操作数子程的最后安排RET返回指令,使执行完子程后能返回调用处。 返回指令, 子程的最后安排 返回指令
▲过程有两种类型:NEAR和FAR 过程有两种类型: 过程有两种类型 和无类型项时,默认为 类型。 无类型项时,默认为NEAR类型。 类型 当过程与调用指令不在同一段时, 类型。 当过程与调用指令不在同一段时,应将过程定义为 FAR 类型。
过程类型决定子程中RET的返回类型 的返回类型 过程类型决定子程中
例1 display PROC 、、 C3H 、、 、、 RET ;NEAR 属性的过程对应段内返回 display ENDP
例2 display PROC FAR 、、 CBH 、、 、、 RET ;FAR属性的过程对应段间返回 属性的过程对应段间返回 display ENDP
;汇编语言程序结构例二(子程结构) 汇编语言程序结构例二(子程结构) 汇编语言程序结构例二 ;用二进制显示中断向量表中数据 用二进制显示中断向量表中数据D0H的个数 用二进制显示中断向量表中数据 的个数key EQU 0D0H ;用符号表示常量 关键字 用符号表示常量(关键字 用符号表示常量 关键字) code SEGMENT ;代码段开始 代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP [ SI ] , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回 返回DOS INT 21H ;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示
display PROCrotate: MOV CX , 16 ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 子程返回 ENDS END begin ;代码段结束 代码段结束 ;指示程序结束和 指示程序结束和 ;程序入口 程序入口5
display ENDPcode
七、等值定义伪操作格式 符号名 EQU 需等值的表达式
▲作用是用符号名等值指定的表达式 作用是用符号名等值指定的表
达式 其中 表达式可以是任何有效的操作数 汇编时用语句中的表达式代替程序中符号所在的地方。 汇编时用语句中的表达式代替程序中符号所在的地方。 ▲应用: 应用: 应用 1. 定义符号常量,方便修改程序。 定义符号常量,方便修改程序。 2. 某表达式多次出现时,用等值伪操作可以方便编程。 某表达式多次出现时,用等值伪操作可以方便编程。
;汇编语言程序结构例二(子程结构) 汇编语言程序结构例二(子程结构) 汇编语言程序结构例二 ;用二进制显示中断向量表中数据 用二进制显示中断向量表中数据D0H的个数 用二进制显示中断向量表中数据 的个数
key EQU 0D0H;用符号表示常量 关键字) 用符号表示常量(关键字 用符号表示常量 关键字 code SEGMENT ;代码段开始 代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0
;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示 display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 子程返回 display ENDP code ENDS END begin ;代码段结束 代码段结束 ;指示程序结束和 指示程序结束和 ;程序入口 程序入口
MOV AL , keynext: CMP [ SI ] , AL JNZ point INC BX INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回 返回DOS INT 21H
point:
例三
的个数。 用二进制显示中断向量表中数据 D0H的个数。 的个数
分析: 中断向量表指内存0: 分析: 中断向量表指内存 :0 ~ 0:3FFH : 字节空间; 大小 400H (即1K ) 字节空间 即 查找关键字D0H; 查找关键字 将关键字的个数,存放在 中 将关键字的个数,存放在BX中, 采用二进制显示BX内容 内容, 个字符 个字符; 采用二进制显示 内容,16个字符; 采用子程调用结构。 采用子程调用结构。
主程序流程图开始 DS: SI ← 查找区域首地址 0 : 0 CX ← 查找长度 400H BX ← 计数值初值 0 取内存单元内容, 取内存单元内容 与关键字比较,相等? 与关键字比较,相等? Y BX ← 计数值加 1 修改指针, 修改指针,指向下一单元 N CX ← CX-1 , 查找结束? - 查找结束? Y 调用子程, 调用子程,显示 BX 的内容 返回 DOS N
子程序流程图开始 CX ← 显示字符个数 16 BX 循环左移 1 位, 将要显示的位移至最低位, 将要显示的位移至最低位,保存在 DL 中 清 DL 的高 7 位,只保留要显示位的值 DL ← DL+30H , 完成数值 0~1 的 ASCII 码转换 调用DOS 系统 02 功能,显示 DL 中的字符 功能, 调用 N CX ← CX-1 , 显示结束? - 显示结束? Y RET 返回9
;汇编语言程序结构例二(子程结构) 汇编语言程序结构例二(子程结构) 汇编语言程序结构例二 ;
用二进制显示中断向量表中数据 用二进制显示中断向量表中数据D0H的个数 用二进制显示中断向量表中数据 的个数key EQU D0H ;用符号表示常量 关键字 用符号表示常量(关键字 用符号表示常量 关键字) code SEGMENT ;代码段开始 代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP [ SI ] , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回 返回DOS INT 21H ;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示 display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 子程返回 display ENDP code ENDS END begin ;代码段结束 代码段结束 ;指示程序结束和 指示程序结束和 ;程序入口 程序入口
汇编源程序scans.asm 汇编源程序D:\MASM\MASM scans; Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. scans.ASM (1 ) : error A2009: Symbol not defined: D0H scans.ASM (9 ) : error A2009: Symbol not defined: KEY 49924 + 419241 Bytes symbol space free 0 Warning Errors 2 Severe Errors D:\masm>
汇编程序提示出错的行号,据此可修改程序中的语法错误。 汇编程序提示出错的行号,据此可修改程序中的语法错误。
;汇编语言程序结构例二(子程结构) 汇编语言程序结构例二(子程结构) 汇编语言程序结构例二 ;用二进制显示中断向量表中数据 用二进制显示中断向量表中数据D0H的个数 用二进制显示中断向量表中数据 的个数key EQU 0D0H ;用符号表示常量 关键字 用符号表示常量(关键字 用符号表示常量 关键字) code SEGMENT ;代码段开始 代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP [ SI ] , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回 返回DOS INT 21H ;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示 display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 子程返回 display ENDP code ENDS END begin ;代码段结束 代码段结束 ;指示程序结束和 指示程序结束和 ;程序入口 程序入口
思考:如何用 改写此程序? 思考:如何用SCANSB改写此程序? 改写此程序12
汇编、连接后,执行程序: 汇编、连接后,执行程序: D:\masm>scans 0000000000000100 D:\masm>debug -S 0:0 L400 D0 0000:0023 0000:0043 0000:0073 0000:009C -Q D:\masm> ;在DOS下运行程序 下运行程序 ;利用 利用DEBUG检测结果 利用 检测结果
请上机自己调试该程序。 请上机自己调试该程序。13
例
在中断向量表中查找从键盘输入的字符,
在中断向量表中查找从键盘输入的字符, 查找从键盘输入的字符 并将其个数用二进制形式显示出来。 并将其个数用二进制形式显示出来。( scanskey.asm)
code SEGMENT ;代码段开始 代码段开始 ASSUME CS:code begin: MOV AX, 0000H ;设置查找首地址 设置查找首地址 ;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示 MOV DS, AX display PROC MOV SI,0000H MOV CX, 16 ;显示位数 显示位数 MOV CX,0400H ;设置查找长度 设置查找长度 rotate: ROL BX, 1 MOV BX,0 ;计算值初值 计算值初值 MOV DL, BL MOV AH,01H ;从键盘输入 , 从键盘输入 AND DL, 01H INT 21H ;输入关键字在 ;输入关键字在AL中 输入关键字在AL中 ADD DL, 30H next: CMP [ SI ] , AL JNZ point MOV AH, 2H INC BX INT 21H point: INC SI LOOP rotate CALL display ;调用显示子程 调用显示子程 RET ;子程返回 子程返回 MOV AH,4CH ;调用 调用4CH功能 调用 功能 display ENDP INT 21H ;返回 返回DOS 返回 code ENDS ;代码段结束 代码段结束 END begin14
例
在中断向量表中查找从键盘输入的字符, 在中断向量表中查找从键盘输入的字符, 查找从键盘输入的字符 并将其个数用二进制形式显示出来。 并将其个数用二进制形式显示出来。( scanskey.asm) 用LODSB改写程序 改写程序;用二进制显示 内容子程 用二进制显示BX内容子程 用二进制显示 display PROC MOV CX, 16 ;显示位数 显示位数 rotate: ROL BX, 1 MOV DL, BL AND DL, 01H ADD DL, 30H MOV AH, 2H INT 21H LOOP rotate RET ;子程返回 子程返回 display ENDP code ENDS ;代码段结束 代码段结束 END begin15
code SEGMENT ;代码段开始 代码段开始 ASSUME CS:codebegin: MOV AX, 0000H ;设置查找首地址 设置查找首地址 MOV DS, AX MOV SI,0000H MOV CX,0400H ;设置查找长度 设置查找长度 MOV BX,0 ;计算值初值 计算值初值
MOV AH,01H , INT 21H MOV DL,AL ,next: LODSB CMP AL, DL JNZ point INC BX point: LOOP next CALL display MOV AH,4CH INT 21H
;从键盘输入 从键盘输入 ;输入关键字 输入关键字 ;保存在 中 保存在DL中 保存在;从串取 从串取 ;与关键字比较 与关键字比较 ;计算值加 计算值加1 计算值加 ;查找结束? 查找结束? 查找结束 ;调用显示子程 调用显示子程 ;调用 调用4CH功能 调用 功能 ;返回 返回DOS 返回
数值回送操作符 自学 课前5分钟 回送操作符: 自学) 八、数值回送操作符 (自学)课前 分钟 TYPE,LENGTH,SIEE,OFFSET,SEG 5种。 , , , , 种 把一些特征或存贮器地址的一部分作为数值回送。 把一些特征或存贮器地址的一部分作为数值回送。 ·TYPE 格式: 格式:TYPE variable 变量则回送该变量的以字节数表示的 类型( 为 , 类型(DB为1,DW为2,DD为4,DQ为8,DT为10) 为 , 为 , 为 , 为 ) 或 label 标号回送标号类型数值(NEAR为-1
,FAR为-2) 标号回送标号类型数值( 为 为 ) 例:ARRAY DW 1,2,3 , , ADD SI,TYPE ARRAY , 汇编程序其形式: 汇编程序其形式: ADD SI,2 ,16
·LENGTH 格式:LENGTH variable 格式:对于变量中使用DUP汇编回送分配给变量单元数,其他情况回送1。 汇编回送分配给变量单元数,其他情况回送 。 对于变量中使用 汇编回送分配给变量单元数 例:FESS DW 100 DUP(0) ( ) 对于 MOV CX,LENGTH FEES , 汇编程序将其形式: 汇编程序将其形式: MOV CX,100 , 其他情况 例:ARRAY DW 1,2,3 , , 对于指令 MOV CX,LENGTH ARRAY , 汇编程序将使其形式为: 汇编程序将使其形式为:MOV CX,1 , 例:TABLE DB ‘ABCD’ 对于指令 MOV CX,LENGTH TABLE , 汇编程序使其形式为: 汇编程序使其形式为:MOV CX,1 ,17
· SIEE 格式:SIEE variable回送分配给该变量的字节数LENGTH*TYPE 回送分配给该变量的字节数
例:FEES DW 100 DUP(0)MOV CX,SIZE ARRAY , 将形成: 将形成:MOV CX,200 ,
例:TABLE DB‘ABCD’MOV CX,SIEE TABLE , 将形成 MOV CX,1 ,
例:ARRAY DW 1,2,3MOV CX,SIEE ARRAY , 形式 MOV CX,2 , LENGTH*TYPE=218
其中: 变量的返回值是类型的字节数: 其中 TYPE变量的返回值是类型的字节数 变量的返回值是类型的字节数 DB为1,DW为2,DD为4,DQ为8,DT为10; 为 , 为 , 为 , 为 , 为 ; TYPE标号的返回值是:NEAR为-1,FAR为-2。 标 的返回值是: 为 , 为 。LENGTH变量返回 变量返回DUP分配的单元数,对于其他情况 分配的单元数, 变量返回 分配的单元数 则返回1。 则返回 。
SIZE返回值是: LENGTH和TYPE值的乘积,即 返回值是: 值的乘积, 返回值是 和 值的乘积 变量的字节数。 变量的字节数。
正在阅读:
微机原理与接口技术第七章208-30
地下室脚手架施工方案04-10
xx年新人教版五年级下册数学分数加减法的计算题(10套)-02-26
自然观历史必然性03-14
浅析企业全面预算管理中存在的问题及对策03-31
嫦娥奔月,材料作文升格01-23
中药制剂分析计算题11-10
《计算机网络》(B)卷11-07
感谢41周岁大龄留学生Z同学给新西兰教育联盟评价:物美价廉11-05
复韵母拼读练习09-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 第七章
- 微机
- 接口
- 原理
- 技术
- 某建设集团公司内部定额
- 2015-2020年中国服装干洗机市场研究及投资前景预测报告
- 公共关系学讲义
- 聊城市技师学院创建省级文明单位工作分工及完成时限一览表
- 会计借贷关系分析
- 精修版七年级地理上册 专题02 陆地和海洋同步单元双基双测(A卷)(含解析) 人教版
- 2016年一级建造师考试法规科目的数字记忆
- 化学选修4《化学能转化为电能—电池》同步测试
- 浙江新天地认证咨询公司关于非金属材料申请CQC认证流程图
- 隧道复合式衬砌类型设计参数
- 招标书范本
- 实验4用三线摆法测量刚体的转动惯量
- 营改增后建筑业挂靠经营面临很大税收风险
- 淘宝大学(PDF全)第2章3_职前准备-网络零售规则
- 计算机系统可靠性
- 欧美要求LED 产品安规
- 给水排水工程与民生
- 最新最全离婚协议书(完整版)-最新离婚协议书标准版
- 装表接线现场操作口诀
- 工程制图与识图电子教案