汇编语言 重复字符串操作前缀
- 格式:doc
- 大小:58.50 KB
- 文档页数:4
2010-2011 汇编语言程序设计期末试卷A 卷一、填空题(每空 1 分,共计10 分)1.“MOV AX,0”可寄存器AX 清0。
另外再写出三条可使寄存器AX 清0 的指令。
(1)(2)(3)2.标号可以有两种类型属性。
它们是___ 和。
3.程序设计的三种基本结构是:、、。
4.分别用一条语句实现下述指明的功能(1)双字变量DWVAR 存放的地址指针送ES 和SI。
;(2)地址表达式VAR[4]的偏移地址送字变量ADDR 。
;二、判断下列指令的正确性。
如果错误,请指出错误的原因。
(每题1 分,共计10 分)(1)MOV CX,DL(2)XCHG [SI] ,3(3)MOV AX, BX+3(4)POP CS(5)SHL AX, CX(6)MUL 16(7)AND 7FFFH,AX(8)MOV CS,AX(9)SUB [SI] ,[DI](10)MOV [SI], 20H三、简答题(每题 5 分,共计20 分)1.简述指令AND 和TEST 、NOT 和NEG 之间的区别?2.简述段内转移和段间转移的区别?3.存储器寻址方式可分为哪几种?存储单元的有效地址有什么意义?4.REP 前缀的作用是什么?能否用指令REP LODSB 读取DS:SI 所指内存中的每个字符来进行处理?若不能,试说明原因。
四、指令分析题(每题10 分,共计20 分)1.下列程序段中,各指令执行后AX 、CF、OF、ZF 和SF 的内容如何变化。
MOV AX, 0DEC AXNOT AXAND AX, 0FFFFHCMP AX, 0FFFFHSUB AX, 1200HMOV CL , 5SAR AX, 1SAR AX, CLADD AX, 0FFFFHNEG AX2.假设各寄存器及物理地址中的内容如下,(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,指出各条指令源操作数的寻址方式,以及完成后AX 寄存器中的内容(1)MOV AX,1200H(2)MOV AX,BX(3) MOV AX,[1200H](4)MOV AX,[BX](5)MOV AX,1100H[BX](6)MOV AX,[BX][SI](7)MOV AX,1100H[BX][SI]五、程序分析题(每题 5 分,共计20 分)1.下列程序段运行后,Y 单元开始的存储区存放的数据是什么?X DB 78HY DB 3 DUP(?)…LEA SI, YMOV CX, 3MOV AL, XLP: SAR AL, 1MOV [SI], ALINC SILOOP LP2.分析下列程序段的功能OR DX, DXJNS L1NOT DXNOT AXADD AX, 1ADC DX, 0L1:3.下列程序片段完成什么功能,试采用堆栈的操作实现同样的功能。
第一章基本知识一、单项选择题(共40分,每题2分)1.若十进制数为132.75,则其十六进制数为(B)A.21.3B.84.CC.4.6D.62.若[X补]=11111,则其十进制真值为(C)A.-31B.-15C.-1D.313.某定点整数64位,含1位符号位,补码表示,则其绝对值最大负数为(A)A.-263B.-264C.-(263-1)D.-(263-1)4.原码乘法是(D)A.用原码表示操作数,然后直接相乘B.被乘数用原码表示,乘数取绝对值,然后相乘C.乘数用原码表示,被乘数取绝对值,然后相乘D.先取操作数绝对值相乘,符号位单独处理5.在微机系统中分析并控制指令执行的部件是(C)A.寄存器B.数据寄存器C.CPUD.EU6.已知X=76,则[X]补=(B)A.76HB.4CHC.0B4HD.0CCH7.已知[X]补=80H, 则X=(D)A.80HB.0C.0FFHD.-80H8.已知[X]补=98H, 则[X]补/2=(A)A.0CCHB.4CHC.49HD.31H9.已知X=78,Y=-83则[X+Y]补=(C)A.0F5HB.0A1HC.0FBHD.65H10.在计算机的CPU中执行算术逻辑运算的部件是(A)A.ALUB.PCC.ALD.AR11.将125转换成二进制数的结果(A)A.7DHB.7CHC.7EHD.7BH12.将93H看成一个组合BCD码,其结果是(B)A.10010101B.10010011C.10000011D.1000000113.能被计算机直接识别的语言是(C)A.C语言B.汇编语言C.机器语言D.面向对象语言14.第四代计算机的逻辑电路采用的是(D)。
A.电子管B.晶体管C.中小规模集成电路D.大规模和超大规模集成电路15.可以写入数据的内存储器是(B)。
A.ROMB.RAMC.软盘D.大规模和超大规模集成电路16.掉电后存储信息消失的存储器是(B)。
A.ROMB.RAMC.软盘D.硬盘17.读写速度最慢的辅助存储器是(C)。
课堂练习题目:23.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用()SCASB串操作指令。
A.REPNE B.REP C.REPE D.REPNZ26.在串操作指令中,SI指向串,DI指向串。
27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使用重复前缀。
29.段内调用指令改变中的内容。
30.段间调用指令改变中的内容。
12.现有程序段如下:CLDMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV CX,100REP MOVSB请回答:该程序段完成的功能是什么?13.现有程序段如下:CLDLEA DI,BUFMOV AL,20HMOV CX,100REPNZ SCASB请回答:(1)该程序段完成的功能是什么?(2)若ZF=1,表示BUF中值为20H数据(3)若BUF的首地址为0,ZF=0,执行完该程序段后DI= 。
1.使用串操作指令,将BUF缓冲区中的100个字节清0。
2.比较5个字节的字符串A和B,若两个串相等则字节标志单元FLG置0;否则清1。
答案=========================================课堂练习题目:23.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用()SCASB串操作指令。
A.REPNE B.REP C.REPE D.REPNZ26.在串操作指令中,SI指向串,DI指向串。
27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使用重复前缀。
29.段内调用指令改变中的内容。
30.段间调用指令改变中的内容。
参考答案:26.源,目的27.REPNE(REPNZ)29.IP30.CS和IP12.现有程序段如下:CLDMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2MOV CX,100REP MOVSB请回答:该程序段完成的功能是什么?12.将BUF1中100个字节的数据传送到BUF2中。
北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
第一章:概述●计算机时钟脉冲的频率称为(主频),它的倒数称为(时钟周期)。
●冯. 诺依曼原理是基于(程序存储)和(程序控制)。
●计算机中的总线包括(地址总线)、(数据总线)和(控制总线)。
●CPU有(运算器)、(控制器)、(寄存器)和(接口单元)。
●计算机硬件系统由(CPU )、(存储器)和(I/O接口)组成。
●计算机系统由(硬件)系统和(软件)系统两大部分组成。
●CPU的字长与(数据线宽度)有关;寻址空间与(地址线宽度)有关。
●若CPU的数据线宽度为8位,则它的字长为(8 )位;地址线宽度为16位,则它的寻址空间为(64K )。
●计算机语言分为(机器)语言、(汇编)语言和(高级)语言。
●计算机软件分为(系统)软件和(应用)软件两大类。
●将源程序翻译为目标程序的语言处理程序有(汇编)程序、(解释)程序和(编译)程序。
●指令通常包含(操作码)和(操作数)两部分;不同功能指令的有序集合称为(程序)。
●正数的原、反、补码(相同);负数的原、反、补码(不同)。
●十进制数17的二进制数表示为(00010001B )。
●十六进制数17H的二进制数表示为(00010111B )。
●十进制符号数+5在计算机中的8位二进制补码表示为(00000101 )。
●十进制符号数-5在计算机中的8位二进制补码表示为(11111011 )。
●机内符号数01111000的真值为(+120 );机内符号数11111000的真值为(-8 )。
●计算机处理小数有(定点)表示法和(浮点)表示法。
●在小数的定点表示中有(纯小数)表示和(纯整数)表示。
●基本ASCII码为(7 )位编码,共(128 )个码值;含(32 )个控制码和(94 )个符号码。
●字符A的ASCII码值为41H;字符a的ASCII码值为(61H );字符B的ASCII码值为(42H )。
●十进制数89的二进制表示为(01011001 );十六进制表示为(59H )。
●十六进制数7BH的十进制数表示为(124 );二进制表示为(01111011B )。
CLDSTD汇编指令在计算机中,⼤部分数据存放在主存中,8086CPU提供了⼀组处理主存中连续存放的数据串的指令——串操作指令。
串操作指令中,源操作数⽤寄存器SI寻址,默认在数据段DS中,但允许段超越;⽬的操作数⽤寄存器DI寻址,默认在附加段ES中,不允许段超越。
每执⾏⼀次串操作指令,作为源地址指针的SI和作为⽬的地址指针的DI将⾃动修改:+/-1(对于字节串)或+/-2(对于字串)。
地址指针时增加还是减少取决于⽅向标志DF。
在系统初始化后或者执⾏指令CLD指令后,DF=0,此时地址指针增1或2;在执⾏指令STD后,DF=1,此时地址指针减1或2。
1、串传送指令MOVSMOVSB ;字节串传送:ES:[DI]←DS:[SI],SI←SI+/-1,DI←DI+/-1MOVSW ;字串传送:ES:[DI]←DS:[SI],SI←SI+/-2,DI←DI+/-2MOVS ⽬的串名,源串名;这种格式需要使⽤前缀WORD PTR或BYTE PTR指明例:将数据段SOURCE指⽰的100个字节数据传送到附加段DESTINATION指⽰的主存区MOV SI,OFFSET SOURCEMOV DI,OFFSET DESTINATIONMOV CX,100CLDAGAIN: MOVSBDEC CXJNZ AGAIN2、串存储指令STOSSTOSB ;字节串存储:ES:[DI]←AL,DI←DI+/-1STOSW ;字串存储:ES:[DI]←AX,DI←DI+/-2船存储指令将AL或AX寄存器的内容存⼊由DI指定的附加段主存单元中,并根据DF和传送单位修改DI寄存器。
STOS不影响标志。
3、串读取指令LODSLODSB ;字节串读取:AL←DS:[SI],SI←SI+/-1LODSW ;字串读取:AX←DS:[SI],SI←SI+/=2LODS指令和STOS指令功能互逆,它将SI寄存器指向的主存单元的内容送⾄AL或AX寄存器,并相应修改SI使其指向下⼀个元素。
""∶教材符号+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个&记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
()∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
<>∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
汇编复习-原题(1)1汇编语⾔期末复习题第⼀部分:基础知识1、在汇编语⾔程序的开发过程中使⽤宏功能的顺序是( )。
A、宏定义,宏调⽤B、宏定义,宏展开C、宏定义,宏调⽤,宏展开D、宏定义,宏展开,宏调⽤2、汇编语⾔源程序中,每个语句由四项组成,如语句要完成⼀定功能,那么该语句中不可省略的项是( )。
A、名字项B、操作项C、操作数项D、注释项3、可屏蔽中断就是它的请求是否被CPU响应要受()的控制。
4、使⽤LINK连接命令,执⾏后可⽣成⽂件的扩展名为()。
5、在寄存器间接寻址中,如果指令中指定的寄存器为BP,则操作数在段中,段地址在寄存器中。
6、注释项⽤于说明程序段或是⼀条和⼏条指令的功能,⼀般⽤表⽰注释的开始。
7、DOS系统功能调⽤⽅式为:(1)置⼊⼝参数;(2)中断程序编号送寄存器后执⾏INT 21H。
8、通常主程序和⼦程序间参数传送的⽅法有三种:、、。
9、是CPU暂停当前程序的执⾏,转⽽执⾏处理紧急事务的程序,并在该事务处理完后能⾃动恢复执⾏原先程序的过程。
在此,称引起紧急事务的事件为。
10、在字符串操作指令中,DS∶指向源串,ES∶指向⽬的串。
11、计算机系统通过与外围设备通信。
12、键盘I/O、显⽰I/O和打印I/O分别对应、和号中断。
13、字符显⽰模式缓冲区中的⼀个字对应于屏幕上的⼀个字符。
每个字的第⼀个字节为显⽰字符的,第⼆个字节为显⽰字符的。
14、简述上机运⾏汇编语⾔程序的过程。
15、简述程序中指令和伪指令的区别。
16、⼗六进制数88H,可表⽰成下⾯⼏种形式,请找出错误的表⽰()。
①⽆符号⼗进制数136 ②带符号⼗进制数-120③压缩型BCD码⼗进制数88 ④ 8位⼆进制数-8的补码表⽰17、指令指针寄存器是。
B.名字的第⼀个字符可以是字母、数字及、@、_C.名字的有效长度≤31个字符D.在名字中不允许出现$19、CS寄存器属于。
20、已知物理地址(371F0H)=12H,(371F1H)=34H,(371F2H)=56H,如从地址371F0H中取出⼀个字的内容是。
汇编语⾔:x86汇编指令⼤全及其注意事项⽬录Part 1:instructionPart 22.1 (逻辑)运算、移位等常⽤指令2.1 (逻辑)运算、移位等常⽤指令2.2 循环移位指令2.3 数据串操作指令2.4 逻辑运算指令2.5 基于⼤⼩关系的跳转指令2.6 基于单标志位的转移指令Part 1:instruction积少成多,持续更新。
(这将会是⼀个极其漫长的过程)表格中各条指令的顺序根据笔者所认为的重要或常⽤程度进⾏排序,仅供参考。
Part 2本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以此类推。
2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。
2.1 (逻辑)运算、移位等常⽤指令这⼀部分记录汇编语⾔程序设计当中使⽤频率最⾼的⼀部分指令。
指令作⽤注意事项⽰例mov dest,src传送指令1.dest和src不能同时为存储器操作数2.CS不能作为dest3.段寄存器之间不能互相传送4.⽴即数不能送⼊段寄存器mov ax,wordptr[bx+si+2]adddest,src加法指令dest,src不能同时为存储器操作数或段寄存器add ax,cx adcdest,src带进位加法指令dest=dest+src+CF,常⽤于多字节加法inc dest加⼀指令 1.此操作不影响CF的状态inc byte ptr[si]subdest,src减法指令1.dest,src的要求与add相同2.触发OF:异号相减且结果的符号为与被减数不同sub ax,cxsbbdest,src带进位减法常⽤于多字节减法dec dest减⼀指令不影响CF的状态,但其他⼏个标志位都会受到影响dec axmul dest⽆符号乘法指1.dest为字节数据,则与AL相乘,结果放⼊AX2.dest为字数据,与AX相乘结果低16位放⼊AX,⾼16位放⼊DX3.dest不能是⽴即数mul aximul dest有符号乘法细节与mul完全相同,对最⾼位的解释不同imul axdiv dest⽆符号除法1.dest为字节数据,⽤AX除以dest,商放在AL,余数放在AH2.dest为字数据,⽤低16位为AX,⾼16位为DX的双字数据除以dest,商放在AX,余数放在DXidiv dest带符号除法与⽆符号完全相同。
REP/REPE/REPZ/REPNE/REPNZ - 重复字符串操作前缀
操作码指令说明
F3 6C REP INS r/m8, DX 将(E)CX 个字节从端口DX 输入到ES:[(E)DI]
F3 6D REP INS r/m16,DX 将(E)CX 个字从端口DX 输入到ES:[(E)DI]
F3 6D REP INS r/m32,DX 将(E)CX 个双字从端口DX 输入到ES:[(E)DI]
F3 A4 REP MOVS m8,m8将(E)CX 个字节从DS:[(E)SI] 移到ES:[(E)DI]
F3 A5 REP MOVS m16,m16将(E)CX 个字从DS:[(E)SI] 移到ES:[(E)DI]
F3 A5 REP MOVS m32,m32将(E)CX 个双字从DS:[(E)SI] 移到ES:[(E)DI]
F3 6E REP OUTS DX,r/m8将(E)CX 个字节从DS:[(E)SI] 输出到端口DX
F3 6F REP OUTS DX,r/m16将(E)CX 个字从DS:[(E)SI] 输出到端口DX
F3 6F REP OUTS DX,r/m32将(E)CX 个双字从DS:[(E)SI] 输出到端口DX
F3 AC REP LODS AL 将(E)CX 个字节从DS:[(E)SI] 加载到AL
F3 AD REP LODS AX 将(E)CX 个字从DS:[(E)SI] 加载到AX
F3 AD REP LODS EAX 将(E)CX 个双字从DS:[(E)SI] 加载到EAX
F3 AA REP STOS m8使用AL 填写位于ES:[(E)DI] 的(E)CX 个字节
F3 AB REP STOS m16使用AX 填写位于ES:[(E)DI] 的(E)CX 个字
F3 AB REP STOS m32使用EAX 填写位于ES:[(E)DI] 的(E)CX 个双字
F3 A6 REPE CMPS m8,m8在ES:[(E)DI] 与DS:[(E)SI] 中查找不匹配的字
节
F3 A7 REPE CMPS m16,m16在ES:[(E)DI] 与DS:[(E)SI] 中查找不匹配的字
F3 A7 REPE CMPS m32,m32在ES:[(E)DI] 与DS:[(E)SI] 中查找不匹配的双
字
F3 AE REPE SCAS m8从ES:[(E)DI] 开始查找非AL 字节
F3 AF REPE SCAS m16从ES:[(E)DI] 开始查找非AX 字
F3 AF REPE SCAS m32从ES:[(E)DI] 开始查找非EAX 双字
F2 A6 REPNE CMPS m8,m8在ES:[(E)DI] 与DS:[(E)SI] 中查找匹配字节
F2 A7 REPNE CMPS
m16,m16在ES:[(E)DI] 与DS:[(E)SI] 中查找匹配字
F2 A7 REPNE CMPS
m32,m32在ES:[(E)DI] 与DS:[(E)SI] 中查找匹配双字
F2 AE REPNE SCAS m8从ES:[(E)DI] 开始查找AL
F2 AF REPNE SCAS m16从ES:[(E)DI] 开始查找AX
F2 AF REPNE SCAS m32从ES:[(E)DI] 开始查找EAX
说明
按计数寄存器((E)CX) 中指定的次数重复执行字符串指令,或是重复到ZF 标志不再满足指定的条件。
REP(重复)、REPE(相等时重复)、REPNE(不相等时重复)、REPZ(为零时重复)及REPNZ(不为零时重复)助记符都是可以添加到一些字符串指令中的前缀。
REP 前缀可以添加到INS、OUTS、MOVS、LODS 及STOS 指令,REPE、REPNE、REPZ 及REPNZ 前缀可以添加到CMPS 与SCAS 指令。
(REPZ 与REPNZ 前缀分别是REPE 与REPNE 前缀的同义形式)。
同非字符串指令一起使用时,REP 前缀的行为未定义。
REP 前缀一次只能应用于一条字符串指令。
要重复指令块,请使用LOOP 指令或其它循环结构。
所有这些重复前缀都会使关联的指令重复执行,直到寄存器(E)CX 中的计数递减到0(请参阅下表)。
(如果当前地址大小属性为32,则将寄存器ECX 用作计数器;如果大小属性为16,则将CX 寄存器用作计数器)。
在每次迭代之后,REPE、REPNE、REPZ 及REPNZ 前缀还会检查ZF 标志的状态,如果ZF 标志未处于指定的状态,则终止重复循环。
同时测试两个终止条件时,终止重复的原因可以通过使用JECXZ 指令来测试(E)CX 寄存器进行确定,也可以通过使用JZ、JNZ 及JNE 指令来测试ZF 标志进行确定。
重复前缀终止条件1终止条件2
REP ECX=0 无
REPE/REPZ ECX=0 ZF=0
REPNE/REPNZ ECX=0 ZF=1
使用REPE/REPZ 与REPNE/REPNZ 前缀时,由于CMPS 与SCAS 指令都会根据它们的比较结果设置ZF 标志,因此ZF 标志不需要初始化。
正在重复的字符串操作可以因异常或中断而暂停。
发生这种情况时,将保存寄存器的状态,以便从异常或中断处理程序返回时,字符串操作能够恢复。
源寄存器与目标寄存器指向下一个要操作的字符串元素,EIP 寄存器指向字符串指令,ECX 寄存器保存的是上一次成功迭代指令之后的值。
通过此种机制,就可以执行很长的字符串操作,而不会影响系统的中断响应时间。
在执行以REPE 或REPNE 为前缀的CMPS 或SCAS 指令期间,如果发生错误,EFLAGS 值还原为指令执行之前的状态。
由于SCAS 与CMPS 指令不会将EFLAGS 用作输入,因此,处理器可以在页错误处理程序完成之后恢复执行指令。
谨慎使用REP INS 与REP OUTS 指令。
并非所有的I/O 端口都可以处理这些指令的执行速率。
初始化大块内存最快的方法是使用REP STOS 指令。
操作
IF AddressSize 16
THEN
use CX for CountReg;
ELSE (* AddressSize 32 *)
use ECX for CountReg;
FI;
WHILE CountReg 0
DO
service pending interrupts (if any);
execute associated string instruction;
CountReg CountReg - 1;
IF CountReg 0
THEN exit WHILE loop
FI;
IF (repeat prefix is REPZ or REPE) AND (ZF=0)
OR (repeat prefix is REPNZ or REPNE) AND (ZF=1)
THEN exit WHILE loop
FI;
OD;
影响的标志
无;不过CMPS 与SCAS 指令会设置EFLAGS 寄存器中的状态标志。
异常(所有操作模式)
无;不过重复前缀关联的指令可能会生成异常。