|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 14, 2004 09:18:33 Подскажите пожалуйста как в MASM'e вывести значение регистра либо локальной переменной в окне. Заранее спасибо. |
|
|
Дата: Янв 14, 2004 09:36:51 Поиск по форуму HEX2ASCII |
|
|
Дата: Янв 14, 2004 10:57:31 · Поправил: Gromozeka Нашел.Но там же ошибка, а как ее исправить я не знаю. |
|
|
Дата: Янв 14, 2004 12:39:27 Gromozeka Ну ты там и спроси, продолжи топик, я не помню что там... |
|
|
Дата: Янв 14, 2004 13:47:55 · Поправил: Asterix Самый простой вариант использовать wsprintf .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .DATA szBuff db 10 dup (0) format db "%08lX",0 .CODE start: mov eax, 012ABCDEFh ; !!! переводим сразу DWORD !!! push eax push OFFSET format push OFFSET szBuff call wsprintf add esp, 00Ch xor ecx, ecx invoke MessageBox, ecx, OFFSET szBuff, ecx, ecx invoke ExitProcess, ecx end start |
|
|
Дата: Янв 14, 2004 17:57:52 Вот так тоже можно сконвертить: ESI - буфер, EAX - HEX число Hex2Str proc mov ecx, 8 ; 8 hex digits push eax @@: mov [ESP], eax and eax, 0Fh cmp al, 10 sbb al, 69h das mov [esi+ecx], al mov eax,[ESP] shr eax, 4 dec ecx jnz @b pop eax ; restore stack ret Hex2Str endp Тут можно размер немного сократить размер, если внести push/pop в тело цикла. Тогда mov [ESP] убрать |
|
|
Дата: Янв 14, 2004 18:24:14 Gromozeka Нету там никакой ошибки. Ещё можно посмотреть исходник PrintHex, которая в отладочной библиотеке by vkim. |
|
|
Дата: Янв 15, 2004 15:54:21 Если нужно выводить в десятичном формате, могу предложить свой код: ;******************************************************* ; ПРОЦЕДУРА ПРЕОБРАЗОВАНИЯ ЧИСЛОВОГО ЗНАЧЕНИЯ В СТРОКОВОЕ ; (DEC-ФОРМАТ) ;*******************************************************
_IntToStrA proc Value:dword, ;исходное значение
pStr:dword, ;адрес буфера вывода
ZeroNum:dword ;кол-во нулей для
;незаполненных разрядов
pushad
mov eax,Value
mov esi,pStr
mov ebx,10
xor ecx,ecx
;------ загоняем в стек, начиная с младших разрядов
.while eax
xor edx,edx
div ebx
or dl,30h
push edx
inc ecx
.endw
;------ заполняем нулевыми символами
.while ecx<ZeroNum
mov eax,30h
mov [esi],al
inc esi
dec ZeroNum
.endw
;------ читаем из стека в буфер
.while ecx
pop eax
mov [esi],al
inc esi
dec ecx
.endw
;------ ставим нулевой символ в конце строки
xor eax,eax
mov [esi],al
popad
ret
_IntToStrA endp |
|
|
Дата: Янв 16, 2004 01:40:36 · Поправил: prog Bin->Десятичный ASCII iBin- число которое надо преобразовать в ASCII pStr- куда положить zero-terminated ASCII возвращает кол-во цифр в ASCII(может пригодиться) Bin2Str proc iBin:dword,pStr:dword mov eax,iBin mov edi,pStr xor ecx,ecx mov ebx,10d @@: xor edx,edx ; Clear top div ebx ; Divide to get last digit as remainder add dl,"0" ; Convert to ASCII push edx ; Save on stack or eax,eax ; Quotient 0? loopnz @B ; No? Get another neg ecx ; Negate and save count mov edx,ecx @@: pop eax ; Get character stosb ; Store it loop @B xor eax,eax stosb mov eax,edx ; Return digit count ret Bin2Str endp это было написано неизвестным автором в 1987(!) году, правда, в 16-ти битном виде. |
|
|
Дата: Янв 16, 2004 02:45:27 · Поправил: merlin Две веши: 1) В-87, не было 32 битных регов (точнее были но только начали появлятса, и поэтому ими ещё никто не пользовался). 2) В-87 если бы кто то использовал div чтобы делить на константу (получение остатка не являетса оправданием) его бы сразу осудили как полным дураком который не умеет програмировать на асме. Очен похожый алгоритм встретился в книге Тома Свана по асму. Только там он написан по умнее чем здесь (база ужэ не константа). |
|
|
Дата: Янв 16, 2004 11:40:05 · Поправил: prog merlin я и говорю- оригинал был 16 битный. дойду до дома, покажу исходник. в 90 у нас на заводе появился первый "Shnaider" IBM PC AT так сказать какбы mini-tower крутая была вещь. Особенно его цветной монитор 16-ти цветный :)) он радовал глаз, уставший от черно-рыжих мониторов XT. На нем можно было раскрашивать ячейки SuperCalc-а разными цветами и радоваться этому :)) Но в основном мы его использовали для игр. :) Как там ее... SpaceQuest |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071 |