Функция memset - Assembler
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, с реализацией вызова memset в ассемблере. Я пишу ассемблерную вставку в программу на Си, нужно заполнить нулями булевский массив bl, он объявлен в main. При компиляции на строчке push bl выдает ошибку "warning C4409: недопустимый размер инструкции"Подскажите, пожалуйста, как исправить ошибку.
bool bl[100000] int main() { _asm { push 100000 push 0 push bl call memset } ...
Решение задачи: «Функция memset»
textual
Листинг программы
mov ecx,размер_массива/4 xor eax,eax lea edi,адрес_массива rep stosd
Объяснение кода листинга программы
- mov ecx, размер_массива/4 - В данном коде это означает, что значение переменной ecx устанавливается на четверть от общего размера массива. Размер_массива - это переменная, которая содержит размер массива в байтах.
- xor eax, eax - Это означает, что значение переменной eax устанавливается в ноль. Xor используется для быстрого сброса значения регистра в ноль.
- lea edi, адрес_массива - Здесь переменная edi устанавливается на адрес первого элемента массива. Адрес_массива - это переменная, которая содержит базовый адрес массива.
- rep stosd - Это команда, которая выполняет последовательность операций заполнения памяти. В данном случае используется команда заполнения строки (stosd), которая записывает в память значение переменной eax (которое равно нулю) с шагом, указанным в регистре ecx.