Другие языки программирования и технологии

Ассемблер, вывод символа

Как с помощью ассемблеа вывести аски код символа (16-ричное представление символа)
То есть, например, есть строка:
We are the champions!
На экране должно отобразится следующее:
57 65 20 61 72 65 20 74 68 65 20 63 68 61 6D 70 69 6F 6E 73 21 24
Intel80286, TASM/MASM, MS-DOS 2.0 и выше, x16

.286
.model small

.code
N177623966:
    mov si, @data
    mov ds, si

    lea si, String
    jmp EnterLoop
DoLoop:
    push ax
    shr al, 4
    call OutHex
    pop ax
    call OutHex
    mov al, 32
    int 29h
EnterLoop:
    lodsb
    test al, al
    jne DoLoop
   
    mov ah, 8
    int 21h
    mov ax, 4C00h
    int 21h

OutHex proc
    and al, 0Fh
    cmp al, 9
    jbe OutH
    add al, 7
OutH:
    add al, 30h
    int 29h
    ret
OutHex endp

.data
  String db "We are the champions!", 0

    end N177623966

Дмитрий Кириченко
Дмитрий Кириченко
51 590
Лучший ответ
1
2
3
4
5
6
7
8
9
10
11
12
13

org 100h
xor ax, ax
int 16h ; getch()
aam 16 ; al / 16 -> ah - десятки, al - единицы
or ax, 3030h ; преобразуем в символы ASCII
xchg al, ah ; меняем местами
call @F ; десятки выводим первыим
xchg al, ah ; а потом единицы
@@: cmp al, 39h ; если код символа
jbe @F ; больше '9'?
add al, 7 ; то корректируем его до 'A'-'F'
@@: int 29h ; выводим на экран
ret