В справочной системе набора инструкций IA-32, STOS/STOSB/STOSW/STOSD, в чем разница между инструкцией stos m32
и stosd
, не являются ли они их описанием одинаковыми?
И какова функция m32
? Когда мы используем инструкцию, мы должны установить eax
и es
, edi
, действует ли операнд m32
?Сборка: какая разница между `stos m32` и` stosd` мнемоника?
ответ
STOS m32 Форма и форма STOSD - это два разных способа выражения одной и той же инструкции. Возможно, вы заметили, что за пределами новых инструкций SIMD (SSE, AVX и т. Д.) Большинство ячеек команд не имеют суффикса, указывающего размер выполняемой операции. Например, нет инструкции INCD или MOVW. Вместо этого размер операндов определяет размер операции. Форма STOS m32 позволяет этой инструкции соответствовать этому соглашению.
В MASM это позволяет код, как следующий, когда размер инструкции КСН зависит от типа (размера) символа:
array DW 30 DUP (?)
mov ecx, LENGTH array
mov edi, OFFSET array
mov eax, 1
rep stos array
Изменение DW для DD и код будет заполнить массив двойных слов с 1s вместо этого массив WORD. Обратите внимание, что используется только размер операнда памяти. Инструкция по-прежнему записывается на адрес, указанный EDI.
Хотя он не применяется к STOS, формы операндов памяти некоторых других строковых команд позволяют вам переопределить сегмент DS по умолчанию. (Инструкция STOS использует сегмент ES, который не может быть преодолено.) Так, например, вы можете сделать:
rep outs dx, WORD PTR fs:[esi]
Не только сегмент по умолчанию можно переопределить, но и размер адреса с префиксом '67', чтобы дать нам, например. 'stos dword [es: di]' в 32-битном режиме. – Ruslan
- 1. Apple gcc, какая разница между -arch i386 и -m32?
- 2. какая разница между @ и @ :?
- 3. Какая разница между (и [?
- 4. Сборка, регистры и возвращаемые значения -m32/linux
- 5. Какая разница между разделителем $$ и //
- 6. Какая разница между @load() и $ {}
- 7. Какая разница между списком() и []
- 8. -m64 и -m32 флаги
- 9. Какая разница между нулями?
- 10. Thread Какая разница между
- 11. Какая разница между ними?
- 12. Какая сборка для цели
- 13. Какая разница между полисервисом и полимером?
- 14. Gremlin Какая разница между transform и sideEffect
- 15. Какая разница между OnKeyListener и OnEditorActionListener?
- 16. какая разница между qs и querystring
- 17. Какая разница между - (пустотой) и + (недействительных) методы
- 18. Какая разница между HttpResponseException и HttpException
- 19. Какая разница между копией и назначением вектора?
- 20. Какая разница между чтением файла и потоком?
- 21. Oracle Какая разница между/и sys?
- 22. Какая разница между обработчиком http и ashx
- 23. Какая разница между «закрытием» и «блоком»?
- 24. Какая разница между тестированием Symfony и браузером
- 25. Какая разница между государственными и частными намерениями
- 26. Какая разница между методами Q.all() и Promise.prototype.all()?
- 27. Какая разница между WAS и IIS?
- 28. Какая разница между `com.example. **` и `com.example. ** {*;}`?
- 29. zk6 какая разница между SelectorComposer и GenericForwardComposer
- 30. Какая разница между делать Alloc и class_createInstance
Может показаться странным, но с использованием КСН с операндом памяти позволяет ассемблеру использовать ** размер ** операнда памяти (байт, слово, слово), чтобы определить, следует ли его кодировать как STOSB, STOSW, STOSD. –
Затем используется ли операнд 'm32' или нет, он просто используется для определения размера операнда памяти, поэтому мы можем произвольно выбирать операнд' m32', если размер правильный. @MichaelPetch – zhenguoli
Используется исключительно для размера. То, на что оно указывает, игнорируется. Большинство разработчиков, которых я знаю, используют STOSB, STOSW, STOSD. Исключением является использование _MASM_. В этой среде, когда вы объявляете переменную, MASM отслеживает тип переменных. Конечный результат тот же, хотя - только размер используется. –