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

Узнай цену своей работы

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

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

Решение задачи: «Битовые и логические операции с массивом»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A               db      -3, 2, -9, 0, 8, -45, 5, 15, -9, 5
  9.  
  10.         Greater         db      'Greater 221', 0Dh, 0Ah, '$'
  11.         NoGreater       db      'No greater 221', 0Dh, 0Ah, '$'
  12.         Consist         db      'Consist', 0Dh, 0Ah, '$'
  13.         NoConsist       db      'No Consist', 0Dh, 0Ah, '$'
  14. .code
  15.  
  16. main    proc
  17.         mov     ax,     @data
  18.         mov     ds,     ax
  19.  
  20.  
  21.         ;Коды первого третьего и седьмого байта сдвинуть логически влево;
  22.         shl     byte ptr A[1],  1
  23.         shl     byte ptr A[3],  1
  24.         shl     byte ptr A[7],  1
  25.         ;коды второго, четвертого и пятого байта сдвинуть арифметически вправо;
  26.         shr     byte ptr A[2],  1
  27.         shr     byte ptr A[4],  1
  28.         shr     byte ptr A[5],  1
  29.         ;нулевой и шестой байты объединить по "И" с кодом 01110111
  30.         and     byte ptr A[0],  01110111b
  31.         and     byte ptr A[6],  01110111b
  32.         ;Определить сумму элементов массива.
  33.         lea     si,     A
  34.         mov     cx,     10
  35.         mov     ax,     0       ;сумма
  36. @@For:
  37.         add     al,     [si]
  38.         adc     ah,     0
  39.         add     si,     1
  40.         loop    @@For
  41.         ;Превышает      ли полученная сумма величину 221
  42.         cmp     ax,     221
  43.         jg      @@Greater
  44.         mov     ah,     09h
  45.         lea     dx,     NoGreater
  46.         int     21h
  47.         jmp     @@Metka
  48. @@Greater:
  49.         mov     ah,     09h
  50.         lea     dx,     Greater
  51.         int     21h
  52. @@Metka:
  53.         ;Имеются ли в составе массива байты, в кодах которых
  54.         ;присутствует одновременно "0" в 1,3 и в 5 битах?
  55.         lea     si,     A
  56.         mov     cx,     10
  57.         mov     bx,     0       ;количество искомых байт
  58. @@@For:
  59.         mov     al,     [si]
  60.         add     si,     1
  61.         and     al,     00101010b
  62.         cmp     al,     00101010b
  63.         jne     @@@Skip
  64.         inc     bx
  65. @@@Skip:
  66.         loop    @@@For
  67.         cmp     bx,     0
  68.         jne     @@Consist
  69.         mov     ah,     09h
  70.         lea     dx,     NoConsist
  71.         int     21h
  72.         jmp     @@Exit
  73. @@Consist:
  74.         mov     ah,     09h
  75.         lea     dx,     Consist
  76.         int     21h
  77.  
  78. @@Exit:
  79.         mov     ax,     4C00h
  80.         int     21h
  81. main    endp
  82.  
  83. end     main

Объяснение кода листинга программы

  1. Создание переменных:
    • A - массив байтов, содержащий значения (-3, 2, -9, 0, 8, -45, 5, 15, -9, 5)
    • Greater - строка 'Greater 221'
    • NoGreater - строка 'No greater 221'
    • Consist - строка 'Consist'
    • NoConsist - строка 'No Consist'
  2. Логический и арифметический сдвиг байтов массива:
    • Байты с номерами 1, 3 и 7 сдвигаются логически влево на 1 бит
    • Байты с номерами 2, 4 и 5 сдвигаются арифметически вправо на 1 бит
    • Байты с номерами 0 и 6 объединяются по И с кодом 01110111
  3. Определение суммы элементов массива:
    • Считается сумма элементов массива A
  4. Проверка превышения суммы величины 221:
    • Сравнивается полученная сумма с 221
    • Выводится соответствующее сообщение в зависимости от результата сравнения
  5. Поиск байтов, содержащих одновременно 0 в 1, 3 и 5 битах:
    • Ищутся байты в массиве A, у которых присутствует 0 в 1, 3 и 5 битах
    • Выводится соответствующее сообщение о наличии или отсутствии таких байтов в массиве
  6. Завершение программы:
    • Программа завершается с кодом 4C00h

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы