STD CLD@TOC
在计 算机中,大部分数据存放在主存 中,8086CPU提供了一组处理主存中连续存放的数据串的指令——串操作指令。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中,但允许段 超越;目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修 改:+/-1(对于字节串)或+/-2(对于字串)。地址指针时增加还是减少取决于方向标志DF。在系统初始化后或者执行指令CLD指令后,DF=0,此 时地址指针增1或2;在执行指令STD后,DF=1,此时地址指针减1或2。
1、串传送指令MOVS
MOVSB ;字节串传送:ES:[DI]←DS:[SI],SI←SI+/-1,DI←DI+/-1
MOVSW ;字串传送:ES:[DI]←DS:[SI],SI←SI+/-2,DI←DI+/-2
MOVS 目的串名,源串名 ;这种格式需要使用前缀WORD PTR或BYTE PTR指明
例:将数据段SOURCE指示的100个字节数据传送到附加段DESTINATION指示的主存区
MOV SI,OFFSET SOURCE
MOV DI,OFFSET DESTINATION
MOV CX,100
CLD
AGAIN: MOVSB
DEC CX
JNZ AGAIN
2、串存储指令STOS
STOSB ;字节串存储:ES:[DI]←AL,DI←DI+/-1
STOSW ;字串存储:ES:[DI]←AX,DI←DI+/-2
船存储指令将AL或AX寄存器的内容存入由DI指定的附加段主存单元中,并根据DF和传送单位修改DI寄存器。STOS不影响标志。
3、串读取指令LODS
LODSB ;字节串读取:AL←DS:[SI],SI←SI+/-1
LODSW ;字串读取:AX←DS:[SI],SI←SI+/=2
LODS指令和STOS指令功能互逆,它将SI寄存器指向的主存单元的内容送至AL或AX寄存器,并相应修改SI使其指向下一个元素。不影响标志。
4、串比较指令CMPS
CMPSB ;字节串比较:DS:[SI]-ES:[DI],SI←SI+/-1,DI←DI+/-1
CMPSW ;字串比较:DS:[SI]-ES:[DI],SI←SI+/-2,DI←DI+/-2
船比较指令的功能是比较源串与目的串是否相同,并根据其减法结果设置标志位;指令在每次比较后修改SI和DI寄存器的值,使之指向下一个元素。
5、串扫描指令SCAS
SCASB ;字节串扫描:AL-ES:[DI],DI←DI+/-1
SCASW ;字串扫描:AX-ES:[DI],DI←DI+/-2
串扫描指令SCAS将附加段中的字节或字内容与AL/AX寄存器内容进行比较,根据比较的结果设置标志,每次比较后修改DI寄存器的值,使之指向下一个元素。
6、重复前缀指令
任何一个串操作指令,都可以在前面加一个重复前缀,以实现串操作的重复执行,重复次数隐含在CX寄存器中
REP ;REP前缀用在MOVS、STOS、LODS指令前,每次执行一次指令,CX减1;直到CX=0,重复执行结束
REPZ ;也可以表把为REPE,用在CMPS、SCAS指令前,每执行一次串指令CX减1,并判断ZF标志是否为0
;只要CX=0或ZF=0,则重复执行结束
REPNZ ;也可以表达为REPNE,用在CMPS、SCAS指令前,每执行一次串操作指令CX减1,并判断ZF标志是否为1,只要CX=0或ZF=1,则重复执行结束。
●REP前缀可以理解为“当数据串没有结束(CX≠0),则继续传送”
●REPZ/REPE前缀可以理解为“当数据串没有结束(CX≠0),并且串相等(ZF=1)则继续比较”
●REPNZ/REPNE前缀可以理解为“当数据串没有结束(CX≠0),并且串不相等(ZF=0)则继续比较”
重复操作是否完成的检测是在执行串指令之前,所以,如果初始化CX为0,将不会重复操作。判断标志ZF,则是在执行串指令之后。
在
执行一条重复的基本串操作期间,操作数指示寄存器(变址寄存器SI,DI)和操作计数器CX在每次重复后都要自动进行修改,而指令指示器(IP)将保持重
复前缀字节的偏移地址(假定重复前缀是紧放在字符串操作指令之前)。于是,当控制由中断数据服务返回时,一个被中断了的重复串操作能够得到正确的恢复。除
了重复前缀以外,IBM-PC还提供了两个前缀:一个是缺省段寄存器的取代前缀(加段寄存器前缀),另一个是封锁总线前缀LOCK以禁止其他的总线访问。
不要把这两个前缀用在具有重复前缀的串操作指令前面。如果在基本串操作指令之前出现一个以上的前缀,那么中断恢复时只能恢复一个字节(紧放在串操作指令之
前的一个)前缀,多于一个字节的前缀就丢掉了(一个前缀占一个字节)。所以在串操作指令前用了重复前缀后就不能用其他两个前缀了。
另外,在字符串操作指令中不能使用带有[BX]或[BP]的寻址方式。
2.CLD(汇编语言指令)
CLD与STD是用来操作方向标志位DF(Direction Flag)。CLD使DF复位,即DF=0,STD使DF置位,即DF=1.用于串操作指令中。
例如:
MOVS ( MOVe String) 串传送指令
MOVSB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1
MOVSW //字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2
执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.
在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.
MOVS DST , SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.
1.目的串必须在附加段中,即必须是ES:[DI]
2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].
# 欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。2
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎