Вопрос № 31609: Здравствуйте уважаемые эксперты, у меня такой вопрос:
как в программах написанных на ассемблере объявлять переменные и по каким правилам ими можно манипулировать? Например Паскале есть раздел VAR, в котором объявляютя перемынные, если-ли подобный...
Вопрос № 31.609
Здравствуйте уважаемые эксперты, у меня такой вопрос:
как в программах написанных на ассемблере объявлять переменные и по каким правилам ими можно манипулировать? Например Паскале есть раздел VAR, в котором объявляютя перемынные, если-ли подобный раздел в ассемблере, если есть где? Да и еще, нужно-ли при объявлении переменных в ассемблере, указывать тип данных, к которому принадлежит данная переменна? Если да, то какие типы существуют применительно к ассемблеру?
Заранее благодарю за полный, исчерпывающий ответ :)
Отправлен: 16.12.2005, 12:57
Вопрос задал: Goff (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sager
Здравствуйте, Goff!
Переменные на ассемблере можно объявлять где угодно и когда угодно. В exe-программах правда предусмотрел раздел(сегмент) .data,где их можно объявлять. Но это необязательно. Правда в виндовс по умолчанию нельзя писать в сегмент кода, поэтому,если ты объявишь ее там, а не в data то программа завершится с ошибкой. Чтобы это обойти нужно просто указать линкеру в опциях, чтобы он разрешил писать в сегмент кода. Переменные в ассемблере объявляются так(и типом подобно паскалевским здесь нету(типа знаковые, булевские
множества, array(массив в ассемблере сделать можно, но типа такого как в паскале нету))):
datab db 0 - переменная размером 1 байт
dataw dw 1234 - 2 байта
datad dd 12345678 - 4 байта
dataf df 0 - 6 байт
dataq dq 0 - 8 байт
datat dt 0 - 10 байт
mas db 512 dup(2) - массив из 512 двоек размером по байту(т.е. на каждую двойку отводится 1 байт)
mas2 dw 512 dup(2) - массив из 512 вдоек размером по 2 байта(т.е. на каждую двойку уже отводится по 2 байта)
strDOS db "any string$" - Для дос строка должна заканчиваться баксом
strWIN db "any string",0 - для виндовс - нулем
str2 db "any string",10,13,"new stroka$" - выводит строку до 10,13(перевод каретки и строки) и с новой строки выводит new stroka
asd db 5,1,2,4,65,3 - тоже своего рода массив
jmp_offset dw offset next,offset next1 - массив из смещений
Вроде бы все...
Ответ отправил: Sager (статус: Студент)
Отправлен: 16.12.2005, 19:50 Оценка за ответ: 5 Комментарий оценки: Спасибо за "конеретный" понятливый ответ :)