Количество отрицательных из заданного массива - 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.