hex to ascii


искал инфу в интернетах, нашел заметку преобразования шестнадцатиричного числа в текст. Часть кода мне была уже известно, но попалось новое:

Интересно, будет ли работать такое (для hex->bin):

mov ah,al
shr ah,4
xor ah,33h
sub al,ah

Не знаю, для чего, но код не заработал ни на x86, ни на z80.

Нашел еще одно решение для 6502:

;binhex: CONVERT BINARY BYTE TO HEX ASCII CHARS
;
;   ————————————————————————————————————
;   Preparatory Ops: .A: byte to convert
;
;   Returned Values: .A: MSN ASCII char
;                    .X: LSN ASCII char
;                    .Y: entry value
;   ————————————————————————————————————
;
binhex   pha                   ;save byte
         and #001111        ;extract LSN
         tax                   ;save it
         pla                   ;recover byte
         lsr                   ;extract...
         lsr                   ;MSN
         lsr
         lsr
         pha                   ;save MSN
         txa                   ;LSN
         jsr .0000010          ;generate ASCII LSN
         tax                   ;save
         pla                   ;get MSN & fall thru
;
;
;   convert nybble to hex ASCII equivalent...
;
.0000010 cmp #$0a
         bcc .0000020          ;in decimal range
;
         adc #$66              ;hex compensate
;         
.0000020 eor #110000        ;finalize nybble
         rts 

такое вряд ли сработает, потому что у Apple II другая кодировка символов. Короче, вот решение:

device zxspectrum128
        ORG #6000
begin

;костылек ужясма
  LD            HL ,$5CB6
  LD            ($5C4F),HL
  LD            DE ,$15AF
  LD            BC ,$0015
  EX            DE ,HL
  LDIR
  EX            DE ,HL
  DEC           HL
  LD            ($5C57),HL
  INC           HL
  LD            ($5C53),HL
  LD            ($5C4B),HL
  LD            (HL)  ,$80
  INC           HL
  LD            ($5C59),HL;E-LINE

;2
 ld hl,$15C6
 ld de,$5C10
 ld bc,$0E
 ldir

;открытие потока
 ld a,2
 call $1601

ld a,22
rst 10h

xor a
rst 10h
rst 10h

; jr $
tt:
push af

cp 10
jr nc,nodigit
;0-9
add a,$30-$41+10
nodigit:
add a,$41-10
rst 10h
pop af
inc a
cp 16
jr nz,tt
jr $
end
display /d,end-begin
savesna "!void.sna",begin


Первая часть кода для ассемблера sjasmplus, т.к. в снапшоте неправильные системные переменные, и при печати происходит сброс. Остаток - сам код. 8 байт - хоть и не предел, но заработает и в Бейсике.

Комментарии