Ввод байта в двоичной системе счисления - Assembler

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

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

Доброго времени суток, помогите пожалуйста решить следующую задачу в WinAsm для Dosbox Ввести строку символьных данных состоящую только из 0 и 1 .Взять буфер равный 8 байтам. Получить вместо этого символьного буфера один байт информации, формируя каждый бит 0 или 1 из введенного буфера начиная с конца.

Решение задачи: «Ввод байта в двоичной системе счисления»

textual
Листинг программы
  1. .model small       
  2. .286               
  3.  
  4. .data
  5. txt db 8 dup(?)
  6. msg db 'input string: $'
  7.  
  8. .stack             
  9. db 255 dup(?)      
  10.  
  11. .code              
  12. start:             
  13. mov ax,@data       
  14. mov ds,ax
  15. mov es,ax
  16.  
  17. mov ah,09h
  18. lea dx,msg
  19. int 21h
  20.  
  21. cld
  22. lea di,txt
  23. mov cx,8
  24. input:
  25. mov ah,08h
  26. int 21h
  27.  
  28. cmp al,'0'
  29. je ok
  30.  
  31. cmp al,'1'
  32. jne input
  33.  
  34. ok:
  35. stosb
  36.  
  37. mov ah,02h
  38. mov dl,al
  39. int 21h
  40. loop input
  41.  
  42. mov ah,02h
  43. mov dl,0Ah
  44. int 21h
  45.  
  46. mov ah,02h
  47. mov dl,0Dh
  48. int 21h
  49.  
  50. std
  51. xor ah,ah
  52. lea si,txt+7
  53. mov cx,8
  54. form:
  55. lodsb
  56.  
  57. shr al,1
  58. rcl ah,1
  59. loop form
  60.  
  61. mov ah,4Ch         
  62. mov al,00h         
  63. int 21h
  64. end start

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

  1. Установка начального значения регистрам AX, CS, DS, ES = @data
  2. Вывод сообщения с призывом к вводу текста
  3. Установка регистра BX в 09h (для ввода байта)
  4. Установка регистра DX в адрес строки msg (для вывода сообщения)
  5. Ввод байта с помощью функции 08h (ввода символа)
  6. Проверка введенного символа на равенство '0'
  7. Если символ '0', то выполнение перехода к метке ok
  8. Если символ не равен '0', то повторный вызов функции ввода байта
  9. Если символ равен '0', то выполнение цикла по символам строки txt с помощью цикла while и команды stosb (запись байта в строку)
  10. Вывод символа новой строки с помощью функции 02h и int 21h (0Dh = CR, 0Ah = LF)
  11. Повторный вывод символа новой строки (для надежности)
  12. Вывод сообщения об успешном вводе
  13. Установка регистра BX в 4Ch (для выхода из программы)
  14. Установка регистра AL в 00h (для выхода из программы с кодом 0)
  15. Вызов функции int 21h для выхода из программы

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


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

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

15   голосов , оценка 4.133 из 5

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

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

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