Вот что советует автор: Код (Text): ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ; ПРОЦ, МОДЕЛЬ, ОПЦИИ, ИНКЛУДЫ, БИБЛИОТЕКИ ИМПОРТА ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .386 .model flat,stdcall option casemap:none includelib kernel32.lib SetConsoleTitleA PROTO :DWORD GetStdHandle PROTO :DWORD WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD ExitProcess PROTO :DWORD Sleep PROTO :DWORD ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ; СЕКЦИЯ КОНСТАНТ ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .const sConsoleTitle db 'My First Console Application',0 sWriteText db 'hEILo, Wo(R)LD!!' ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ; СЕКЦИЯ КОДА ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .code ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ; Самая Главная Процедура ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Main PROC LOCAL hStdout :DWORD ;(1) ;титл консоли push offset sConsoleTitle ;(2) call SetConsoleTitleA ;получаем хэндл вывода ;(3) push -11 call GetStdHandle mov hStdout,EAX ;выводим HELLO, WORLD! ;(4) push 0 push 0 push 16d push offset sWriteText push hStdout call WriteConsoleA ;задержка, чтобы полюбоваться ;(5) push 2000d call Sleep ;выход ;(6) push 0 call ExitProcess Main ENDP ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= end Main Вот что написал я: ;ПРОЦ, МОДЕЛЬ, ОПЦИИ, ИНКЛУДЫ, БИБЛИОТЕКИ ;============================== .386 .model flat, stdcall option casemap: none includelib kernel32.lib SetConsoleTitleA PROTO: DWORD GetStdHandle PROTO: DWORD WriteConsoleA PROTO: DWORD, :DWORD, :DWORD, :DWORD, :DWORD ExitProcess PROTO: DWORD Sleep PROTO: DWORD ;============================== ;Секция констант ;============================== .const sConsoleTitle db 'Мое первое косольное приложение', 0 sWriteText db 'Привет, Чуваки!' ;============================== ;Секция кода ;============================== .code ;============================== ;Самая главная процедура ;============================== Main proc local hstdout :dword ;титл консоли push offset sconsoletitle call setconsoletitlea ;получаем хэндл вывода push -11 call getstdhandle mov hstdout,eax ;выводим привет чуваки push 0 push 0 push 16d push offset swritetext push hstdout call writeconsolea ;задержка, чтобы полюбоваться push 2000d call sleep ;выход push 0 call exitprocess main endp ;============================== end main Масм говорит: несогласованное блочное вложение, что делать?
rain slow CyberManiac Уважаемые, а кажется все дело в том, что масм критически относится к регистру команд. Я специально (для себя) решил проверить так это или нет, вот подрочился и выяснил. А то ведь никто не говорит. Без нолика привет чуваки заканчивалась буквой "d". после нолика появился "!". Такие вот дела.
Вот это говорит: option casemap:none. Привыкаем к справке: Здесь передаётся не ASCIIZ, а просто буфер, поэтому необходимо указывать его размер: Код (Text): sConsole db 'Мое первое косольное приложение' ; строка nConsole = $ - sConsoleTitle ; размер строки szTitle db 'Hello, world',0 ... invoke SetConsoleTitleA,addr szTitle ; тут ASCIIZ invoke WriteConsoleA,[hStdout],addr sConsole,nConsole,0,0 ; тут просто строка
IceStudent Большое спасибо, как раз только что об этом прочитал на сайте Олега Калашникова Ассемблер, это просто. Раз уж Вы все такие умные, то хотел спросить, что такое (по русски и на пальцах): Handle? Консоль? А то я что только не читаю, ни хрена не понимаю. Пробовал читать книгу Юрова Ассемблер, такое впечатление, что автор тащится от самого себя и где то на последней странице достигнет оргазма. Читаю что нибудь из интернета, такое впечатление, что авторы пишут.. пишут.. а потом им все это надоедает и они бросают. А смотрю на мужиков на форуме, все делятся какими то достижениями... а что все собственно делают?
Он учит ассемблеру, а не Windows или DOS. Меня по началу тоже смутило это, но опыт с WinAPI уже был, да и материала по последнему хватало. Если хочешь именно Windows+Asm - это Iczelion, хотя у него стиль очень уж си-подобен. А по терминам - пусть кто-нибудь другой объяснит, у кого язык подвешен
OFFSIDE У меня он в твердом переплете, сантиметров пять толщиной.... хотя тут (в нем есть какие то ссылки) не.. фигня всякая.
Пазолито Нужно хотя бы одну книжку до конца дочитать, а не придираться к авторскому стилю. Когда поумнеешь, если желание опустить Юрова и др. не пропадёт, сможешь пожаловаться в разделе WASM.BOOKS. Сам себя не похвалишь - никто не похвалит
IceStudent Скажи, пожалуйста, а в чем разница между kernel32.inc и kernel32.lib. Я так и не понял. с ув. П
IceStudent Да вот еще, у меня в масме в папке инклуд всяких инклудов дофига, а в папке либ ни чего нет, а сейчас для следующего примера нужен очередной user32.lib. Где их вообще взять, на будущее? С ув. П.