Вывод ASCII кодов символов - Assembler (223191)

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

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

Дорогие знатоки! Есть такое задание по Assembler: Написать программу, которая выводит на экран ASCII символы и их шестнадцатеричные коды, который пользователь введет с клавиатуры. Есть наработка, но вылетает программа при запуске, пожалуйста помогите.
Листинг программы
  1. cseg segment para 'code'
  2. assume cs:cseg
  3. org 100h
  4. begin proc near
  5. jmp start
  6. prop db '----------'
  7. mes db 'Enter symbols$'
  8. symbols label byte
  9. symb db 50
  10. symba db ?
  11. s db 50 dup ('$')
  12. vyvod label byte
  13. vyv db 50 dup ('$')
  14. start: mov ax,0002
  15. int 10h
  16. mov ah,02
  17. mov dx,0101
  18. int 10h
  19. mov ah,09
  20. lea dx,mes
  21. int 21h
  22. mov ah,02
  23. mov dx,0201
  24. int 10h
  25. mov ah,0Ah
  26. lea dx,symbols
  27. int 21h
  28. mov si,03
  29. mov di,00
  30. lea cx,symba
  31. k: push cx
  32. mov ah,02
  33. mov dh,[si]
  34. mov dl,01
  35. int 10h
  36. push si
  37. mov ah,09
  38. lea dx,s[di]
  39. int 10h
  40. mov ah,09
  41. lea dx,prop
  42. int 10h
  43. lea ax,s[di]
  44. call proc2
  45. pop si
  46. inc si
  47. inc di
  48. pop cx
  49. loop k
  50. up: mov ah,00
  51. int 16h
  52. cmp ah, 2ah
  53. jne up
  54. int 20h
  55. begin endp
  56. proc2 proc near
  57. mov cx,0
  58. mov si,0
  59. mov bh,10
  60. mov bl,0
  61. mov ah,0
  62. up2: cmp al,0
  63. je up3
  64. push ax
  65. div bh
  66. inc cx
  67. mov ah,0
  68. jmp up2
  69. up3: pop ax
  70. push ax
  71. mov al,bl
  72. mul bh
  73. mov bl,al
  74. pop ax
  75. push ax
  76. sub al,bl
  77. add al,'0'
  78. mov vyv[si],al
  79. inc si
  80. pop ax
  81. mov bl,al
  82. loop up3
  83. mov ah,09h
  84. lea dx,vyv[si]
  85. int 21h
  86. ret
  87. proc2 endp
  88. cseg ends
  89. end begin

Решение задачи: «Вывод ASCII кодов символов»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3.  
  4. .data
  5.         kbEsc   equ     1Bh     ;код Esc
  6.         HexTabl db     '0123456789abcdef'
  7. .code
  8.  
  9. ;выводит на экран в 16 системе счисления
  10. ;содержимое регистра AL
  11. ShowHex PROC
  12.         push    ax
  13.         push    bx
  14.         push    cx
  15.  
  16.         mov     cx,     ax
  17.         shr     al,     1
  18.         shr     al,     1
  19.         shr     al,     1
  20.         shr     al,     1
  21.         and     ax,     000fh
  22.         mov     bx,     OFFSET HexTabl
  23.         xlat
  24.         int     29h
  25.  
  26.         mov     ax, cx
  27.         and     ax, 000fh
  28.         xlat
  29.         int     29h
  30.  
  31.         pop     cx
  32.         pop     bx
  33.         pop     ax
  34.         ret
  35. ShowHex ENDP
  36.  
  37. main:
  38.         mov     ax,     @data
  39.         mov     ds,     ax
  40.  
  41. @@Loop:
  42.         mov     ah,     00h
  43.         int     16h
  44.  
  45.         cmp     al,     kbEsc
  46.         je      @@Break
  47.  
  48.         int     29h             ;печать символа ASCII
  49.  
  50.         mov     ah,     al      ;печать разделителя - пробела
  51.         mov     al,     ' '
  52.         int     29h
  53.  
  54.         mov     al,     ah      ;печать кода символа
  55.         call    ShowHex
  56.  
  57.         mov     ah,     al      ;печать разделителя - пробела
  58.         mov     al,     ' '
  59.         int     29h
  60.  
  61.         jmp     @@Loop
  62. @@Break:
  63.  
  64. @@Exit:
  65.         mov  ax, 4C00h                   ; выход в DOS
  66.         int  21h
  67. end     main

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

  1. Устанавливается значение переменной kbEsc как 1Bh, что представляет собой код символа Escape в шестнадцатеричной системе.
  2. Объявляется переменная HexTable со значением '0123456789abcdef'.
  3. Создается процедура ShowHex для вывода на экран символов в шестнадцатеричной системе счисления.
  4. В основной программе main устанавливаются значения сегмента данных и регистра ds для доступа к данным.
  5. В цикле @@Loop программа ожидает ввод символов с клавиатуры и сравнивает их с кодом kbEsc.
  6. Если введен kbEsc, программа завершает работу, иначе выводит ASCII код введенного символа и его представление в шестнадцатеричной системе с помощью процедуры ShowHex.
  7. Код завершается инструкцией для выхода в DOS. Этот код выглядит как комбинация Assembler и DOS команд для программирования на языке ассемблера для MS-DOS операционной системы.

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


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

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

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

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

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

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