汇编中的重复指令

您所在的位置:网站首页 汇编语言std 汇编中的重复指令

汇编中的重复指令

2024-07-10 09:13| 来源: 网络整理| 查看: 265

汇编中的重复指令 REPLOOPREP和LOOP的异同不同相同 DUP

REP

rep是字符串操作指令MOVS,CMPS等的前缀,在CX不等于0的情况下,对字符串执行重复操作。

rep的重复次数也存在cx中,但是其实cx本身不具有让cx-1的功能,一般是rep后面跟着的指令执行之后自动让cx-1

还可以扩展出: REPE(相等时重复)、REPNE(不相等时重复)、REPZ(为零时重复)及 REPNZ(不为零时重复)

老师上课的时候说, rep有点类似于宏。

LOOP

LOOP指令的格式是: loop 标号 CPU执行至loop指令的时候,要进行两步操作

cx=cx-1判断cx的值,不是0就转到标号处执行程序;如果为0就向下执行。

因此cx中的值是执行次数。

REP和LOOP的异同 不同

rep前缀一次只能应用于一条字符串指令。要重复指令块,需要使用 LOOP 指令或其它循环结构。

相同

循环次数都存在cx中;cx中的就是循环次数。

DUP

dup是数据定义伪指令,其实他跟前面两个不太一样,他是用来定义一块内存区域,但是他也涉及到重复,因此把它们放在一起加以辨析。 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