Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты - Assembler
Формулировка задачи:
Дан массив из 10 байт. Посчитать количество байт,в которых сброшены 6 и 4 биты. Массив байтов размещается начиная с DS:0000h. Ответ должен быть записан в регистре DX
Вот, по моему мнению наиболее близкий к правильному решению код. В ассемблере полный профан,третий раз в жизни имею с ним дело,так что пожалуйста добавьте к своему решению комментарий.
mov SI,0000h mov CX,10 xor BX,BX MET1: lodsb test al,01010000b ; все что идет после этой строки скорее всего полнейший бред jnz MET2 inc SI loop MET1 MET2: inc BX loop MET1 mov DX,BX
Решение задачи: «Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты»
textual
Листинг программы
mov cx,10 xor ax,ax xor dx,dx MET1:lodsb test al,01010000b setp al add dx,ax loop MET1
Объяснение кода листинга программы
- mov cx,10 - устанавливает счётчик циклов на 10
- xor ax,ax - обнуляет значение аккумулятора
- xor dx,dx - обнуляет значение регистра dx
- MET1:lodsb - заносит в регистр ax значение байта из массива (счёт начинается с 0)
- test al,01010000b - проверяет, что в байте, занесённом в ax, сброшены шестой и четвёртый биты (01010000b в двоичной системе равно 26 в десятичной)
- setp al - если условие из пункта 5 выполняется, то переводит в 1 младший бит регистра al (это будет 0 для первого байта, 1 для второго и так далее)
- add dx,ax - складывает значение регистра dx и аккумулятора (регистр dx содержит сумму, начиная с 0)
- loop MET1 - повторяет шаги с 4 по 7 для каждого байта в массиве В итоге, после выполнения программы, в регистре dx будет содержаться количество байтов, в которых сброшены шестой и четвёртый биты.