在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時,會跟蹤變量的類型。最終結果是相同的 - 只是使用大小。 –