![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 17.11.2012
Сообщений: 3
|
![]()
Добрый день, уважаемые. Хочу переделать программу которая работала на 32 битной ОС, под 64 битную. (про приемственность версий знаю) я хочу именно узнать различия программирования под разные ОС. Пишу на FASM. Программа генерирует случайное число методом Парка-Миллера. Вроде все делал по книжке, но программа не запускается на windows x64. Компилируется, но не запускается exe файл. подскажите, что не так, в чем проблема?
Книга - Аблязов Р.З. - Программирование на ассемблере на платформе x86-64 - 2011 Текст на FASM приведен ниже. Код HTML:
format PE64 GUI 4.0 entry start include 'C:\FASM\include\win64a.inc' ; Сегмент данных section '.data' data readable writeable caption db 'Случайное число: ',0 fmt db '%u',0 buffer rb 12 random_seed dd 0 ; Переменная для хранения промежуточных результатов ; работы генератора ; Сегмент кода section '.code' code readable executable start: ; Инициализация генератора stdcall WRandomInit ; Получить случайное число в интервале 0...99999 stdcall WRandom ; EAX=случайное число ; Получить случайное число в интервале min...max (включая границы) stdcall WIRandom,1,10000,1 ; EAX=случайное число в интервале от 1 до 20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; тут должен быть вывод результата invoke wsprintf,buffer,'%u',eax invoke MessageBox,0,buffer,caption,MB_OK invoke ExitProcess,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--------------------------------------------- ; Park Miller random number algorithm c частичной факторизац ; Получить случайное число 0 ... 99999 ; stdcall WRandom ; на выходе EAX - случайное число ;I(j+1)=a*I(j)(mod m) ;a=7^5=16807, m=2^31-1=2147483647 ;--------------------------------------------- proc WRandom push rdx rcx mov eax,[random_seed] xor edx,edx mov ecx,12773 div ecx mov ecx,eax mov eax,16807 mul edx mov edx,ecx mov ecx,eax mov eax,2836 mul edx sub ecx,eax xor edx,edx mov eax,ecx mov [random_seed],ecx mov ecx,999999999 div ecx mov eax,edx pop rcx rdx ret endp ;--------------------------------------------- ; Получить случайное число в нужном интервале ; Требуется процедура WRandom ; stdcall WIRandom,min,max ; на выходе EAX - случайное число ;--------------------------------------------- proc WIRandom rmin:dword,rmax:dword,modrr:dword push rdx rcx mov ecx,[rmax] sub ecx,[rmin] inc ecx stdcall WRandom xor edx,edx div ecx mov eax,edx add eax,[rmin] ;push eax xor edx,edx xor ebx,ebx xor ecx,ecx mov ebx,eax mov ecx,[modrr];0003h metka: xor edx,edx div ecx xor eax,eax cmp edx,0 je exit inc ebx mov eax,ebx jmp metka exit: mov eax,ebx ;pop eax pop rcx rdx ret endp ;--------------------------------------------- ; Инициализация генератора случайных чисел ; stdcall WRandomInit ;--------------------------------------------- proc WRandomInit push rax rdx rdtsc xor eax,edx mov [random_seed],eax pop rdx rax ret endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' import kernel32,\ ExitProcess, 'ExitProcess' import user32,\ MessageBox,'MessageBoxA',\ wsprintf,'wsprintfA' |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
CrashOveride, я Вам ответил на другом форуме. Пользуйтесь Windbg, чтобы разобраться в своём коде, это будет полезнее, чем создавать одинаковые темы на всех форумах подряд.
Последний раз редактировалось vadimych; 29.04.2014 в 17:25. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа 32 битной програмки под 64 | Anton911 | Общие вопросы Delphi | 14 | 31.03.2013 18:53 |
SaveToFile в 32 битном приложении на 64 битной ОС. | XerSon | Общие вопросы Delphi | 15 | 28.12.2012 12:37 |
Программирование на Си в 64 битной системе | MrBrain | Общие вопросы C/C++ | 3 | 13.12.2011 10:22 |
Чайник с 64 битной системой | Руслан Сабиров | Свободное общение | 5 | 28.10.2011 14:18 |
RC6 на 32 битной платформе. | Ghost of Night | Общие вопросы Delphi | 0 | 02.07.2011 01:14 |