电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

华科-汇编语言程序设计幻灯片第5章

135页
  • 卖家[上传人]:F****n
  • 文档编号:88146935
  • 上传时间:2019-04-20
  • 文档格式:PPT
  • 文档大小:559KB
  • / 135 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、,第五章 程序设计的其它方法与技术,一、本章的学习内容: 本章学习汇编语言的高级程序设计技术: (1)串操作指令的使用格式及功能; (2)宏指令的定义与调用方式; (3)模块程序设计方法及连接技术。 通过本章的学习,能提高编程的效率和质量, 简化程序设计的工作,这是汇编语言中最具特色 的部分。,第五章 程序设计的其它方法与技术,二、本章的学习重点: (1)串操作指令MOVS、CMPS、SCAS的 使用格式及功能; (2)简单宏指令的定义与调用方式; (3)模块程序设计的方法。,第五章 程序设计的其它方法与技术,三、本章学习的难点: (1)MOVS与MOV、CMPS与CMP功能上 的差别及串操作指令的正确使用方法; (2)宏指令的定义与调用方式; (3)模块之间的组合、定位及通信方式; (4)模块化程序设计技术。,第五章 程序设计的其它方法与技术,5.1 字符串操作指令 5.2 宏功能程序设计,5.1 字符串操作指令,(1) 串传送指令 MOVS (2)串比较指令 CMPS (3)串搜索指令 SCAS (4)取字节/字/双字串指令 LODS (5)存储字节/字/双字串指令 STOS (

      2、6 ) 总结,(1) 串传送指令 MOVS,格式:MOVS OPD,OPS 或 功能:(1) (DS:SI/ESI) ES:DI/EDI (2) 修改串指针,使之指向下一元素。修改方式为: .当DF0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或4(双字操作) .当DF1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或4(双字操作) 说明:(1) 该指令可带的重复前缀为:REP 即当(CX/ECX)0时连续传送,直至(CX/ECX)=0。 (2) 源串应在当前数据段,指针为SI/ESI;目的串应在 当前附加数据段指针为DI/EDI。,MOVSD 双字串传送,MOVSB 字节串传送,MOVSW 字串传送,(1) 串传送指令 MOVS,例1:将以STR1为首址的字节存储区中存放的字符串传送到以 STR2为首址的字节存储区中。 .386 DATA SEGMENT USE16 STR1 DB ABCDEFGHIJKLM ;输出缓冲区BUF1 COUNT EQU $-BUF1 ;BUF1中的字符个数 STR2 DB COUNT DUP(O) ;输入缓冲区BUF2 DAT

      3、A ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSSUME DS:DATA,ES:DATA,CS:CODE,SS:SATCK,START:MOV AX,DATA MOV DS,AX ;当前数据段和当前附加数据段重合 MOV ES,AX LEA SI,STR1 ;源串首址送SI LEA DI, STR2 ;目的串首址送DI MOV CX,COUNT ;串长度送CX CLD ;将DF清0 REP MOVSB ;重复传送直至CX=0 MOV AH,4CH INT 21H CODE ENDS END START,(1) 串传送指令 MOVS,16,CX,数据段,BUF1,BUF2,A,B,C,D,E,F,G,H,I,J,K,L,M,A,B,C,D,E,F,G,H,I,J,K,L,M,“ REP MOVSB”语句代替了以下程 序段: P: MOV AL, SI MOV DI, AL INC SI INC DI LOOP P 由于每个汇编源程序的开始时, DF=0 为默认状态,一次不用专门

      4、使用CLD指 令。,反向操作的源程序: STD LEA SI,BUF1+COUNT-1 LEA DI,BUF2+COUNT-1 MOV CX,COUNT REP MOVSB “REP MOVSB“语句代替了以下程序段 P: MOV AL, SI MOV DI,AL DEC SI DEC DI LOOP P 由于DF=0为默认状态,故须使用STD 指令设置DF=1,才能反向操作.,(2)串比较指令 CMPS,格式:CMPS OPD,OPS 或 功能: (DS:SI/ESI)(ES:DI/EDI),即将SI/ESI所指的源串中的 一个字节(或字、双字)中的数与DI、EDI所指的目的串中的一个字节 (或字、双字)中的据相减,并根据相减的结果设置标志位,结果并不 保存。 修改串指针,使之指向串中的下一个元素。修改方式为: i. 当DF0时,(SI)/(ESI)和(DI)/(EDI)增量1(字节操作)或2(字操 作)或4(双字操作)。 ii. 当DF1时,(SI)/(ESI)和(DI)/(EDI) 减量1(字节操作)或2(字操 作) 或4(双字操作)。,CMPSB,字节串比较,CMPSW 字串比

      5、较,CMPSD 双字串比较,。,(2)串比较指令 CMPS,说明: 源串放在当前数据段中,指针为SI/ESI;目的串放在 当前附加数据段中,指针为DI/EDI; 该指令可带的重复前缀为: a.REPE/REPZ 当(CX/ECX)0时,如两串对应字符 相等继续比较,不相等跳出循环; b.REPNE/REPNZ 当(CX/ECX)0时,如两串对应字符 不相等继续比较,相等跳出循环;,例2,(2)串比较指令 CMPS,例2 从键盘输入一字符串至STR1为首址的字节缓冲区中,试 比较该串与字节字符串STR2是否相等,相等则0BX;不 等-1BX。 .386 DATA SEGMENT USE16 STR1 DB 80 DB 0 DB 80 DUP(0) STR2 DB WAN1ASM COUNT EQU -STR2 DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE,输入缓冲区,;待比较字符串,;待比较字符串

      6、长度,(2)串比较指令 CMPS,START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,STR1 MOV AH,10 输入一串字符至STR1缓冲区 INT 21H MOV AL,STR11 CMP AL,COUNT 比较两串长度是否相等,不等转EXIT JNE EXIT LEA SI,STR12 LEA DI,STR2 MOV CX,COUNT REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE EXIT ;不等,转EXIT MOV BX,0 ;相等,0BX JMP RETU EXIT: MOV BX,-1 RETU: MOV AH,4CH INT 21H CODE ENDS END START,当前数据段和当前附加数据段重合,(3)串搜索指令 SCAS,格式: SCAS OPD 或 功能: 字节操作:(AL)-(ES:DI/EDI) 字操作: (AX)- (ES:DI/EDI) 双字操作:(EAX)-(ES:DI/EDI) 修改串指针使之指向下一元素.修改方式为: i.当DF0时,(DI)/(EDI)增量1(字节操作)或 2(字操作)

      7、或4(双字操作)。 ii.当DF1时,(DI)/(EDI)减量1(字节操作)或 2(字操作)或4(双字操作)。 修改循环变量(CX)/(ECX) -1 CX)/ECX,SCASB 字节串搜索,SCASW 字串搜索,SCASD 双字串搜索,(3)串搜索指令 SCAS,说明: 待搜索串一定要是目的串,放在当前附加数据段中, 指针为DI/EDI; 该指令可带的重复指令为: i. REPZ/REPE 若(CX/ECX)0且相等时接着搜索. ii.REPNZ/REPNE 若(CX/ECX)0且不相等时接着搜索.,例3,(3)串搜索指令 SCAS,例3 从键盘输入一串字符至ASS区,试用串搜索指令在该串中 搜索子串AM出现的次数BX. .386 DATA SEGMENT USE16 ASS DB 80 DB 0 DB 79 DUP(0) DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK, CS:CODE START: MOV

      8、AX,DATA MOV DS,AX MOV ES,AX,当前数据段和当前附加数据段重合,(3)串搜索指令 SCAS,LEA DX,ASS MOV AH,10 INT 21H LEA DI,ASS+2 MOV CL,ASS+1 MOVZX CX,CL MOV AL,A MOV BX,0 (CLD) P: REPNE SCASB JE A JMP OUT1 A: CMP CX,0 JE OUT1 CMP BYTE PTR DI, M JNE B INC BX B: JMP P OUT1:MOV AH,4CH INT 21H CODE ENDS END START,;输入串首址DI,;输入串长度CX,;计数器清零,;查找字符”A”,;查到字符”A”转A处执行,;全部查完转结束,;所有判断完否,;全部查完转结束,;判断”A”后的字符为”M”否,;不是转B处执行,;是”AM”计数器加1,;未完转P继续判断,;返回操作系统,(4)取字节/字/双字串指令 LODS,格式: LODS OPS 或 功能: 字节操作:(DS:SI/ESI)AL 字操作: (DS:SI/ESI) AX 双字操作: DS:S

      9、I/ESI) EAX 将SI/ESI所指的源串中的一个字节(或字、双字)存储单元中的数 据取出送入AL(或AX、EAX)中。 修改SI/ESI,使之指向下一元素: i.当DF0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或 4(双字操作)。 ii.当DF1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或 4(双字操作)。 * 修改循环变量(CX)/(ECX) -1 CX)/ECX,LODSB 从字节串中取数,LODSW 从字串中取数,LODSD 从双字串中取数,(4)取字节/字/双字串指令 LODS,说明: 由于该指令的目的地址为一固定的寄存器,如果带上重复前缀,源串的内容将连续地送入AL(或AX、EAX)中,操作结束后,AL(或AX、EAX)中只保存了串中最后一个元素的值,这是没有多大意义的,因此,该指令一般不带重复前缀。,例4,(4)取字节/字/双字串指令 LODS,例4: 下面阅读一个使用了LODSD的程序段: .386 DATA SEGMENT USE16 BUF DB ABCDEFGHIJKL COUNT EQU $-BUF START: MOV AX,DATA MOV DS,

      《华科-汇编语言程序设计幻灯片第5章》由会员F****n分享,可在线阅读,更多相关《华科-汇编语言程序设计幻灯片第5章》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.