为什么 REP 可以添加到除 LODS 之外的任何字符串数据传输中?

Aza*_*zad 0 x86 assembly x86-16

REP STOSB (STOSW or STOSD )
REP MOVSB
REP INSB
REP OUTSB
Run Code Online (Sandbox Code Playgroud)

那些字符串数据传输是允许的,但我的课程材料说REP LODSB不允许?

Bre*_*dan 5

rep lodsbrep lodsw和指令均完全有效rep lodsdrep lodsq但它们几乎没有用处,因为您无法对已加载的数据执行任何操作。

我能想到它们唯一有用的情况是具有读取副作用的内存映射 IO 区域(这种情况极为罕见)。

  • @stark True,但给定页面大小为 4096,4095 次迭代将被浪费,因为第一个迭代会导致页面被引入,其余的会发现它已经存在了...... (4认同)
  • 也可用于强制从磁盘调入虚拟内存。 (2认同)