Программирование на Ассемблере
Для этого будем использовать следующую таблицу:
0 1 2 3 4 5 6 7 8 9 A B C D E F $30 $31 $32 $33 $34 $35 $36 $37 $38 $39 $41 $42 $43 $44 $45 $46
В этой таблице показаны ASCII-коды шестнадцатиричных цифр. Легко видеть,
что если D2 содержит число из диапазона 0-9, то для преобразования его в
ASCII-код к D2 нужно прибавить число $30. Но для преобразования остальных
чисел (10-15) нужно прибавлять не $30, а $37. Поэтому нам придется
разделить эти два случая в нашем алгоритме. Теперь мы готовы написать фрагмент программы для преобразования D2 в цифру: nibble: and #$0F,D2 ;рассматриваем только младший полубайт
add #$30,D2 ;прибавляем $30
cmp #$3A,D2 ;преобразуем цифру?
bcs.s ok ;да, уже преобразовали
addq #7,D2 ;иначе преобразуем букву - добавляем
;еще 7
ok:
rts ;все Эта программа возвращает в D2 ASCII-код полубайта. Чтобы преобразовать
целый байт, нужно вызвать эту подпрограмму дважды: ;(4.3.1A) bin-hex
; ;начало Вашей программы
lea buffer,A0 ;буфер для записи результата
moveq #$4A,D1 ;байт, который надо преобразовать
bsr.s byte ;вызов конвертора
rts
; ... ;продолжение Вашей программы
byte:
move D1,D2 ;исходный байт - в D2
lsr #4,D2 ;передвигаем старший полубайт на место
;младшего
bsr.s nibble ;преобразовать полубайт
move.b D2,(A0)+ ;записать первую цифру результата
move D1,D2 ;исходный байт - в D2
bsr.s nibble ;преобразовать младший полубайт
move.b D2,(A0)+ ;записать вторую цифру результата
rts ;возврат
nibble:
and #$0F,D2 ;оставляем только младший полубайт
add #$30,D2 ;прибавляем $30
cmp #$3A,D2 ;цифра?
bcs.s ok ;да, в D2 - код
addq #7,D2 ;иначе добавляем 7 (чтобы в сумме
;получить $37)
ok:
rts ;возврат buffer:
blk.b 9,0 ;место для записи результата end Чтобы протестировать эту программу, оттранслируйте ее и загрузите в
отладчик.
|