在IA-32英特尔指令集参考中,STOS/STOSB/STOSW/STOSD,指令stos m32
和stosd
有什么区别,是不是它们的描述是一样的?
m32
的功能是什么?当我们使用该指令时,我们应该设置eax
和es
,edi
,m32
操作数是否有效?汇编:`stos m32`和`stosd`助记符有什么区别?
2
A
回答
2
STOS m32形式和STOSD形式是表达相同指令的两种不同方式。您可能已经注意到,在较新的SIMD(SSE,AVX等...)指令之外,大多数指令助记符没有后缀,指示它们执行的操作的大小。例如没有INCD或MOVW指令。相反,操作数的大小决定了操作的大小。 STOS m32表格允许此指令符合此惯例。
在MASM这允许像下面的代码,其中STOS指令的大小取决于符号的类型(尺寸):
array DW 30 DUP (?)
mov ecx, LENGTH array
mov edi, OFFSET array
mov eax, 1
rep stos array
更改DW到DD和代码将填补个DWORD的以1s的阵列而不是一组WORD。请注意,仅使用内存操作数的大小。该指令仍写入由EDI给出的地址。
虽然它不适用于STOS,但某些其他字符串指令的内存操作数形式可让您覆盖默认DS段。 (该STOS指令使用ES段不能覆盖。)因此,例如,你可以这样做:
rep outs dx, WORD PTR fs:[esi]
+2
不仅可以覆盖默认段,而且还可以使用具有“67”前缀的地址大小,以便给我们例如在32位模式下使用'stos dword [es:di]'。 – Ruslan
相关问题
- 1. Apple的gcc,-arch i386和-m32有什么区别?
- 2. 助记符与操作码有什么区别
- 3. -m32,-m64和gcc的选项中没有什么区别?
- 4. 你对这些汇编助记符有什么建议吗?
- 5. 在Mac上的汇编和汇编在Linux上有什么区别?
- 6. “rep stos”x86汇编指令序列的作用是什么?
- 7. dword和汇编程序中的'堆栈'有什么区别
- 8. 指示性汇总和信息汇总有什么区别?
- 9. 追踪和记录有什么区别?
- 10. 调试和编译有什么区别?
- 11. 字符和字符编码有什么区别
- 12. ARM NEON:vld4_f32和vld4q_f32有什么区别?
- 13. 这2个汇编代码段有什么区别?
- 14. “interned”和“uninterned”符号有什么区别
- 15. nohup和&符号有什么区别
- 16. 通配符和'T'有什么区别?
- 17. Handlebars助手和Ember Handlebars助手之间有什么区别?
- 18. 有什么区别`和$(Bash中有什么区别?
- 19. GCC内联汇编错误:没有这样的指令:`STOSD”
- 20. 有什么区别? :和||
- 21. &&和||有什么区别?
- 22. “/”和“/ *”有什么区别?
- 23. 有什么区别:。!和:r!?
- 24. ==和===有什么区别?
- 25. Appender和〜有什么区别?
- 26. $ @和$ *有什么区别?
- 27. is和=有什么区别?
- 28. #.00和#。##有什么区别?
- 29. `==`和`is`有什么区别?
- 30. '=='和'==='有什么区别?
听起来很奇怪,但使用STOS与内存操作数使得汇编使用** **大小的内存操作数(字节,字,双字)来确定是否将其编码为STOSB,STOSW,STOSD。 –
然后是否使用'm32'操作数,它只是用来确定内存operande的大小,所以只要大小正确,我们就可以随机选择'm32'操作数。 @MichaelPetch – zhenguoli
它只用于尺寸。它指向的内容被忽略。我认识的大多数开发人员使用STOSB,STOSW,STOSD。如果您使用_MASM_,则是一个例外。在那个环境中,当你声明一个变量MASM时,会跟踪变量的类型。最终结果是相同的 - 只是使用大小。 –