Количество отрицательных из заданного массива - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д