Массив из 0 и 1 преобразовать в число в двоичной системе счисления - Assembler

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

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

Дан массив С[16] состоящий из 0 и 1. Составить число следующим образом – i-тый бит равен i-тому элементу массива. Не могу разобраться, как составить такое число. Как реализовать?

Решение задачи: «Массив из 0 и 1 преобразовать в число в двоичной системе счисления»

textual
Листинг программы
; fasm-code
; Собирает BIN из массива
;-------------------------
org   100h
jmp   start
 
array   db  0,1,1,1,0,1,0,0    ; массив (макс.16, если используешь 16-бит регистры)
len     =   $ - array          ; его длина
 
start:  mov   si,array     ; адрес массива
        mov   dx,len       ; длина в DX (счётчик цикла)
        mov   cx,dx        ; он же - смещение бита для SHL
        dec   cx           ;     ..-1 (отсчёт с нуля)
        xor   bx,bx        ; здесь будет результат
 
cycle:  lodsb              ; в AL - очередной байт из массива
        shl   ax,cl        ; сдвигаем его влево(L) на нужную позицию (получили маску в АХ)
        or    bx,ax        ; взводим бит в результате (если он не ноль)
        dec   cl           ; уменьшаем указатель позиции!!!
        dec   dx           ; весь массив прочитали???
        jnz   cycle        ; если нет - продолжить..
 
        xor   ah,ah        ; ждём клаву..
        int   16h          ;
        ret                ; на выход!

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

  1. Собирает BIN из массива - код преобразует двоичный массив в число в двоичной системе счисления.
  2. org 100h - начало выполнения кода, выполняет инициализацию сегмента данных.
  3. jmp start - переход к метке start, которая является точкой входа в программу.
  4. array db 0,1,1,1,0,1,0,0 - определение массива, в котором содержится двоичное представление числа. В данном случае массив состоит из 8 элементов, где 0 обозначает единицу, а 1 - ноль.
  5. len = $ - array - вычисление длины массива.
  6. start: mov si,array - в регистр SI записывается адрес начала массива.
  7. mov dx,len - в регистр DX записывается длина массива.
  8. mov cx,dx - в регистр CX записывается длина массива, что также является смещением бита для операции сдвига.
  9. dec cx - уменьшение значения регистра CX на единицу, что позволяет перейти к следующему биту при сдвиге.
  10. xor bx,bx - инициализация регистра BX, который будет использоваться для хранения результата.
  11. cycle: lodsb - загрузка очередного байта из массива в регистр AL.
  12. shl ax,cl - сдвиг содержимого регистра AX влево на значение в регистре CL. Это позволяет получить маску для текущего бита.
  13. or bx,ax - установка бита в регистре BX, если он не равен нулю.
  14. dec cl - уменьшение значения регистра CL на единицу, что позволяет перейти к следующему биту при сдвиге.
  15. dec dx - уменьшение значения регистра DX на единицу, что позволяет проверить, весь ли массив был прочитан.
  16. jnz cycle - если текущий бит не равен нулю, то выполнение цикла продолжается.
  17. xor ah,ah - ожидание нажатия клавиши.
  18. int 16h - вызов прерывания, которое позволяет программе взаимодействовать с клавиатурой.
  19. ret - выход из программы.

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


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

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

8   голосов , оценка 4 из 5
Похожие ответы