汇编中的重复指令 |
您所在的位置:网站首页 › 汇编语言std › 汇编中的重复指令 |
汇编中的重复指令
REPLOOPREP和LOOP的异同不同相同
DUP
REP
rep是字符串操作指令MOVS,CMPS等的前缀,在CX不等于0的情况下,对字符串执行重复操作。 rep的重复次数也存在cx中,但是其实cx本身不具有让cx-1的功能,一般是rep后面跟着的指令执行之后自动让cx-1 还可以扩展出: REPE(相等时重复)、REPNE(不相等时重复)、REPZ(为零时重复)及 REPNZ(不为零时重复) 老师上课的时候说, rep有点类似于宏。 LOOPLOOP指令的格式是: loop 标号 CPU执行至loop指令的时候,要进行两步操作 cx=cx-1判断cx的值,不是0就转到标号处执行程序;如果为0就向下执行。因此cx中的值是执行次数。 REP和LOOP的异同 不同rep前缀一次只能应用于一条字符串指令。要重复指令块,需要使用 LOOP 指令或其它循环结构。 相同循环次数都存在cx中;cx中的就是循环次数。 DUPdup是数据定义伪指令,其实他跟前面两个不太一样,他是用来定义一块内存区域,但是他也涉及到重复,因此把它们放在一起加以辨析。 dup是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。 dup的使用格式如下: db 重复的次数 dup(重复的字节型数据) dw 重复的次数 dup (重复的字型数据) dd 重复的次数 dup (重复的双字型数据) 如:db 3 dup (0) 定义了三个字节,它们的值都是0,相当于db 0,0,0 像这两个图中 dest_buffer和source_buffer就是名字,代表了这段空间的首地址。 (?)表示初始值随便。 参考定义缓冲区的详细理解 在实际应用中,我们有时候会忽略名字,直接 stack segment db 16 dup (0) stack ends这样也是完全可以的。 还有一个比较特别的例子 db 3 dup ('abc','ABC')这条语句定义了18个字节,它们是abcABCabcABCabcABC,相当于 db 'abcABCabcABCabcABC'(这种做法也要留心,注意用的是单引号,就我目前的理解,我觉得这里用单双引号应该都可以的,但是书上用的是单引号) 对这条语句的解释: db:定义的是字节型数据 3:重复的次数 (‘abc’,‘ABC’):重复的是什么 所以上面这条语句的意思就是定义字节型数据,把abcABC重复三遍。 (因此就要注意了,你不能看见db 3,就说人家一定是定义了3个字节) 定义缓冲区时也会用到DUP语句 DAT1 BD 20,?,20 DUP(?) DAT1是名字 20是要定义的缓冲区的大小 第一个?留给系统数你敲了几下键,也可以不写?,写成0,1或其他任何数都可以。 两个20必须保持一致,不能是20和21这样。 更详细的对dup的解释参加王爽老师汇编语言P171 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |