Функция 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

Объяснение кода листинга программы

  1. mov ecx, размер_массива/4 - В данном коде это означает, что значение переменной ecx устанавливается на четверть от общего размера массива. Размер_массива - это переменная, которая содержит размер массива в байтах.
  2. xor eax, eax - Это означает, что значение переменной eax устанавливается в ноль. Xor используется для быстрого сброса значения регистра в ноль.
  3. lea edi, адрес_массива - Здесь переменная edi устанавливается на адрес первого элемента массива. Адрес_массива - это переменная, которая содержит базовый адрес массива.
  4. rep stosd - Это команда, которая выполняет последовательность операций заполнения памяти. В данном случае используется команда заполнения строки (stosd), которая записывает в память значение переменной eax (которое равно нулю) с шагом, указанным в регистре ecx.

Оцени полезность:

7   голосов , оценка 4.571 из 5