Вывод 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 операционной системы.