Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение данных, определение данных до их использования 
:(
    Опции темы
Сisa
Дата 8.8.2014, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



В высокоуровневых языках переменная должна быть сначала определена, и только потом ею можно оперировать.
В АСМе наоборот? 

Или не играет роли в какой части программы определена переменная? А если переменная чуть дальше в программе меняет свое значение, и даже несколько раз, то какое тогда используется значение и каков порядок присвоения значений переменным?
Вопроса бы не возникло, если бы не:
Рудольф Марек (стр.99) пример:
Код

mov esi,array      ;загружаем в ESI начало массива
mov ebx,0           ;ЕВХ = О
mov eax,ebx       ;ЕАХ = О
again:
mov al,[esi]        ;загружаем в AL элемент массива
inc esi                 ;перемещаем указатель на след. элемент
add ebx,eax       ;ЕВХ = ЕВХ + ЕАХ
cmp a1,0            ;AL равен нулю?
jnz again            ;переходим к again, если AL не О
array db 1,2,3,4,5,6,7,8,0 ;инициализируем массив.
                          ;Сумма (ЕВХ) должна быть равна 36

(массив  array db 1,2,3,4,5,6,7,8,0   инициализирован после того как с ним уже должны быть произведены какие то действия)
Нельзя считать это опечаткой, потому что аналогичные примеры встречаются и в других текстах.

PM MAIL   Вверх
tzirechnoy
Дата 8.8.2014, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
В высокоуровневых языках переменная должна быть сначала определена, и только потом ею можно оперировать.


А мужыки-то не знают ©

Цитата
В АСМе наоборот? 


Не то, чтобы наоборот. В общем -- не так. Обычно.

Цитата
Или не играет роли в какой части программы определена переменная?


Кажэтся, мне вспоминаются какие-то ассэмблеры, которые по определению переменных (ну, т.е. там db, dw, dl) решали, скольки битная будет операцыя, если есть выбор.
Можэт, меня и глючит. В любом случае -- пишы суффиксы имён команд для определения битности операцый и будет всё равно.

А, да, ещё вспомнил -- в некоторых случаях, ну, для всяких call/jump, ассэмблер мог использовать short если адрес ему известен и находится рядом, и near/far (в зависимости от опцый компиляцыи) -- если нет. То есть некоторые мелкие отличия имеются.

[quote]А если переменная чуть дальше в программе меняет свое значение, и даже несколько раз, то какое тогда используется значение и каков порядок присвоения значений переменным?[quote]

Переменная меняет своё значение когда ей что-то присваивают (пишут в неё). В ассэмблере -- это вообще область памяти (DRAM), несколлько ячеек, с которыми ты что хочешь -- то и делаешь. Потому в переменной будет последнее записанное твоей программой значение.

Впрочем, возможно, ты спрашываешь об иницыализацыи переменных (как у тебя в примере). Иницыализацыя переменных описывается в объявлении переменных, а переменная без флага extern можэт быть объявлена только один раз -- при попытке её повторно объявить линковщик выругается. А с флагом extern её нельзя иницыализировать при компиляцыи.

PM MAIL   Вверх
Сisa
Дата 8.8.2014, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Это я не знаю ассэмблер :(

Как бы так сказать, ну чтобы Вы, tzirechnoy, поняли -
подозреваю что в Вашем сообщении есть ответ на мой вопрос, но поскольку я воистину только начинающий изучать asm, то естественно не все понял, или попросту не увидел ответ на мой вопрос. Может и меня  глючит.

near/far - сдается мне невпопад упомянуто.

Хотя нет, не все так сумрачно и кажется начинаю что то улавливать в Вашем сообщении - переменная без флага extern может быть объявлена только один раз. Так. Но опять же, объявлена переменная может только раз, но сам то вопрос остается:

Почему в высокоуровневых языках переменная должна быть сначала определена, и только потом ею можно оперировать, а в АСМе не так? 
Понятно, компиляция и все такое, но все же ...

Обычно. Не так. А как, и вот еще - а зачем по другому?

tzirechnoy спасибо за ответ. Придется таки мне читать дальше мануалы, пока же одни вопросы.  
И дались Вам эти мужыки ! Еще раз простите если зацепил в прошлый раз.
В.И. Даль: «Быть злопамятным, предаваться злопамятству — долго помнить зло или обиду, даже и ненамеренную, не забывать и не прощать, быть мстительным». 
Глубинная причина злопамятства – претензии ложного эго относительно слов и действий других людей, то есть гордыня. Когда, по мнению эго, другой человек ведет себя не так, как оно хотело бы, возникает повод для гнева, обиды, злобы и ненависти.
Аюрведа: раздражительность - это путь к болезни.
http://trubitsyn.com/node/67   п.51




Это сообщение отредактировал(а) Сisa - 8.8.2014, 18:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.