- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言程序设计-第7章
* 第7章 《IBM PC 80X86汇编语言程序设计》 冶金工业出版社 * 第七章 简单程序设计应用 7.1 串操作程序 7.2 代码转换 7.3 冒泡排序举例 7.4 多精度数运算举例 7.1 串操作程序 串操作指令:对串中的字节/字/双字进行传送、比较、搜索等。 串:由连续存放于内存的若干个字节/字/双字组成的数据块。 注意:串操作指令寻址与其他指令有很大不同,其源操作数(源串)和目的操作数(目的串)分别隐含由DS:[SI]和ES:[DI]提供。其中源串可以是DS以外的其他段,但目的串只能在ES段。 一、串操作指令 1、与REP匹配使用的MOVS、STOS、LODS指令。 MOVS 串传送指令 格式: MOVS 目的串,源串 其中源串为SI指向的数据单元,目的串为DI所指向的附加段的数据单元。 所执行操作: 字节操作:[DI] ←[SI],SI←SI±1,DI←DI±1 字操作: [DI] ←[SI],SI←SI±2,DI←DI±2 MOVSB (字节传送指令) 功能:[DI] ←[SI],SI←SI±1,DI←DI±1 MOVSW (字传送指令) 功能:[DI] ←[SI],SI←SI±2,DI←DI±2 MOVSD (双字传送指令) 功能:[DI] ←[SI],SI←SI±4,DI←DI±4 STOS (串存储指令) 格式:STOS 目的串 其中目的串必须为DI所指向的数据单元。 执行的操作: 字节操作:[DI] ←AL ,DI←DI±1 字操作: [DI] ←AX, DI←DI±2 若已确定为字节操作或字操作,可采用无操作数指令。 STOSB (字节存储指令) 功能:[DI] ←AL ,DI←DI±1 STOSW (字存储指令) 功能:[DI] ←AX,DI←DI±2 STOSD (双字存储指令) 功能:[DI] ←EAX,DI←DI±4 LODS (串读取指令) 格式:LODS 源串 其中源串为SI 所指向的数据单元。 执行的操作: 字节操作:AL←[SI],SI←SI±1 字操作: AX←[SI],SI←SI±2 若已确定为字节或字操作,可采用无操作数指令。 LODSB (字节读取指令) 功能:AL←[SI],SI←SI±1 LODSW (字读取指令) 功能:AX←[SI],SI←SI±2 LODSD (双字读取指令) 功能: EAX←[SI],SI←SI±4 REP (重复串操作指令) 操作:①先判断CX=0?,若CX=0,退出REP操作,否则转②执行 ②CX←CX-1 ③执行相配合的串指令 重复①→③ CLD 清除方向标志指令 格式:CLD 功能:DF←0,可使地址自动增1、增2或增4。 2、与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令。 STD 清除方向标志指令 格式:STD 功能:DF←1,可使地址自动减1、减2或减4。 REPE/REPZ(相等或为零时重复) 即CX=0或ZF=0时退出,否则CX←CX-1,重复执行。 REPNE/REPNZ(不相等或不为零时重复) 即CX=0或ZF=1时退出,否则CX←CX-1,重复执行。 CMPS(串比较指令) 格式:CMPS 源,目;[SI]-[DI] CMPSB 字节比较指令 功能:[SI]-[DI] ,SI←SI±1,DI←DI±1 CMPSW 字比较指令 功能:[SI]-[DI] ,SI←SI±2,DI←DI±2 CMPSD 双字比较指令 功能:[SI]-[DI] ,SI←SI±4,DI←DI±4 SCAS (串搜索指令) 格式:SCAS 目 用于搜索在数据块中是否存在某一关键字。 SCASB (字节搜索指令) 功能:AL-[DI] ,DI←DI±1 SCASW (字搜索指令) 功能:AL-[DI] ,DI←DI±2 SCASD (双字搜索指令) 功能:AL-[DI] ,DI←DI±4 例:要把数据段1000开始的200个字节内容传送到1100H开始处。 用串处理指令来完成的程序段如下: MOV SI,1000H MOV DI,1100 MOV CX,200 MOV AX,DS MOV ES,AX CLD REP MOVSB 不用串处理指令,可用下列程序段代替REP MOVSB AGAIN:JCXZ STOP MOV AL,[SI] MOV [DI],AL INC
文档评论(0)