Ввод символов и отображение в различных системах счисления - Assembler

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

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

Здравствуйте! Есть проблема, прошу подсказки. Нужно создать прогу на ассемблере, которая при введении с клавы двух байт (*1234 естественно в 16-ричной) пересчитывала бы их в другие, например в двоичную, десятичную, шестнадцатеричную и т.д. Сама логика перевода понятна, сравнение, добавление 30h или 37h (для hex) или деление на 10 (для 10-ричной). Мне непонятно, как сохранить введенные с клавы байты например в BX, чтобы потом из них доставать, преобразовывать и выводить на экран по своему желанию. Ниже приведу свои потуги, которые моментально выдадут во мне чайника. Наведите на путь истинный.
Листинг программы
  1. [org 100h]
  2. Start:
  3. H1: db 82h, 82h, 85h, 84h, 88h, 92h, 85h, 20h,
  4. db 24h;Текст
  5. ;--------------------------------------------------
  6. mov dl,[H1]
  7. call Write_str ; вывод на экран текста
  8. call Write_digit_hex; вызов процедуры ввода с клавиатуры 1 байта
  9. mov cl,4; смешение цифры из младшего полубайта в старший
  10. shl dl,cl;
  11. call Write_digit_hex
  12. int 20h
  13. ;------------------------------------------------------
  14. Write_str:
  15. push ax
  16. mov ah,9
  17. int 21h
  18. pop ax
  19. ret
  20. ;------------------------------------------------------
  21. Write_digit_hex:
  22. push ax
  23. push dx
  24. mov ah,1
  25. int 21h
  26. mov dl,al
  27. cmp dl,39h
  28. jbe L1
  29. sub dl,37h
  30. L1:
  31. sub dl,30h
  32. int 21h
  33. pop dx
  34. pop ax
  35. ret
  36. ;------------------------------------------------------
  37. Write_str:
  38. push ax
  39. mov ah,9
  40. int 21h
  41. pop ax
Для справки, получаю второе высшее, учусь на заочном, по требованию ВУЗа компилировал через NASM, использую для проверки простой debug и командную строку. Пока что-то более совершенное и понятное мне недоступно в силу отсутствия понимания. Но за совет буду крайне признателен.

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

textual
Листинг программы
  1. model   tiny
  2. .code
  3. org 100h
  4. start:  lea dx,dbSiN
  5.     mov si,10
  6.     call    inpNum
  7.     jc  start
  8.     mov dwSin,di
  9. @@00:   lea dx,dbInp
  10.     mov si,dwSin
  11.     call    inpNum
  12.     jc  @@00
  13.     mov dwNum,di
  14. @@01:   lea dx,dbSon
  15.     mov si,10
  16.     call    inpNum
  17.     jc  @@01
  18.     mov ah,9
  19.     lea dx,dbRes
  20.     int 21h
  21. @@02:   mov ax,di
  22.     mov si,10
  23.     call    outNum
  24.     mov al,'='
  25.     int 29h
  26.     mov ax,dwnum
  27.     mov si,di
  28.     call    outNum
  29.     mov al,10
  30.     int 29h
  31.     mov al,13
  32.     int 29h
  33.     dec di
  34.     cmp di,1
  35.     jnz @@02
  36.     ret
  37. inpNum  proc
  38.     mov ah,9
  39.     int 21h
  40.     xor di,di
  41.     mov bx,si
  42. in01:   xor ax,ax
  43.     int 16h
  44.     mov ah,al
  45.     cmp al,13
  46.     jz  in04
  47.     cmp ah,'a'
  48.     jb  in02
  49.     sub ah,'a'-'A'
  50.     sub al,'a'-'A'
  51. in02:   cmp ah,'A'
  52.     jb  in03
  53.     sub ah,7
  54. in03:   sub ah,'0'
  55.     js  in01
  56.     cmp ah,bl
  57.     jae in01
  58.     push    ax
  59.     int 29h
  60.     pop ax
  61.     mov al,ah
  62.     xor ah,ah
  63.     xchg    ax,di
  64.     xor dx,dx
  65.     mul si
  66.     add di,ax
  67.     or  dx,dx
  68.     jz  in01
  69.     mov ah,9
  70.     lea dx,dbErr
  71.     int 21h
  72.     stc
  73. in04:   ret
  74. inpNum  endp
  75. outNum  proc
  76.     xor cx,cx
  77. on1:    xor dx,dx
  78.     div si
  79.     push    dx
  80.     inc cx
  81.     or  ax,ax
  82.     jnz on1
  83.     mov ax,' '-'0'-7
  84. on2:    push    ax
  85.     inc cx
  86.     cmp cx,17
  87.     jnz on2
  88. on3:    pop ax
  89.     cmp al,9
  90.     jbe on4
  91.     add al,7
  92. on4:    add al,'0'
  93.     int 29h
  94.     loop    on3
  95.     ret
  96. outNum  endp
  97. dbInp   db  10,13,'Enter number:$'
  98. dbSon   db  10,13,'system output:$'
  99. dbSin   db  10,13,'system input:$'
  100. dbErr   db  10,13,'Error overflow$'
  101. dbRes   db  10,13,'Result in any system:',10,13,'$'
  102. dwnum   dw  ?
  103. dwSin   dw  ?
  104.     end start

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


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

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

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

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

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

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