Все про Assembler українською мовою на сайті net.kr.ua

 

:: Меню ::

Головна
Введення
Архітектура реального режиму
Основи програмування
Команди і алгоритми
Розширені можливості сучасних мікропроцесорів
Система команд процесорів Intel
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
 

:: Лічильники ::

=

 

 

 

 

fff00e50

Інформатика, асемблер, переклад двійковою на восьму ступінь

максим лялін
Інформатика, асемблер, переклад двійковою на восьму ступінь
В асемблері написати програму яка з двійкової перекладає у восьму ступінь



Відповіді:

inga zajonc
Зсувами вправо.

Олександр Хейнонен
; ввести двійкове число і перетворити його на 8-річне .model tiny .286 .code org 100h Start: ;-- введення даних ------------------------ mov dx,offset BinMsg mov ah,9 int 21h; виведення вітання mov ah,0Ah mov dx,offset BinBuf int 21h; введення даних з клавіатури mov ah,9 mov dx,offset CRLF int 21h; переходимо на новий рядок mov cl, [BinBuf + 1] xor ch, ch; cx = довжина рядка jcxz @@wrongnumber; порожній рядок mov si, offset Bin xor dx, dx; отримуване число cld; прямий порядок читання даних; починаємо перетворення @@nextbin: lodsb cmp al,'0' jb @@wrongnumber ; введений символ менше '0' cmp al,'1' ja @@wrongnumber ; введений символ більший за '1' add al,255-'0' ; якщо це символ '0', al=255 і CF=0; якщо '1', al=0 і CF=1 (відбувся перенесення через кордон байта) rcl dx,1 ; зсуваємо dx на 1 біт вліво, записуючи в молодший біт значення прапора CF, тобто фактично введений біт (0 або 1) loop @@nextbin; тепер у нас в dx число, яке потрібно перетворити на 8-річне xor cx, cx; лічильник символів @@nextoct: mov al, dl and al, 7; отримуємо 3 молодших біта add al, '0'; перетворимо їх на цифру '0'..'7' push ax ; зберігаємо в стеку inc cx; збільшуємо лічильник символів shr dx,3; зрушуємо dx на 3 біт вправо jnz @@nextoct; повторюємо, якщо є ще цифри; тепер у нас у стеку cx символів (цифр), які потрібно вивести на екран mov ah,9 mov dx,offset OctMsg int 21h; виведення повідомлення @@output: pop dx; читаємо записані в стек цифри у зворотному порядку mov ah,2 int 21h; виводимо цифру на екран loop @@output @@exit: int 20h; вихід із програми @@wrongnumber: mov ah,9 mov dx,offset WrongMsg int 21h ; повідомлення про помилку введення jmp @@exit .data BinMsg db 'Bin = $' OctMsg db 'Oct = $' CRLF db 13,10,'$' WrongMsg db 'Введене число не є двійковим! $ 'BinBuf db 17,? ; буфер для введення до 16 символів Bin db 17 dup (?); наше число end Start Удачі!




:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Популярне ::

-


:: Посилання ::

-


 

 

 


Copyright © net.kr.ua, 2019-2025 (assem.us)