всем привет начал изучать асм. толко вот возникли проблемы на начале проблема у меня стоит windows 7 nasm как я понял 64 битный ибо система 64 бинтная создаю ехе -> nasm -f bin -о hello.ехе hello.asm сама прога создаётся толко запустит неудаётся так как надо 32 или 64 версия фаила как создать эту 32 битную версию низнаю может както в самом кода я читал что по умолчаню в нормалном режыме создаются 16 битные а в защищёном 32 вот кода проги: я делаю это по книге Марек Ассамблер на Примерах глава программы под dos SECTION .text ;Эта программа выводит на экран текст "Hello, World!' ;конец строки {EOL - End Of Line) и завершает работу org 0x100 mov ah,0x9 mov dx,hello int 0x21 mov ah,0x4C mov al,0 int 0x21 SECTION .data hello DB "Hello,World!",0xd,0xa,'$' ;конец программы
Достаточно сделать ее 32-битной, написав на 32-битном ассемблере под Windows, а не под дос. Тогда они будет работать под 32-битными и 64-битными виндами.
ну это и так понятно разве nasm не 32 бинтыйи :/ там наверное для компилации нужа какаето другая команда .. в книге примеры пошли сперва на дос потом под windows но мине надоело читать сухои матерял без примероф нелзя никак запустить DOS~пpилoжeния 16бит в среде Windows 32/46бит ?
sorry незаметил ! , спасибо !! работает cкачал DosBoх патом надо установить папку стоит в мануале как ну и запустил com фаил почемуто ехе нешли из под дос и ешё вапрос что значит это ,0xd,0xa,'$' в конце Hello World ?
Это я, как ни странно, понимаю. Я не понимаю, зачем он там нужен, какую функцию несет. Для полноты картины:
{Swap pointers} procedure XChg(var Critical, Normal); assembler; asm mov ecx, [edx] xchg [eax], ecx mov [edx], ecx end; Что делает эта функция? Переодически 2-я строчка выдает "Access Violation"
считай что дельфийским методом будет так: var a:word begin a:=Normal; Normal:=Critical; Critical:=a; просто пример обмена указателями на встроенном ассемблере.
Так то на самом деле не пример - cobain2k использует в своем TICQClient в модуле по работе с сокетами...