惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - will not update

自己动手写操作系统(三) 自己动手写操作系统(二) 自己动手写操作系统(一) 讲解Linux下汇编语言的几篇文章 cs8900a驱动移植笔记 LCD驱动程序往2.6.11内核的移植总结 基于Linux2.6的YAFFS文件系统移植 Linux操作系统网络驱动程序编写 ramdisk+busybox howto 编译busybox支持嵌入式系统需要注意的几点 用MINICOM的XMODEM来传输文件 2.6.12内核移植到s3c2410需注意的几点 add yaffs fs to kernel port linux 2.6.11.7 kernel to s3c2410(SMDK2410) 安装FC4的“Less than 4MB of memory”问题解决 fedora core 3 安装 用Cisco router 做内部局域网 支持Netfilter的Linux以太网桥的建立 Linux操作系统下C语言编程入门
汇编----串操作类指令
will not update · 2006-03-27 · via 博客园 - will not update

在计算机中,大部分数据存放在主存中,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]的寻址方式。