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

Малко ме е срам да питам това, но как да изведа стойността на байт в асемблер? Да предположим, че имам номер 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