Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2016, 17:10   #1
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию Помогите переписать под masm64

вот такая функция есть в проекте x32 в vs
Код:
int funct1(UINT param1, Pointer param2, int param3)
{
    int var1 = 123;
;                __asm
;	  	  mov eax, var1
;		  push param3
;		  push param2
;		  push param1
;		  push eax
;	 	  push aa
;		  mov edx, esp
;
;                 aa:
;		  add esp, 16;
}
как это переписать в отдельный myasm.asm файл, чтобы добавить в x64 проект.

Последний раз редактировалось flesyyykkk; 26.05.2016 в 17:22.
flesyyykkk вне форума Ответить с цитированием
Старый 26.05.2016, 17:33   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

А что делает эта функция ты сможешь объяснить? Зачем она?
64-разрядные регистры начинаются на R, т.е. EAX это RAX и т.д.
https://ru.wikipedia.org/wiki/Регистр_процессора
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 26.05.2016, 18:25   #3
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию

Как дальше тело funct1 записать?
Код:
.data
var1 dd 123

;code section
.code

funct1 PROC param1, param2, param3 : QWORD
  mov rax, 123
  ;       push param3
  ;		  push param2
  ;		  push param1
  ;		  push eax
  ;	 	  push aa
  ;		  mov edx, esp
  ;
  ;                 aa:
  ;		  add esp, 16;
  ret
funct1 ENDP

end
Main.cpp так выглядит:
Код:
extern "C"
{
	void funct1( ? ? ? );
}

int main()
{
	funct1();
}

Последний раз редактировалось flesyyykkk; 26.05.2016 в 18:40.
flesyyykkk вне форума Ответить с цитированием
Старый 26.05.2016, 21:58   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

функция - один сплошной непрерывный комент, а если комент убрать то и вовсе бред.


Код:
funct1 PROC
   MOV rax, 123

   PUSH r8
   PUSH rdx
   PUSH rcx
   PUSH rax
   PUSH aa

   MOV rdx, rsp

aa:
   ADD rsp, 40
   RET
funct1 ENDP
f.hump вне форума Ответить с цитированием
Старый 27.05.2016, 00:03   #5
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
функция - один сплошной непрерывный комент, а если комент убрать то и вовсе бред.


Код:
funct1 PROC
   MOV rax, 123

   PUSH r8
   PUSH rdx
   PUSH rcx
   PUSH rax
   PUSH aa

   MOV rdx, rsp

aa:
   ADD rsp, 40
   RET
funct1 ENDP
Благодарю за помощь, знаю что строки закомментированы... на это не стоит обращать внимание.

main.cpp такой:
Код:
#include "windows.h"

extern "C"
{
	void funct1(INT64, POINTER_64_INT, INT64);
}

int main()
{
        //...
	funct1(0, NULL, 0);
}
1 параметр - обычный int, 2 - указатель на структуру, 3 - размер структуры

Последний раз редактировалось flesyyykkk; 27.05.2016 в 02:27.
flesyyykkk вне форума Ответить с цитированием
Старый 27.05.2016, 11:06   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

flesyyykkk,
Цитата:
1 параметр - обычный int, 2 - указатель на структуру, 3 - размер структуры
первый параметр должен быть передан через регистр RCX, указатель на структуру помещается в RDX, размер структуры в R8
Mikl___ вне форума Ответить с цитированием
Старый 27.05.2016, 15:00   #7
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
flesyyykkk,

первый параметр должен быть передан через регистр RCX, указатель на структуру помещается в RDX, размер структуры в R8
Спасибо. думаю вопрос исчерпан.

Последний раз редактировалось flesyyykkk; 27.05.2016 в 15:03.
flesyyykkk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать под 8086 Iceman_02 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 13.05.2012 14:05
[C++] Переписать под ввод из файла druger Помощь студентам 1 17.12.2011 15:55
переписать исходник под Delphi7 faraon1792 Фриланс 4 25.02.2011 14:12
Переписать исходник под Delphi7 faraon1792 Помощь студентам 1 22.02.2011 15:55