Вот в чем суть вопроса - у меня в стеке сопроцесора есть число ,например,71262427,как мне его перевести в регистры общего назначения?а потом и в текст
что нить типа Код (Text): push eax fistp dword [esp] pop eax ну а в текст батенька ишем - тема не раз подымалась
Спасибо получилось..А вот с текстом пробелммы -в факах надыбал ссылочки на темы в форуме но они либо устарели либо стерты...
Black9_byte упрощенно так: -делиш в цикле на основание системы в которой надо, -остатки от деления переводиш в аски например так: Код (Text): cmp al, 0Ah sbb al, 69h das -записываеш остаток переведенный в аски в строку -когда в цикле получиш ноль выводиш строку задом на перед и все=)))
Вот перевод в хексы: Код (Text): HexToStr proc Buff:dword,Numm:dword ;Конвертит число в хекс-строку ;в EAX возвращает длинну скопированной ;строки local @@Buffer:byte:8 pushad pushfd mov ebx,Numm bswap ebx push 4 pop ecx lea edi,@@Buffer push edi @@Next_Byte: mov al,bl mov ah,al shr al,4 add al,90h daa adc al,40h daa stosb mov al,ah and al,0Fh add al,90h daa adc al,40h daa stosb shr ebx,8 loop @@Next_Byte pop edi mov al,'0' push 8 pop ecx bt Status,0 jc @@No_Scasb rep scasb dec edi inc ecx @@No_Scasb: mov [esp+1Ch+4],ecx mov esi,edi mov edi,Buff rep movsb xor al,al stosb popfd popad ret HexToStr endp Вот в десятичные: Код (Text): DecToStr proc Buf1:dword,Num1:dword ;Конвертит число в дец-строку ;в EAX возвращает длинну скопированной ;строки local @@Buffer:byte:10,@@Number:dword,@@Buffer1:byte:20 pushad pushfd mov eax,Num1 lea ebx,@@Number mov [ebx],eax lea esi,@@Buffer fild 4 ptr [ebx] fbstp 10 ptr [esi] lea edi,@@Buffer1 push 10 pop ecx push edi add esi,9 @@Next_Convert: std lodsb mov ah,al shr al,4 or al,30h cld stosb mov al,ah and al,0Fh or al,30h stosb loop @@Next_Convert pop edi mov al,'0' push 20 pop ecx bt Status,1 jc @@No_Scasb rep scasb dec edi inc ecx @@No_Scasb: mov [esp+1Ch+4],ecx mov esi,edi mov edi,Buf1 rep movsb xor al,al stosb popfd popad ret DecToStr endp
Да, они скомпилены на TASM'е. Для успешной компиляции на MASM'е тебе изменить всего пару вещей - MASM'ское описание процедур и локальных переменных плюс заменить выражения типа "fild 4 ptr [ebx]" на "fild dword ptr [ebx]". Цифра в такой записи обозначает размер операнда работы с памятью. 1 = byte, 2 - word, 4 - dword, 8 - qword, 10 - tbyte. А сам код менять не надо.
tasm пытается есть всё, что ест масм, но это зачастую оканчивается несварением Потом ещё насм имеет ключик для подражания тасму, но с кучей ограничений. А фасм вообще через макросы всё что угодно кушает. Поэтому так сразу и не скажешь на чём этот код написан.