выходное значение байта на ассемблере

Мне немного стыдно спрашивать об этом, но как мне вывести значение байта на ассемблере? Предположим, у меня есть число 62 в регистре AL. Я нацелен на 8086. Кажется, доступны только прерывания, которые выводят значение ascii.

Редактировать: Спасибо, Ник Д., это то, что я искал. Чтобы ответить на пару вопросов, я использую эмулятор emu8086. Код будет использоваться в крошечном приложении на заводе, где используется устаревшее оборудование (т.е. это секрет).

Решение, использующее идею Nick D, выглядит примерно так:

compare number, 99
jump if greater to over99Label
compare number, 9
jump if greater to between9and99Label

;if jumps failed, number has one digit
printdigit(number)

between9and99Label:
divide the number by 10
printascii(quotient)
printascii(modulus)
jump to the end

over99Label:
divide the number by 100
printascii(quotient)
store the modulus in the place that between9and99Label sees as input
jump to between9and99Label

the end:
return

и он отлично работает для беззнаковых байтов :)


person Valentin Brasso    schedule 30.03.2010    source источник
comment
Можете ли вы дать нам больше информации о вашей среде? Это эмулятор или вы действительно пишете программу сборки 8086? Если это настоящая программа, к каким службам операционной системы у вас есть доступ?   -  person Carl Norum    schedule 30.03.2010


Ответы (2)


// pseudocode for values < 100
printAscii (AL div 10) + 48
printAscii (AL mod 10) + 48

Преобразуйте значение в строковое представление и распечатайте его.

person Nick Dandoulakis    schedule 30.03.2010

У меня нет доступа к ассемблеру в данный момент, чтобы проверить его, и синтаксис в любом случае будет зависеть от того, какой ассемблер вы используете, но это все равно должно передавать идею.

FOUR_BITS:
.db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'

; If ebx need to be preserved do so
push  ebx

; Get the top four bits of al
mov   bl, al
shl   bl, 4

; Convert that into the ASCII hex representation
mov   bl, [FOUR_BITS + bl]

; Use that value as a parameter to your printing routine
push  bl
call  printAscii
pop   bl

; Get the bottom four bits of al
mov   bl, al
and   bl, 0xF

; Convert that into the ASCII hex representation
mov   bl, [FOUR_BITS + bl]

; Use that value as a parameter to your printing routine
push  bl
call  printAscii
pop   bl

person torak    schedule 30.03.2010