значение выходного байта в ассемблере - PullRequest
1 голос
/ 30 марта 2010

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 марта 2010
// pseudocode for values < 100
printAscii (AL div 10) + 48
printAscii (AL mod 10) + 48

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

1 голос
/ 30 марта 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

...