Массив: В массиве найти 7-ой по счету байт - Assembler
Формулировка задачи:
в массиве байтов найти 7 по счёту байт
не пойму что надо дописать в цикл LOC.
.MODEL SMALL .STACK 100h .DATA DAN db 3Bh,20h,0Dh,32h,0A1h,24h,0A0h,0Dh,0,0A2h,20h db 0B0h,40h,24h,0E1h,0Dh,0,24h,3Bh,30h,0C0h,0Dh db 20h,97h,3Bh,83h,0,0A0h,20h,0D0h,27h,20h,0C6h db 91h,0,20h,0FEh,3Bh,90h,0,3Bh,24h,17h,20h,24h .code start: mov ax,@Data mov ds,ax mov cx,7 mov dx,64 lea si,DAN dec si EXT: push cx mov cx,dx LOC: inc si - - - - - loop EXT end start
Решение задачи: «Массив: В массиве найти 7-ой по счету байт»
textual
Листинг программы
mov bx, offset massiv ;смещение начала массива massiv mov cx, 40h ;длина массива в байтах (к примеру 40h) mov ah, 0 ;счетчик нечетных байт, изначально нулевой Search: test byte ptr [bx], 1 ;байт массива чет/нечет ? jz Even ;переход если чет inc ah ;нашли еще одно нечетное cmp ah, 4 ;уже нашли 4 ? je Found ;переход если да Even: inc bx ;передвинем указатель на след.элемент массива loop Search ;цикл по числу элементов массива ;не найдено : в массиве меньше 4-х нечетных элементов ... Found: ;найдено, причем смещение 4-го нечетного элемента массива в BX
Объяснение кода листинга программы
- Входные данные:
- Массив
massiv
размером 40h байт. - Смещение начала массива
massiv
в переменной bx. - Длина массива в байтах (к примеру 40h) в переменной cx.
- Счетчик нечетных байт, изначально нулевой, в переменной ah.
- Массив
- Выполняемые действия:
- Тестирование на четность байта в переменной byte ptr [bx] с использованием инструкции test.
- Если байт массива чет (jz), то переход на метку Even.
- Если байт массива нечет (jnz), то увеличение счетчика нечетных байт в переменной ah на 1 с помощью инструкции inc.
- Сравнение значения счетчика нечетных байт в переменной ah со значением 4 (cmp).
- Если значение счетчика нечетных байт равно 4 (je), то переход на метку Found.
- Если байт массива чет (jz), то увеличение указателя на следующий элемент массива в переменной bx на 1 с помощью инструкции inc и переход на цикл по числу элементов массива с помощью инструкции loop.
- Если не найдено 4 нечетных элемента в массиве, то выполнение цикла до достижения условия.
- Если найдено 4 нечетных элемента в массиве (je), то смещение 4-го нечетного элемента массива сохраняется в переменной bx.
- Результат:
- Если найдено 4 нечетных элемента в массиве, то смещение 4-го нечетного элемента массива будет храниться в переменной bx.
- Если не найдено 4 нечетных элемента в массиве, то выполнение цикла будет продолжаться до выполнения условия.