Ввод байта в двоичной системе счисления - Assembler
Формулировка задачи:
Доброго времени суток, помогите пожалуйста решить следующую задачу в WinAsm для Dosbox
Ввести строку символьных данных состоящую только из 0 и 1 .Взять
буфер равный 8 байтам. Получить вместо этого символьного буфера
один байт информации, формируя каждый бит 0 или 1 из введенного
буфера начиная с конца.
Решение задачи: «Ввод байта в двоичной системе счисления»
textual
Листинг программы
- .model small
- .286
- .data
- txt db 8 dup(?)
- msg db 'input string: $'
- .stack
- db 255 dup(?)
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov es,ax
- mov ah,09h
- lea dx,msg
- int 21h
- cld
- lea di,txt
- mov cx,8
- input:
- mov ah,08h
- int 21h
- cmp al,'0'
- je ok
- cmp al,'1'
- jne input
- ok:
- stosb
- mov ah,02h
- mov dl,al
- int 21h
- loop input
- mov ah,02h
- mov dl,0Ah
- int 21h
- mov ah,02h
- mov dl,0Dh
- int 21h
- std
- xor ah,ah
- lea si,txt+7
- mov cx,8
- form:
- lodsb
- shr al,1
- rcl ah,1
- loop form
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
- Установка начального значения регистрам AX, CS, DS, ES = @data
- Вывод сообщения с призывом к вводу текста
- Установка регистра BX в 09h (для ввода байта)
- Установка регистра DX в адрес строки msg (для вывода сообщения)
- Ввод байта с помощью функции 08h (ввода символа)
- Проверка введенного символа на равенство '0'
- Если символ '0', то выполнение перехода к метке
ok
- Если символ не равен '0', то повторный вызов функции ввода байта
- Если символ равен '0', то выполнение цикла по символам строки txt с помощью цикла while и команды stosb (запись байта в строку)
- Вывод символа новой строки с помощью функции 02h и int 21h (0Dh = CR, 0Ah = LF)
- Повторный вывод символа новой строки (для надежности)
- Вывод сообщения об успешном вводе
- Установка регистра BX в 4Ch (для выхода из программы)
- Установка регистра AL в 00h (для выхода из программы с кодом 0)
- Вызов функции int 21h для выхода из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д