Битовые и логические операции с массивом - Assembler

Формулировка задачи:

Само задание : Дан массив из 10 без знаковых байтов. Коды первого третьего и седьмого байта сдвинуть логически влево; коды второго, четвертого и пятого байта сдвинуть арифметически вправо, а нулевой и шестой байты объединить по “И” с кодом 01110111. Определить сумму элементов массива. Превышает ли полученная сумма величину 221? Имеются ли в составе байта, в кодах которых присутствует одновременно “O” в 1,3 и в 5 битах? Давайте сотрудничать)

Код к задаче: «Битовые и логические операции с массивом - Assembler»

textual
LOCALS
 
.model small
 
.stack 100h
 
.data
        A               db      -3, 2, -9, 0, 8, -45, 5, 15, -9, 5
 
        Greater         db      'Greater 221', 0Dh, 0Ah, '$'
        NoGreater       db      'No greater 221', 0Dh, 0Ah, '$'
        Consist         db      'Consist', 0Dh, 0Ah, '$'
        NoConsist       db      'No Consist', 0Dh, 0Ah, '$'
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
 
        ;Коды первого третьего и седьмого байта сдвинуть логически влево;
        shl     byte ptr A[1],  1
        shl     byte ptr A[3],  1
        shl     byte ptr A[7],  1
        ;коды второго, четвертого и пятого байта сдвинуть арифметически вправо;
        shr     byte ptr A[2],  1
        shr     byte ptr A[4],  1
        shr     byte ptr A[5],  1
        ;нулевой и шестой байты объединить по "И" с кодом 01110111
        and     byte ptr A[0],  01110111b
        and     byte ptr A[6],  01110111b
        ;Определить сумму элементов массива.
        lea     si,     A
        mov     cx,     10
        mov     ax,     0       ;сумма
@@For:
        add     al,     [si]
        adc     ah,     0
        add     si,     1
        loop    @@For
        ;Превышает      ли полученная сумма величину 221
        cmp     ax,     221
        jg      @@Greater
        mov     ah,     09h
        lea     dx,     NoGreater
        int     21h
        jmp     @@Metka
@@Greater:
        mov     ah,     09h
        lea     dx,     Greater
        int     21h
@@Metka:
        ;Имеются ли в составе массива байты, в кодах которых
        ;присутствует одновременно "0" в 1,3 и в 5 битах?
        lea     si,     A
        mov     cx,     10
        mov     bx,     0       ;количество искомых байт
@@@For:
        mov     al,     [si]
        add     si,     1
        and     al,     00101010b
        cmp     al,     00101010b
        jne     @@@Skip
        inc     bx
@@@Skip:
        loop    @@@For
        cmp     bx,     0
        jne     @@Consist
        mov     ah,     09h
        lea     dx,     NoConsist
        int     21h
        jmp     @@Exit
@@Consist:
        mov     ah,     09h
        lea     dx,     Consist
        int     21h
 
@@Exit:
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

14   голосов, оценка 4.214 из 5


СОХРАНИТЬ ССЫЛКУ