Вывод ASCII кодов символов - Assembler (223191)
Формулировка задачи:
Дорогие знатоки! Есть такое задание по Assembler: Написать программу, которая выводит на экран ASCII символы и их шестнадцатеричные коды, который пользователь введет с клавиатуры. Есть наработка, но вылетает программа при запуске, пожалуйста помогите.
cseg segment para 'code' assume cs:cseg org 100h begin proc near jmp start prop db '----------' mes db 'Enter symbols$' symbols label byte symb db 50 symba db ? s db 50 dup ('$') vyvod label byte vyv db 50 dup ('$') start: mov ax,0002 int 10h mov ah,02 mov dx,0101 int 10h mov ah,09 lea dx,mes int 21h mov ah,02 mov dx,0201 int 10h mov ah,0Ah lea dx,symbols int 21h mov si,03 mov di,00 lea cx,symba k: push cx mov ah,02 mov dh,[si] mov dl,01 int 10h push si mov ah,09 lea dx,s[di] int 10h mov ah,09 lea dx,prop int 10h lea ax,s[di] call proc2 pop si inc si inc di pop cx loop k up: mov ah,00 int 16h cmp ah, 2ah jne up int 20h begin endp proc2 proc near mov cx,0 mov si,0 mov bh,10 mov bl,0 mov ah,0 up2: cmp al,0 je up3 push ax div bh inc cx mov ah,0 jmp up2 up3: pop ax push ax mov al,bl mul bh mov bl,al pop ax push ax sub al,bl add al,'0' mov vyv[si],al inc si pop ax mov bl,al loop up3 mov ah,09h lea dx,vyv[si] int 21h ret proc2 endp cseg ends end begin
Решение задачи: «Вывод ASCII кодов символов»
textual
Листинг программы
.model small .stack 100h .data kbEsc equ 1Bh ;код Esc HexTabl db '0123456789abcdef' .code ;выводит на экран в 16 системе счисления ;содержимое регистра AL ShowHex PROC push ax push bx push cx mov cx, ax shr al, 1 shr al, 1 shr al, 1 shr al, 1 and ax, 000fh mov bx, OFFSET HexTabl xlat int 29h mov ax, cx and ax, 000fh xlat int 29h pop cx pop bx pop ax ret ShowHex ENDP main: mov ax, @data mov ds, ax @@Loop: mov ah, 00h int 16h cmp al, kbEsc je @@Break int 29h ;печать символа ASCII mov ah, al ;печать разделителя - пробела mov al, ' ' int 29h mov al, ah ;печать кода символа call ShowHex mov ah, al ;печать разделителя - пробела mov al, ' ' int 29h jmp @@Loop @@Break: @@Exit: mov ax, 4C00h ; выход в DOS int 21h end main
Объяснение кода листинга программы
- Устанавливается значение переменной
kbEsc
как 1Bh, что представляет собой код символаEscape
в шестнадцатеричной системе. - Объявляется переменная
HexTable
со значением '0123456789abcdef'. - Создается процедура
ShowHex
для вывода на экран символов в шестнадцатеричной системе счисления. - В основной программе
main
устанавливаются значения сегмента данных и регистра ds для доступа к данным. - В цикле @@Loop программа ожидает ввод символов с клавиатуры и сравнивает их с кодом
kbEsc
. - Если введен
kbEsc
, программа завершает работу, иначе выводит ASCII код введенного символа и его представление в шестнадцатеричной системе с помощью процедурыShowHex
. - Код завершается инструкцией для выхода в DOS. Этот код выглядит как комбинация Assembler и DOS команд для программирования на языке ассемблера для MS-DOS операционной системы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д