Количество отрицательных из заданного массива - Assembler
Формулировка задачи:
Есть заданный массив ,количество отрицательных в регистр ESI
а дальше не могу ,cравнение с нулем ?
Листинг программы
- void main () {
- long x[10]={10, -50, 50, -9, -10, 55, 4, -40, 80, -7} ;
- _asm {
- lea EBX, x ;
- mov ECX, 9 ; счетчик повторений
- mov EAX, dword ptr[EBX] ; первый элемент – в ЕАХ
- m2: add EBX, 4 ; увеличение адреса
- cmp......
Решение задачи: «Количество отрицательных из заданного массива»
textual
Листинг программы
- ; переменная X типа WORD
- _asm {
- lea esi,x ; адрес массива
- mov ecx,10 ; длина массива
- xor ebx,ebx ; счётчик отрицательных
- xor eax,eax ; EAX := 0
- m1: lodsw ; AX - очередной элемент из ESI
- or ax,ax ; проверка флага SF на 1
- jns m2 ; нет - пропускаем
- inc ebx ; да - счётчик +1
- m2: loop m1 ; мотаем цикл ECX-раз..
- ;--------------------------------------------------------
- ;---------------------; результат в EBX
Объяснение кода листинга программы
- Переменная X типа WORD.
- Код инициализирует ESI значением массива.
- ECX содержит длину массива, равную 10.
- EBX инициализируется как счётчик отрицательных.
- EAX инициализируется как 0.
- Начинается цикл, который будет выполняться 10 раз (ECX).
- Каждый раз в AX будет загружаться очередной элемент массива из ESI.
- Флаг SF (старший бит ответа) проверяется на 1, что означает, что текущий элемент отрицательный.
- Если SF = 0, то счётчик увеличивается на 1.
- Цикл продолжается до тех пор, пока ECX не станет равным 0.
- Результат (количество отрицательных) хранится в EBX.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д