movsw 汇编_【汇编】 常用代码段 rep movsw/rep movsw
移动代码段:
rep movsw
mov ax,#BOOTSEG
mov ds,ax
mov ax,#INITSEG
mov es,ax
mov cx,#256
sub si,si
sub di,di
cld
rep
movsw
jmpi go,INITSEG
【linux中bootsection.s用这段代码完成moves itself out of
theway to address Ox90000,and jumps there】
先说搬移字串。搬移字串指令有两种,分别是
MOVSB 和 MOVSW,先说 MOVSB。MOVSB
的英文是 move string
byte,意思是搬移一个字节,它是把 DS:SI
所指地址的一个字节搬移到 ES:DI
所指的地址上,搬移后原来的内容不变,但是原来
ES:DI 所指的内容会被覆盖而且在搬移之后 SI 和 DI
会自动的指向下一个要搬移的地址。
一般而言,通常程序设计师一般并不会只搬一个字节,通常都会重复许多次,如果要重复的话,就得把重复次数
( 也就是字串长度 ) 先记录在 CX 寄存器,并且在
MOVSB 之前加上 REP 指令,REP 是重复 (repeat)
的意思。这种写法很是奇怪,一般而言汇编语言源文件的每一行都只有一个指令,但
REP MOVSB
却可以在同一行写两个指令,当然分开写也是一样的。
SUB (subtract)
指令的汇编格式:SUB dst,src
指令的基本功能:(dst)
重复执行串 REP
指令的汇编格式:REP (CX)=重复次数
指令的基本功能:①
(CX)=0时,串指令执行完毕,否则执行② ~ ④
② (CX)←(CX)-1③ 执行串指令(MOVS或STOS)④
重复执行①
串传送 MOVSB / MOVSW (move string
byte/word)
指令的汇编格式:MOVSB
MOVSW
指令的基本功能:(ES:DI)
(SI)
(DI)
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。
MOVSB?MOVSW 和 REP 指令
先说搬移字串。搬移字串指令有两种,分?是 MOVSB
和 MOVSW,先说 MOVSB。MOVSB 的英文是 move MOVSB。MOVSB
的英文是 movstring
byte,意思是搬移一个字节,它是把 DS:SI
所指位址的一个位元组搬移到 ES:DI
所指的位址上,搬移后原?的?容不变,但是原来
ES:DI 所指的?容会被覆?而且在搬移之后 SI 和 DI
会自动地址向下一个要搬移的位址。
一般而言,通常程序设计师只搬一个字节,通常都会重复很多次,如果要重复的话,就得把重复次数先存储在
CX 寄存器,并在 MOVSB 之前加上 REP 指令。
MOVSB。MOVSB 的英文是 mov
下面演示一下用 DEBUG 来观察 REP MOVSB
执行情形(网友小木偶的演示程序):
C:\WINDOWS>debug [Enter] - MOVSB?MOVSW 和 REP 指a
[Enter] 1C6C:0100 mov cx,10 [Enter] 1C6C:0103 mov si,200 [Enter]
1C6C:0106 令
先说搬移字串。搬移字串指令有两种,分mov di,300
[Enter] 1C6C:0109 rep movsb [Enter] 1C6C:010B [Enter]
-MOVSB。MOVSB 的英文是 mova 200 [Enter] 1C6C:0200 db "I learn
assembly" [Enter] 1C6C:0210 [Enter]
?是 MOVSB 和 MOVSW,先说
上面的程式片段是把位于 1C6C:0200 的『I learn
assembly』字串移搬到 1C6C:0300 处,此字串共 16
个字元,所以 CX 存入 10H。现在?追踪看看。
-t [Enter] AX=0000 BX=0000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200
DI=0000 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0106 NV UP EI PL NZ NA
PO NC 1C6C:0103 BE0002 MOV SI,0200 -?是 MOVSB 和 MOVSW,先说 t
[Enter] AX=0000 BX=0000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200
DI=0000 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0106 NV UP EI PL NZ NA
PO NC 1C6C:0106 BF0003 MOV DI,0300 -t [Enter] AX=0000 BX=0000
CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200 DI=0300 DS=1C6C ES=1C6C
SS=1C6C CS=1C6C IP=0109 NV UP EI PL NZ NA PO NC 1C6C:0109 F3 REPZ
1C6C:010A A4 MOVSB -d 300 L10 [Enter]
e string byte,意思是搬移一
在还未搬移之前,先看看 1C6C:0300
处的?容,再追踪。
1C6C:0300 E8 A3 F6 74 08 49 46 FE-06 D7 DC EB EF E8 C3 F9
...t.IF......... -t [Enter] AX=0000 BX=0000 令
先说搬移字串。搬移字串指令有两种,分CX=000F
DX=0000 SP=FFEE BP=0000 SI=0201 DI=0301 DS=1C6C ES=1C6C SS=1C6C
CS=1C6C IP=0109 NV UP EI PL NZ NA PO NC 1C6C:0109 F3 REPZ 1C6C:010A
A4 MOVSB -d 300 L10 [Enter] 1C6C:0300 MOVSB。MOVSB 的英文是
mov49 A3 F6 74 08 49 46 FE-06 D7 DC EB EF E8 C3 F9 I..t.IF.........
在搬移一次之后,再看看 1C6C:0300
处的?容,发现上面已经和原?不一样了
(红色部份)。这是因为 movsb 已经把第零个字节搬到
1C6C:0300 处,而覆?了原?的?容。而 CX 也?少一,SI?DI
也各增加一而指向下一个位址。好!再追踪看看。
令先说搬移字串。搬移字串指令有两种,分
-t [Enter] AX=0000 BX=0000 CX=000E DX=0000 SP=FFEE BP=0000 SI=0202
DI=0302 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0109 NV UP EI PL NZ NA
PO NC 1C6C:0109 F3 REPZ 1C6C:010A A4 MOVSB
您有?有发现,在搬移完之前,IP 都指向 REP MOVSB
指令 ( 即 REP MOVSB 所在位址
)。要追踪这么多次,太麻烦了,干脆直接执行到搬移字串到结束。
?是 MOVSB 和 MOVSW,先说
-g 10b [Enter] AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0210 DI=0310 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=010B NV UP EI PL
NZ NA PO NC 1C6C:010B 06 PUSH ES -令
先说搬移字串。搬移字串指令有两种,分d 200 L10
[Enter] 1C6C:0200 49 20 6C 65 61 72 6E 20-61 73 73 65 6D 62 6C 79 I
learn assembly -d 300 L 10 [Enter] 1C6C:0300 49 20 6C 65 61 72 6E
20-61 73 73 65 6D 62 6C 79 I learn assembly
搬移结束后,1C6C:0200 和 1C6C:0300
处的?容均相同,所以 MOVSB
事实上是把原?字串复制到要搬移之处,而原字串是原封不动的。
MOVSB?MOVSW 和 REP 指
MOVSW 的作用方式都和 MOVSB 相同,所不同的是 MOVSW
每次搬移一个字,所以每次搬运完 SI?DI ?增加 2,而
CX 仍然?少一。
movsw 汇编_【汇编】 常用代码段 rep movsw/rep movsw相关推荐
- 收藏!PyTorch常用代码段合集
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Jack Stark,来源:极市平台 来源丨https://zhu ...
- PyTorch常用代码段合集
↑ 点击蓝字 关注视学算法 作者丨Jack Stark@知乎 来源丨https://zhuanlan.zhihu.com/p/104019160 极市导读 本文是PyTorch常用代码段合集,涵盖基本 ...
- 【深度学习】PyTorch常用代码段合集
来源 | 极市平台,机器学习算法与自然语言处理 本文是PyTorch常用代码段合集,涵盖基本配置.张量处理.模型定义与操作.数据处理.模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常 ...
- pytorch list转tensor_PyTorch 52.PyTorch常用代码段合集
本文参考于: Jack Stark:[深度学习框架]PyTorch常用代码段zhuanlan.zhihu.com 1. 基本配置 导入包和版本查询: import torch import torc ...
- 收藏 | PyTorch常用代码段合集
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Jack Stark@知乎 来源丨https://zh ...
- 深度盘点:PyTorch常用代码段合集
本文是PyTorch常用代码段合集,涵盖基本配置.张量处理.模型定义与操作.数据处理.模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面. PyTorch最好的资料是官方文档.本文 ...
- PyTorch 常用代码段整理合集
PyTorch 常用代码段整理合集 来源:知乎 作者:张皓 众所周知,程序猿在写代码时通常会在网上搜索大量资料,其中大部分是代码段.然而,这项工作常常令人心累身疲,耗费大量时间.所以,今天小编转载了知 ...
- 赶快收藏,PyTorch 常用代码段PDF合辑版来了
前段时间我分享了 PyTorch 常用代码段合集,涵盖基本配置.张量处理.模型定义与操作.数据处 理.模型训练与测试等5个方面,还给出了多个值得注意的Tips. 这篇文章发布后,收到了很多朋友的喜爱和 ...
- PyTorch 常用代码段示例整理
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 众所周知,程序猿在写代码时通常会在网上搜索大量资料,其中大部分是代 ...
- pytorch list转tensor_点赞收藏:PyTorch常用代码段整理合集
机器之心转载 来源:知乎 作者:张皓 众所周知,程序猿在写代码时通常会在网上搜索大量资料,其中大部分是代码段.然而,这项工作常常令人心累身疲,耗费大量时间.所以,今天小编转载了知乎上的一篇文章,介绍了 ...
最新文章
- MINIGUI 开发指南---GDI
- java第一阶段知识_坚持:学习Java后台的第一阶段,我学习了那些知识
- Cocos2d-x 手游开发群:296733909
- Embedding在网易严选搜索推荐中的应用
- JS - 将十六进制的颜色值转成rgb、rgba格式
- magento如何在首页显示产品
- revit2016与2017区别_Revit2016版与Revit2018版的区别?
- 为什么对方的QQ邮箱收不到我QQ邮箱发的邮件?
- 万年历黄历星座查询v3.6.9引流吸粉 实用工具 流量变现小程序
- 郦旭东小可爱的大数据算法课程期末复习
- 关于wmsys.wm_concat() 多条记录合并,及可能出现的异常ORA-31061:XDB错误:special char to escaped char conversion failed
- web开发框架_Web开发的最佳PHP框架
- 书写函数:求棋盘上芝麻重量
- 时空猎人无尽之塔初级玩法解析攻略
- win10家庭版无法更改账户名称怎么办?
- python如何在网络爬虫程序中使用多线程(threading.Thread)
- 性能工具之Taurus入门(安装篇)
- Redis清空所有数据命令
- Android 设置动态壁纸没有确认按钮处理方式
- 机器学习 | MATLAB实现PSO-IELM粒子群改进极限学习机回归和分类预测