Доклад: Вирусы под Windows
Процедура перевода байта в ASCII-формат для печати. Значение,
[находящееся в регистре AL, будет записано в ASCII-формате
;по адресу ES:EDI
HexWriteS proc
; Разделяем байт на полубайты и загружаем их в регистры АН и AL
mov ah.al
and al.OFh
shr ah,4
[Добавляем 30h к каждому полубайту, чтобы регистры содержали коды
[соответствующих символов ASCII. Если число,
;записанное в полубайте, было больше 9,
;то значение в этом полубайте надо еще корректировать
or ax,3030h
.Меняем полубайты местами, чтобы регистр АН содержал младший
.полубайт, а регистр AL - старший
xchg al.ah
;Проверим. надо ли корректировать младший полубайт,
.если да - корректируем
cmp ah, 39h
ja @@4
[Проверим, надо ли корректировать старший полубайт,
;если да - корректируем
@@1:
cmp al,39h
ja @@3
;Сохраним значение по адресу ES:EDI
@@2:
stosw
ret
.Корректируем значение старшего полубайта
@@3:
sub al, 30h
add al, "A"-10
jmp @@2
[Корректируем значение младшего полубайта
@@4:
sub ah, 30h
add ah, "A"-10
jmp @@1
HexWriteS endp
[Процедура перевода слова в ASCII-формат для печати.
[Значение, находящееся в регистре АХ, будет записано
;в ASCII-формате по адресу ES:EDI
HexWrite16 proc
;Сохраним младший байт из стека
push ax
;3агрузим старший байт в регистр А1_
xchg al,ah
.Переведем старший байт в ASCII-формат
call HexWrite8
; Восстановим младший байт из стека
pop ax
Переведем младший байт в ASCII-формат
call HexWrite8