汇编语言第九章笔记
一、字符串基本指令
- 指令类型
- 数据移动指令:
MOVSB
、MOVSW
和MOVSD
,用于将由<u>ESI</u>
寻址的内存地址处的数据复制到<u>EDI</u>
寻址的内存地址处。例如在代码中,<u>rep</u> movsd
可实现从源地址到目的地址的双字数据复制,其中<u>rep</u>
会按照<u>ECX</u>
的值重复执行<u>MOVSD</u>
指令,且每次执行MOVSD
时ESI
和EDI
会自动根据数据类型(字节、字或双字)进行相应偏移,如双字时偏移量为 4 。 - 比较指令:
CMPSB
、CMPSW
和CMPSD
,比较由ESI
和EDI
寻址的两个内存地址处的值,其隐含操作为用左边操作数减去右边操作数,可结合无符号数跳转指令进行跳转操作。 - 扫描指令:
SCASB
、SCASW
和SCASD
,分别将AL
、AX
或<u>EAX</u>
中的值同<u>EDI</u>
寻址的目标内存中的字节、字或者双字比较,适用于在长字符串或数组中查找匹配,除REP
循环外,还可使用<u>REPNE</u>
,其循环终止条件为<u>ECX = 0</u>
或者找到了匹配的内容。 - 存储指令:
STOSB
、STOSW
和STOSD
,分别将AL
、AX
或<u>EAX</u>
中的值存储到<u>EDI</u>
寻址的目标内存单元中,常用于填充字符串或数组。 - 装入指令:
LODSB
、LODSW
和LODSD
,从<u>ESI</u>
寻址的内存单元中将对应尺寸的内容复制到<u>AL</u>
、AX
或EAX
寄存器中。
- 数据移动指令:
- 串操作指令特点
- 源串指针为
ESI
,目的串指针为EDI
,串长度在ECX
中,指针与计数器自动修改,加减由DF
确定(CLD
清除方向标志位使ESI
和EDI
增加,STD
设置方向标志位使ESI
和EDI
减小),修改长度根据B = BYTE
、W = WORD
、D = DWORD
。 - 允许源和目的操作数都是存储单元。执行串操作之前,需先设置源串首地址(末地址)到
ESI
、目的串首地址(末地址)到EDI
、串长度到ECX
以及建立方向标志(CLD
或STD
)。执行串操作指令后,ESI
和EDI
可能已经越界或超过目标。
- 源串指针为
二、练习与考试题型
- 练习:P282 的 9.2.5 练习题可用于巩固本章知识。
- 考试题型
- 单选题:10 题,每题 2 分,共 20 分。
- 判断题:10 题,每题 1 分,共 10 分。
- 简答题:10 题,每题 4 分,共 40 分。
- 编程题:10 题,每题 3 分,共 30 分。
哎呀,我懒得改一些格式了,更好的阅读体验请移步阅读语雀笔记
https://www.yuque.com/sparkle-y0ppd/rcnnqw/icmyqhv90prew9hr?singleDoc# 《第一章 基本概念、第二章》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/lo9niaw8ot80iaxm?singleDoc# 《第三章 汇编语言基础》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/rmqhydppga6bvz9o?singleDoc# 《第四章 数据传送、寻址和算术运算》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/enqzaec9i4fcv2bb?singleDoc# 《第五章 过程》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/pyg9xlpc9m4belek?singleDoc# 《第六章 条件处理》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/lfz1ly6np0e90l64?singleDoc# 《第七章 整数运算》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/zd9as96ybgvfk7qd?singleDoc# 《第八章 高级过程》
https://www.yuque.com/sparkle-y0ppd/rcnnqw/nekgot3vrg9codo7?singleDoc# 《第九章 字符串和数组》