Макроопределение, вычисляющее количество нулевых элементов массива - Assembler
Формулировка задачи:
Всем привет,выручайте
нужно составить макроопределение вычисления количества нулевых элементов массива чисел а1, а2,...,аn используя это макроопределение найти количество нулевых элементов каждого из 3 массивов а1,а2,...а6 b1,b2,...b7, c1,c2,c9.
я составил макроопределение но оно как то неправильно работает, помогите найти ошибки
include io.asm stack1 segment db 128 dup(?) stack1 ends Data segment A dw 5 dup(?) B dw 5 dup(?) C dw 5 dup(?) Data ends code segment start: assume ds: Data, cs: code, ss: stack1 mov ax,Data mov ds,ax mov si,0 mov cx,4 mov bx,0 a1: ININT bx mov A[si],bx inc si inc si loop a1 mov si,0 mov cx,4 mov bx,0 a2: ININT bx mov B[si],bx inc si inc si loop a2 mov si,0 mov cx,4 mov bx,0 a3: ININT bx mov C[si],bx inc si inc si loop a3 zero Macro x,y local m1,m2 mov dx,0 mov bx,0 mov ax,0 mov cx,y mov ax,x[si] m2:cmp ax,0 ja m1 inc bx m1:inc si inc si loop m2 OUTINT bx ENDM zero A,4 NEWLINE zero B,4 NEWLINE zero C,4 mov ah,10h int 16h mov ah,4ch int 21h code ends end start
люди помогите очень нужно, пожалуйста
Решение задачи: «Макроопределение, вычисляющее количество нулевых элементов массива»
textual
Листинг программы
include io.asm zero Macro A,B local m1,m2 mov dx,0 mov bx,0 mov ax,0 mov cx,B mov si,0 m2:mov ax,A[si] cmp ax,0 jne m1 inc bx m1:inc si inc si loop m2 OUTINT bx ENDM stack1 segment db 128 dup(?) stack1 ends Data segment mas1 dw 6 dup(0,0,5,0,6,0) mas2 dw 7 dup(1,0,6,4,5,0,1) mas3 dw 9 dup(0,0,0,5,0,6,0,7,6) Data ends code segment start: assume ds: Data, cs: code, ss: stack1 mov ax,Data mov ds,ax mov si,0 zero mas1,6 newline zero mas2,7 newline zero mas3,9 mov ah,10h int 16h mov ah,4ch int 21h code ends end start
Объяснение кода листинга программы
- Макроопределение
zero
принимает два аргумента, A и B, и вычисляет количество нулевых элементов в массиве A, используя размер массива B. - В начале макроопределения все регистры очищаются значением 0.
- Далее, регистры BX, SI и AX используются для индексации и подсчета нулевых элементов.
- Переменная BX инициализируется значением 0.
- Затем, происходит цикл, который продолжается до тех пор, пока не будет достигнут последний элемент массива A.
- Внутри цикла, значение AX сравнивается с 0. Если оно не равно 0, то происходит переход к следующей итерации цикла.
- Если значение AX равно 0, то значение BX увеличивается на 1.
- После завершения цикла, значение BX будет содержать количество нулевых элементов в массиве A.
- В конце программы, выводится количество нулевых элементов массива mas1, mas2 и mas3 с помощью функции OUTINT.
- Программа завершается с помощью функции INT 21h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д