Ввод байта в двоичной системе счисления - 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 для выхода из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д