Есть программа подсчета нечетных элементов. как написать подсчет элементов не равных нулю? - Assembler
Формулировка задачи:
Turbo Assembler mov ax, data mov ds, ax lea bx, mas ;берём в bx адрес первого элемента mov cx, len ;счетчик цикла xor ax, ax ;обнуляем регистр cikl: mov al, [bx] ;прибавляем к al байт, адрес которого хранится в bx test ax,1 ;проверяем на четность jnz next inc numb; увеличиваем, если четно next: inc bx ;переходим к следующему элементу loop cikl
Решение задачи: «Есть программа подсчета нечетных элементов. как написать подсчет элементов не равных нулю?»
textual
Листинг программы
lea bx,mas ;берём в bx адрес первого элемента
mov cx,len ;счетчик цикла
xor ax,ax ;обнуляем регистр
cikl: mov al,[bx] ;отправляем в al байт из bx
cmp al,0 ;проверяем на нуль
jz next ;если нуль
inc ah ;иначе: считаем НЕ нули
next: inc bx ;переходим к следующему элементу
loop cikl
Объяснение кода листинга программы
lea bx,mas— в качестве первого шага мы берем в регистр BX (bx — base index register, то есть регистр, используемый в качестве индекса) адрес первого элемента массива, используя команду LEA (Load Effective Address). Здесьmas— это имя массива.mov cx,len— затем мы загружаем в регистр CX (cx — counter register, то есть регистр счетчика) длину массива, используя команду MOV (Move). Здесьlen— это переменная, содержащая длину массива.xor ax,ax— для инициализации регистра AX (ax — accumulator register, то есть регистр-накопитель) мы используем команду XOR (Exclusive OR), которая устанавливает его в 0. Это будет нашсчетчикнечетных элементов.cikl:— это метка цикла.mov al,[bx]— мы загружаем в регистр AL (al — accumulator register, то есть регистр-накопитель) байт из памяти по адресу, хранящемуся в BX, используя команду MOV.cmp al,0— мы сравниваем значение в регистре AL с 0, используя команду CMP (Compare). Если оно равно 0, то мы переходим к следующему элементу без изменений.jz next— если значение в регистре AL не равно 0, то мы переходим к меткеnext, увеличиваясчетчикна 1.inc ah— мы увеличиваем значение в регистре AH (ah — auxiliary accumulator register, то есть вспомогательный регистр-накопитель) на 1. Это нашсчетчикнечетных элементов.next:— это метка, на которую мы переходим, если значение в регистре AL не равно 0.inc bx— мы увеличиваем значение в регистре BX на 1, переходя к следующему элементу массива.loop cikl— мы используем команду LOOP (Loop), чтобы вернуться к началу цикла и продолжить обработку элементов. Таким образом, код считает количество нечетных элементов в массиве, начиная с первого и заканчивая последним.