|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 16, 2003 20:28:07 Хочу алгоритм(ы) перевода HEX2ASCII, можно исходник(и). Для затравки, читаем у Зубкова: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - Например: пусть описано макроопределение hex2ascii, переводящее шестнадцатеричное число, находящееся в регистре AL, в ASCII-код соответствующей шестнадцатеричной цифры: hex2ascii macro
cmp al,10
sbb al,69h
das
endm
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - Гениально, но не работает :-) Или я вообще ничего не понимаю %) |
|
|
Дата: Ноя 16, 2003 21:18:12 Для затравки, читаем у Зубкова Лентяй. Для затравки читаем у Рендалла Хайда. Зубков стрындил половину сорцов оттуда. Втихую. |
|
|
Дата: Ноя 16, 2003 22:26:12 · Поправил: Asterix volodya Посмотрел html версию Рендалла Хайда в сети, ты прав, действительно стоящая вещь, жалко что только на английском. |
|
|
Дата: Ноя 16, 2003 23:10:23 На сайте лежит pdf. Если будут сильные проблемы - пиши тогда, что ли :) |
|
|
Дата: Ноя 17, 2003 04:17:13 · Поправил: Asterix Раз никто ничего не предложил, то я написал свой вариант, уверен что это можно улучшить. aam_16 MACRO
db 0D4h,010h
ENDM
.data
Register dd 0
.code
start:
mov ax, 0AFh ; байт, который конвертируем, ну конечно WORD, но конвертируем то мы BYTE ;-)
aam_16
or ax, 3030h
.if al > 39h
add al, 07h
.endif
.if ah > 39h
add ah, 07h
.endif
xchg al, ah
mov WORD PTR [Register], ax
mov eax, OFFSET Register
xor ecx, ecx
invoke MessageBox, ecx, eax, ecx, ecx |
|
|
Дата: Ноя 17, 2003 14:04:50 [ Asterix: Гениально, но не работает :-) ] Да нет, работает. |
|
|
Дата: Ноя 17, 2003 19:25:43 · Поправил: Asterix Four-F Это как же? Вот, по порядку: xor eax, eax mov al, 0FFh ; конвертируем BYTE=FFh cmp al, 10 ; устанавливает флаги sbb al, 69h ; <--после этой команды eax=00000096 das ; <--после этой команды ничего не изменилось |
|
|
Дата: Ноя 18, 2003 00:45:23 · Поправил: Asterix [ Four-F: Да нет, работает.] Я понял что Зубков имел ввиду(!), вот такой код будет работать: aam_16 macro
db 0D4h,010h
endm
hex2ascii macro
cmp al,10
sbb al,69h
das
endm
.DATA
Register dd 0
.CODE
start:
mov al, 0AFh ; <--байт, который конвертируем
aam_16
hex2ascii
xchg al, ah
hex2ascii
mov WORD PTR [Register], ax
mov eax, OFFSET Register
xor ecx, ecx
invoke MessageBox, ecx, eax, ecx, ecx |
|
|
Дата: Ноя 18, 2003 00:58:44 proc check4bitsstate,lbyte ; enter mov eax,[lbyte] add eax,48 cmp eax,58 jl @F add eax,7 @@: return proc byteto4bits,lbyte ; Return eax,ecx enter mov eax,[lbyte] movzx eax,al mov ecx,eax and eax,11110000b shr eax,4 and ecx,1111b push eax stdcall check4bitsstate,ecx mov ecx,eax call check4bitsstate return |
|
|
Дата: Ноя 18, 2003 01:13:05 Последний вариант и думаю тему можно закрывать ;-) aam_16 macro
db 0D4h,010h
endm
.DATA
hex_table db "0123456789ABCDEF",0
Register dd 0
.CODE
start:
mov al, 0CFh
aam_16
mov ebx, OFFSET hex_table
xlatb
xchg al, ah
xlatb
mov WORD PTR [Register], ax |
|
|
Дата: Ноя 18, 2003 01:18:59 Songoku Используй кнопку CODE или пиши теги вручную [code][/code] |
|
|
Дата: Ноя 18, 2003 10:05:39 для subj входящее число должно быть меньше 0Fh! Пример: mov eax,1ABCDEF3h mov cx,041ch ;для 32 бит числа, 040Ch для 16 бит,0404h для 8 бит. loop1: push eax shr eax,cl and al,0Fh cmp al,10 sbb al,69h das int 29h pop eax sub cl,ch jnc loop1 |
|
|
Дата: Ноя 18, 2003 18:02:42 Вот нарыл в своих исходниках :) ; Рекурсивная ф-ция перевода HEX DWORD в ASCII ; Вход EAX - DWORD ; Выход [edx] - ASCII HexToStrDW: mov cx, '0h' mov [edx+9], cl mov [edx], ch inc edx push eax ror eax, 16 call RecHexToStrW pop eax RecHexToStrW: push eax ror eax, 8 call RecHexToStrB pop eax RecHexToStrB: push eax ror eax, 4 call RecHexToStrL pop eax RecHexToStrL: and al, 00001111b cmp al, 0ah jc NotAdd add al, 39;7 NotAdd: add al, 30h mov [edx], al inc edx ; ret |
|
|
Дата: Ноя 18, 2003 20:19:23 · Поправил: Quantum Asterix Я кому исходник UUPX высылал? Там реализован сабж для цепочки байт любой длины. |
|
|
Дата: Ноя 18, 2003 20:45:30 Quantum Я его смотрел, длина не проблема, решается простым циклом, просто я хотел ещё порыть на эту тему ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.082 |