注册 登录
编程论坛 汇编论坛

cmpsb和rep cmpsb的区别

天外 发布于 2011-12-05 00:02, 4641 次点击
他们的执行过程是怎样的?求详解。
10 回复
#2
zaixuexi2011-12-05 10:01
童鞋,你会不会DEBUG?
#3
天外2011-12-05 23:33
只了解一点
#4
zaixuexi2011-12-06 09:52
书上都有,我觉得没必要讲,rep cmpsb会被解释为repz cmpsb,其他的自己看书吧
#5
天外2011-12-06 23:26
看过书了,单独cmpsb就是逐一比较8个位;加上rep,循环比较,还是比较这8位啊
#6
zaixuexi2011-12-07 10:13
所以让你上debug咯,这就真的很难么?还是你人懒?,另外你看过书了,书上怎么讲的?是你理解能力太差,还是书讲的太烂?这是个问题!
#7
GoldenSpider2011-12-07 13:14
32位:
rep string_op (串操作指令)
string_op :     ins, movs,outs,stos
rep:一个串操作前缀,它使其后的串操作重复执行ecx次。
操作:
while (ecx!=0)
{
    ecx=ecx-1;
    string_op; /*串操作*/
}
;========================
repe/repz string_op
string_op:cmps,scas
repz:串操作前缀,重复执行ecx次或执行到ZF为0时。
操作:
while(ecx!=0)
{
    ecx=ecx-1;
    string_op;
    if(ZF==1)
        break;
}
#8
zaixuexi2011-12-07 13:24
这种问题不需要解释,想学的人自然会去看,不想学的人你和他说N遍他也不懂,就是和你搞.
以上仅代表个人观点.
#9
天外2011-12-07 23:28
明白了,cmps一次只能比较字符串里的一个字符,比较整个串需要用到循环,可以在前加上前缀。是这个意思吧。
#10
zaixuexi2011-12-08 10:07
是这个意思,自己有什么想法的时候,要多动手,比如像这样
E:\>debug
-a
18A6:0100 db "hello world!"
18A6:010C db "world hello!"
18A6:0118 db "hello world!"
18A6:0124 mov si,100
18A6:0127 mov di,10c
18A6:012A mov cx,0c
18A6:012D repz cmpsb
18A6:012F mov si,100
18A6:0132 mov di,118
18A6:0135 mov cx,0c
18A6:0138 repz cmpsb
18A6:013A
-r ip
IP 0100
:124
-t
结贴吧
#11
zklhp2011-12-11 20:09
以下是引用zaixuexi在2011-12-7 13:24:49的发言:

这种问题不需要解释,想学的人自然会去看,不想学的人你和他说N遍他也不懂,就是和你搞.
以上仅代表个人观点.

精辟
1