компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > Программирование

Ответ
 
LinkBack Опции темы Опции просмотра
Старый 25.10.2010, 21:07   #1
Пользователи
 
Регистрация: 25.10.2010
Сообщений: 43
По умолчанию

Доброго время суток! Я недавно начал изучать ассемблер, и столкнулся с проблемой: как создать окно. Вроде, сделал всё по книжке, но прога выдаёт ошыбку ничего не значащую ошыбку №0 :excl: . Помогите, please.




DinoAsm вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
25.10.2010, 21:07
Техник
реклама
По умолчанию

Старый 26.10.2010, 09:07   #2
V.I.P. Пользователи
 
Аватар для L@nken
 
Регистрация: 01.09.2006
Сообщений: 3,315
По умолчанию

Распознавание ошибок Ассемблером
Большинство Ассемблеров немедленно распознает наиболее распространенные ошибки, такие как:
Неопределенный код операции(обычно это неправильное написание или отсутствие двоеточия или метки);
Неопределенное имя (часто это неправильное написание или отсутствие определенного имени);
Неверный символ(например, 2 в двоичном числе или В в десятичном числе);
Неправильное значение (обычно это число, которое слишком велико для 8 или 16 разрядов);
Отсутствует операнд;
Двойное определение (одному и тому же имени присваиваются два различных значения);
Недопустимая метка (например, метка, предписанная псевдооперации, не допускающей метки);
Отсутствие метки (например, при псевдооперации EQU, для которой требуется метка).
Эти ошибки неприятны, но они легко исправимы. Единственная трудность возникает тогда, когда ошибка (такая, как отсутствие точки с запятой у строки с комментарием) приводит Ассемблер в “замешательство”, результатом чего является ряд бессмысленных сообщений об ошибках.
Существует, однако, много простых ошибок, которые Ассемблер не может распознать. Программисту следует иметь в виду, что его программа может содержать такие ошибки, даже если Ассемблер и не сообщил о них.
Типичны следующие примеры.
■ Пропущенные строки.
■ Пропущенные определения.
■ Ошибки в написании, когда запись сама по себе допустима.
■ Обозначение команд как комментариев.
■ Если в команде, которая работает с парой регистров, задается одинарный регистр.
■ Если вводится неправильная цифра, такая как Х в десятичном или шестнадцатеричном числе или 7 в двоичном числе.
В Ассемблере могут распознаваться только такие ошибки, которые предусмотрел его разработчик.
Программисты же часто способны делать ошибки, которые разработчик не мог и вообразить, такие ошибки возможно найти при проверке программ вручную строчка за строчкой.

Мне кажется, что Вы где-то неправильно написали операнд или же имя, проверте свой листинг ещё несколько раз.
L@nken вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 26.10.2010, 22:12   #3
Пользователи
 
Регистрация: 26.10.2010
Сообщений: 5
По умолчанию

Какая О.С.? Какой компилятор (masm, fasm, nasm и т.д.)? Исходник?
Что за книга?
lipJiF вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 27.10.2010, 11:00   #4
Пользователи
 
Регистрация: 25.10.2010
Сообщений: 43
По умолчанию

Цитата:
Какая О.С.? Какой компилятор (masm, fasm, nasm и т.д.)? Исходник?
Что за книга?
Компилятор - MASM V9.0.
Книга - "Ассемблер для Windows" В. Ю. Пирогова.
DinoAsm вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 27.10.2010, 20:56   #5
Пользователи
 
Регистрация: 26.10.2010
Сообщений: 5
По умолчанию

Исходник нужен. Без него сложно что-то сказать.
lipJiF вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 28.10.2010, 10:12   #6
Пользователи
 
Регистрация: 25.10.2010
Сообщений: 43
По умолчанию

Цитата:
Исходник нужен. Без него сложно что-то сказать.
Вот фрагмент исходника:
...
DATA SEGMENT
WndClsStruc WNDCLASS
LoadIconERR DB 'Помилка при загрузці іконки.',0
LoadCursERR DB 'Помилка при загрузці курсора.',0
wndTittle DB 'Окно',0
wndCls DB 'AsmWindow',0
hInst DD ?
message MSG
createStr CREATESTRUCT
clsERRmes DB 'Помилка створення класу №%lu',0
DB 10 dup (?)
wndCrERRmes DB 'Помилка створення вікна №%lu',0
DB 10 dup (?)
DATA ENDS
CODE SEGMENT
START:
mov WndClsStruc.style,CS_HREDRAW or CS_VREDRAW
mov WndClsStruc.lpfnWndProc,offset wndProc
mov WndClsStruc.cbClsExtra,0
mov WndClsStruc.cbWndExtra,0
push 0
call GetModuleHandleA@4
mov hInst,EAX
mov WndClsStruc.hInstance,EAX
push IDI_ASTERISK
push 0
call LoadIconA@8
test EAX,EAX
jne short W1
push MB_ICONEXCLAMATION
call MessageBeep@4
push MB_OK or MB_ICONERROR or MB_TOPMOST
push offset wndTittle
push offset LoadCursERR
push 0
call MessageBoxA@16
W1: mov WndClsStruc.hIcon,EAX
push IDC_ARROW
push 0
call LoadCursorA@8
test EAX,EAX
jne short W2
push MB_ICONEXCLAMATION
call MessageBeep@4
push MB_OK or MB_ICONERROR or MB_TOPMOST
push offset wndTittle
push offset LoadIconERR
push 0
call MessageBoxA@16
W2: mov WndClsStruc.hCursor,EAX
mov WndClsStruc.hbrBackground,COLOR_BACKGROUND
mov WndClsStruc.lpszMenuName,0
mov WndClsStruc.lpszClassName,offset wndCls
push offset WndClsStruc
call RegisterClassA@4
test EAX,EAX
je clsERR
push offset createStr;lpParam
mov EAX,DWORD PTR [ESP]
mov createStr.lpCreateParams,EAX
push hInst;hInstance
mov EAX,DWORD PTR [ESP]
mov createStr.hInstance,EAX
push 0;hMenu
mov EAX,DWORD PTR [ESP]
mov createStr.hMenu,EAX
push 0;hWndParent
mov EAX,DWORD PTR [ESP]
mov createStr.hWndParent,EAX
push 300;nHeight
mov EAX,DWORD PTR [ESP]
mov createStr.ly,EAX
push 500;nWidth
mov EAX,DWORD PTR [ESP]
mov createStr.lx,EAX
push CW_USEDEFAULT;y
mov EAX,DWORD PTR [ESP]
mov createStr.y,EAX
push CW_USEDEFAULT;x
mov EAX,DWORD PTR [ESP]
mov createStr.x,EAX
push WS_OVERLAPPEDWINDOW or WS_BORDER
mov EAX,DWORD PTR [ESP]
mov createStr.style,EAX
push offset wndTittle
mov EAX,DWORD PTR [ESP]
mov createStr.lpszName,EAX
push offset wndCls
mov EAX,DWORD PTR [ESP]
mov createStr.lpszClass,EAX
push 0
mov EAX,DWORD PTR [ESP]
mov createStr.ExStyle,EAX
call CreateWindowExA@48
test EAX,EAX
je short wndCrERR
push SW_SHOWNORMAL
push EAX
call ShowWindow@8
MSG_LOOP:
push 0
push 0
push 0
push offset message
call GetMessageA@16
test EAX,EAX
je short exit
push offset message
call TranslateMessage@4
push offset message
call DispatchMessageA@4
jmp short MSG_LOOP
wndCrERR:
call GetLastError@0
mov hInst,EAX
push offset hInst
push offset wndCrERRmes
push offset wndCrERRmes
call wvsprintfA@12
push MB_OK or MB_ICONERROR or MB_TOPMOST
push offset wndTittle
push offset wndCrERRmes
push 0
call MessageBoxA@16
exit: push 0
call ExitProcess@4
...
DinoAsm вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 13.02.2011, 09:00   #7
Пользователи
 
Регистрация: 25.10.2010
Сообщений: 43
По умолчанию

Все имена переменных при командах поставил в кавычки: []. И сразу заработало! :clap: Вопрос: как masm32 воспринимает имена переменных без кавычек? :wako:
DinoAsm вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 17:05. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2