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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2013, 18:41   #1
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
Лампочка работа со структурами данных

Здравствуйте. Я недавно начал изучать ассемблер и столкнулся с проблемой, при работе со структурами данных,а именно: при попытке задать полям данных некоторой структуры некоторые значения и перемножить их, компилятор начал выдавать ошибки. не могу понять в чём проблема
Вот мой код:
PHP код:
.386

.model flat

extrn ExitProcess
extrn MessageBoxA
extrn wsprintfA

NORMAL STRUC
dword1 dw 
?
dword2 dw ?
NORMAL ENDS
.data
msg NORMAL 
<>
Ttl db "Прога №2",0h
format db 
"%d",0h
result db 128 dup 
(?)

.
code
start
:
mov [msg.dword1], 3
mov 
[msg.dword2], 2
mov eax
, [msg.dword1]
mov ebx, [msg.dword2]
mul ebx
cdq
  push eax
  push offset format
  push offset result
  call wsprintfA
    push 0
    push offset Ttl
    push offset result
    push 0
    call MessageBoxA
      push 0
      call ExitProcess
end start 
Компилятор ругается на строчки 23 и 24 (текст ошибки смотрите на скрине), когда меняю там mov на lea компилятор молчит, но прога запускается и виснет.
Изображения
Тип файла: jpg спа4.jpg (28.5 Кб, 133 просмотров)
Klod вне форума Ответить с цитированием
Старый 25.02.2013, 18:48   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Переменные - 2 байта, eax - 4. Либо сделайте переменные равными двойному слову, либо используйте movzx (movsx).
vadimych вне форума Ответить с цитированием
Старый 25.02.2013, 18:55   #3
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Сделал переменные dword1 и dword2 с директивой dd, компилятор перестал ругаться но прога виснет
Klod вне форума Ответить с цитированием
Старый 25.02.2013, 19:15   #4
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
Восклицание

Всё я разобрался почему виснет. Из-за того, что когда в самом начале кода я инициализировал функции я директиву PROC не добавил.
Т.е было
PHP код:
.386 

.model flat 

extrn ExitProcess 
extrn MessageBoxA 
extrn wsprintfA 
..................... 
А надо
я
PHP код:
.386 

.model flat 

extrn ExitProcess
:PROC 
extrn MessageBoxA
:PROC 
extrn wsprintfA
:PROC
..................... 
Klod вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели, работа с динамическими структурами данных hitman1316 Паскаль, Turbo Pascal, PascalABC.NET 7 11.12.2012 09:18
Работа с динамическими структурами данных (Delphi) morkow_mr Фриланс 7 20.09.2012 18:28
РАБОТА С ДИНАМИЧЕСКИМИ СТРУКТУРАМИ ДАННЫХ keyonex Помощь студентам 6 12.12.2011 19:22
Работа с файлами и структурами данных. Мусюська Помощь студентам 2 01.06.2011 13:09