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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2009, 21:06   #1
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию assembler x86-64

assembler x86-64 имеет возможность создавать 16, 32 и 64 битные программы. Выходной формат: двоичные или объектные COFF файлы. Ассемблер поддерживает простые и системные инструкции, инструкции математического сопроцессора, а также технологии: MMX, 3DNow!, SSE1, SSE2, SSE3, SSE4A, SSE4.1, SSE4.2. Имеет высокую скорость компиляции.
скачать
DEADHUNT вне форума Ответить с цитированием
Старый 14.02.2009, 23:22   #2
ASSEMBLER
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 27
По умолчанию

Хм и как же сей продукт заставить 64 разрядные программы выдавать?
Программы на заказ Delphi, Pascal, С++, Assembler e-mail: greatrock@mail.ru
<--Если я вам помог не забываем жать на весы
ASSEMBLER вне форума Ответить с цитированием
Старый 14.02.2009, 23:42   #3
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию

DDOS атака была, сейчас сайт работает.
чтобы создавать 64-битные программы есть типичное ключевое слово USE64
DEADHUNT вне форума Ответить с цитированием
Старый 14.02.2009, 23:46   #4
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию

usage: asm [options] input output
options:
/BITS16 generate 16-bit code
/BITS32 generate 32-bit code
/BITS64 generate 64-bit code
/COFF generate COFF
/INC path add include path
/NOLOGO suppress startup banner
/HELP or /? display this message
DEADHUNT вне форума Ответить с цитированием
Старый 15.02.2009, 00:07   #5
ASSEMBLER
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 27
По умолчанию

Что то я всё равно не пойму каким образом следует сегментацию указать, он не смотря ни на что безо всяких как ему кажется проблем выплёвывает мне файлы с непотребными заголовками
Программы на заказ Delphi, Pascal, С++, Assembler e-mail: greatrock@mail.ru
<--Если я вам помог не забываем жать на весы
ASSEMBLER вне форума Ответить с цитированием
Старый 15.02.2009, 00:15   #6
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию

Цитата:
Сообщение от ASSEMBLER Посмотреть сообщение
Что то я всё равно не пойму каким образом следует сегментацию указать, он не смотря ни на что безо всяких как ему кажется проблем выплёвывает мне файлы с непотребными заголовками
приведи код, а то что-то не слишком понятно про какие ты сегменты. создание секций доступно только при создание *.OBJ (/COFF). синтаксис не как у MASM/TASM а такой же как в FASM/NASM
DEADHUNT вне форума Ответить с цитированием
Старый 15.02.2009, 00:47   #7
ASSEMBLER
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 27
По умолчанию

Ну хотя бы вот этот, с насмовским синтаксисом:
Код:
SECTION .data 
msg: db "Hello World",0 

SECTION .text 
global _start 
_start: 
mov eax,3
mov ebx,2
add eax,ebx
ret
Можешь сам скинуть пример кода для 32 или 64 который адекватно компилируется
Программы на заказ Delphi, Pascal, С++, Assembler e-mail: greatrock@mail.ru
<--Если я вам помог не забываем жать на весы
ASSEMBLER вне форума Ответить с цитированием
Старый 15.02.2009, 02:27   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Может нужно:
Код:
"Hello World!$"
Хотя это в TASM, а других я не знаю...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 15.02.2009, 11:00   #9
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию

Цитата:
Сообщение от ASSEMBLER Посмотреть сообщение
Ну хотя бы вот этот, с насмовским синтаксисом:
Код:
SECTION .data 
msg: db "Hello World",0 

SECTION .text 
global _start 
_start: 
mov eax,3
mov ebx,2
add eax,ebx
ret
Можешь сам скинуть пример кода для 32 или 64 который адекватно компилируется
Код:
public _start 
_start: 
mov eax,3
mov ebx,2
add eax,ebx
ret
msg: db "Hello World",0
или
Код:
codeseg
public _start 
_start: 
mov eax,3
mov ebx,2
add eax,ebx
ret
dataseg
msg: db "Hello World",0
многие директивы (org, public, extrn, times, dup, ....) имеют такой же синтаксис как в FASM. и как я понял это объектный файл то есть то есть ассемблер должен быть запущен с директивой /COFF
DEADHUNT вне форума Ответить с цитированием
Старый 15.02.2009, 11:04   #10
DEADHUNT
Пользователь
 
Регистрация: 23.10.2008
Сообщений: 48
По умолчанию

а теперь примеры
Код:
;
; feenv.asm
;
; Copyright (c) DevelSoftware. All right reserved.
;

; int __cdecl fegetenv(fenv_t * envp);
; int __cdecl feholdexcept(fenv_t * envp);
; int __cdecl fesetenv(const fenv_t * envp);
; int __cdecl feupdateenv(const fenv_t * envp);

public _fegetenv
public _feholdexcept
public _fesetenv
public _feupdateenv

_fegetenv:
ifdef _BITS64
	mov rax, [rsp + 8]
	fstenv [rax]
else
	mov eax, [esp + 4]
	fstenv [eax]
endif
	xor eax, eax
	ret
	
_feholdexcept:
ifdef _BITS64
	mov rax, [rsp + 8]
	fstenv [rax]
	fnclex
	sub rsp, 8
	fstcw [rsp]
	or byte [rsp], 0x3f
	fldcw [rsp]
	add rsp, 8
else
	mov eax, [esp + 4]
	fstenv [eax]
	fnclex
	sub esp, 4
	fstcw [esp]
	or byte [esp], 0x3f
	fldcw [esp]
	add esp, 4
endif
	xor eax, eax
	ret
	
_fesetenv:
ifdef _BITS64
	mov rax, [rsp + 8]
	fldenv [rax]
else
	mov eax, [esp + 4]
	fldenv [eax]
endif
	xor eax, eax
	ret
	
_feupdateenv:
	fstsw ax
	and ax, 0xff
ifdef _BITS64
	mov rax, [rsp + 8]
	mov [rax + 4], ax
	fldenv [rax]
else
	mov eax, [esp + 4]
	mov [eax + 4], ax
	fldenv [eax]
endif
	xor eax, eax
	ret
Код:
;
; _lldiv.asm
;
; Copyright (c) DevelSoftware. All right reserved.
;

public __lldiv

__lldiv:
	push ebx ; Save EBX as per calling convention.
	push esi ; Save ESI as per calling convention.
	push edi ; Save EDI as per calling convention.
	mov ecx, [esp+28] ; divisor_hi
	mov ebx, [esp+24] ; divisor_lo
	mov edx, [esp+20] ; dividend_hi
	mov eax, [esp+16] ; dividend_lo
	mov esi, ecx ; divisor_hi
	xor esi, edx ; divisor_hi ^ dividend_hi
	sar esi, 31 ; (quotient < 0) ? -1 : 0
	mov edi, edx ; dividend_hi
	sar edi, 31 ; (dividend < 0) ? -1 : 0
	xor eax, edi ; If (dividend < 0),
	xor edx, edi ; compute 1's complement of dividend.
	sub eax, edi ; If (dividend < 0),
	sbb edx, edi ; compute 2's complement of dividend.
	mov edi, ecx ; divisor_hi
	sar edi, 31 ; (divisor < 0) ? -1 : 0
	xor ebx, edi ; If (divisor < 0),
	xor ecx, edi ; compute 1's complement of divisor.
	sub ebx, edi ; If (divisor < 0),
	sbb ecx, edi ; compute 2's complement of divisor.
	jnz big_divisor ; divisor > 2^32 - 1
	cmp edx, ebx ; Only one division needed (ECX = 0)?
	jae two_divs ; Need two divisions.
	div ebx ; EAX = quotient_lo
	mov edx, ecx ; EDX = quotient_hi = 0 (quotient in EDX:EAX)
	xor eax, esi ; If (quotient < 0),
	xor edx, esi ; compute 1's complement of result.
	sub eax, esi ; If (quotient < 0),
	sbb edx, esi ; compute 2's complement of result.
	pop edi ; Restore EDI as per calling convention.
	pop esi ; Restore ESI as per calling convention.
	pop ebx ; Restore EBX as per calling convention.
	ret 16; Done, return to caller.
two_divs:
	mov ecx, eax ; Save dividend_lo in ECX.
	mov eax, edx ; Get dividend_hi.
	xor edx, edx ; Zero-extend it into EDX:EAX.
	div ebx ; quotient_hi in EAX
	xchg eax, ecx ; ECX = quotient_hi, EAX = dividend_lo
	div ebx ; EAX = quotient_lo
	mov edx, ecx ; EDX = quotient_hi (quotient in EDX:EAX)
	jmp make_sign ; Make quotient signed.
big_divisor:
	sub esp, 12 ; Create three local variables.
	mov [esp], eax ; dividend_lo
	mov [esp+4], ebx ; divisor_lo
	mov [esp+8], edx ; dividend_hi
	mov edi, ecx ; Save divisor_hi.
	shr edx, 1 ; Shift both
	rcr eax, 1 ; divisor and
	ror edi, 1 ; and dividend
	rcr ebx, 1 ; right by 1 bit.
	bsr ecx, ecx ; ECX = number of remaining shifts
	shrd ebx, edi, cl ; Scale down divisor and
	shrd eax, edx, cl ; dividend such that divisor is
	shr edx, cl ; less than 2^32 (that is, fits in EBX).
	rol edi, 1 ; Restore original divisor_hi.
	div ebx ; Compute quotient.
	mov ebx, [esp] ; dividend_lo
	mov ecx, eax ; Save quotient.
	imul edi, eax ; quotient * divisor high word (low only)
	mul dword [esp+4] ; quotient * divisor low word
	add edx, edi ; EDX:EAX = quotient * divisor
	sub ebx, eax ; dividend_lo - (quot.*divisor)_lo
	mov eax, ecx ; Get quotient.
	mov ecx, [esp+8] ; dividend_hi
	sbb ecx, edx ; Subtract (divisor * quot.) from dividend
	sbb eax, 0 ; Adjust quotient if remainder is negative.
	xor edx, edx ; Clear high word of quotient.
	add esp, 12 ; Remove local variables.
make_sign:
	xor eax, esi ; If (quotient < 0),
	xor edx, esi ; compute 1's complement of result.
	sub eax, esi ; If (quotient < 0),
	sbb edx, esi ; compute 2's complement of result.
	pop edi ; Restore EDI as per calling convention.
	pop esi ; Restore ESI as per calling convention.
	pop ebx ; Restore EBX as per calling convention.
	ret 16; Done, return to caller.
DEADHUNT вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разрядность ОСи x86/x64 Veiron Win Api 11 13.12.2010 17:26
USB driver для x86 Family Vladislav Компьютерное железо 0 29.04.2008 08:08
Assembler oleh Помощь студентам 2 24.04.2008 19:45