Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер
Регистрация

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 30.05.2019, 17:52   #1
vladimashev
 
Регистрация: 30.05.2019
Сообщений: 8
По умолчанию Директивы резервирования памяти

При компиляции следующей строчки ассемблер выдает ошибку (ну оно и понятно, число превышает двойное слово):
Код:
x dd 0100000000h
А вот при компиляции такой ошибки нет:
Код:
x dd 0FFFFFFFFh + 1
Правда x = 0. Как я понял, компилятор вычисляет выражение в 32 разрядах, то есть берет выражение по модулю 2^32. Самое интересное, что я не нашел об этом информации ни в одном учебнике( Кто-нибудь знает, где об этом поподробнее написано? И почему вообще в первом случае он не взял значение по модулю, а во втором взял. Спасибо заранее за ответ
vladimashev вне форума   Ответить с цитированием
Старый 30.05.2019, 17:58   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,339
По умолчанию

x dq 0100000000h
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 30.05.2019, 18:03   #3
vladimashev
 
Регистрация: 30.05.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
x dq 0100000000h
Ну так я спрашиваю именно про дерективу dd. С dq будет компилироваться, да. Непонятно, почему второй случай с dd не выдает ошибки, а с первой выдает.
vladimashev вне форума   Ответить с цитированием
Старый 30.05.2019, 18:09   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,054
По умолчанию

Потому что в первом случае у вас константа, а во втором выражение.
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 30.05.2019, 18:11   #5
vladimashev
 
Регистрация: 30.05.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Потому что в первом случае у вас константа, а во втором выражение.
Получается, выражения всегда по модулю 2^32 вычисляются? (Первый раз просто с таким столкнулся, даже не помню, чтобы такое было где-то написано хотя бы)
vladimashev вне форума   Ответить с цитированием
Старый 30.05.2019, 18:17   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,054
По умолчанию

Нет, выражение вычисляется как вычисляется. У вас в выражение складываются 2 dworda - вот и результат дворд.
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 30.05.2019, 18:22   #7
vladimashev
 
Регистрация: 30.05.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Нет, выражение вычисляется как вычисляется. У вас в выражение складываются 2 dworda - вот и результат дворд.
Хм, а с директивой db тоже все компилируется:
Код:
x db 0FFFFFFFFh + 1
В х снова ноль. Но тут ведь первое слагаемое в выражении не помещается в байт...
vladimashev вне форума   Ответить с цитированием
Старый 30.05.2019, 18:26   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,054
По умолчанию

И что, что первое не помещается? Результат же приводится к байту.
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 30.05.2019, 18:32   #9
vladimashev
 
Регистрация: 30.05.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И что, что первое не помещается? Результат же приводится к байту.
Непонятно просто, почему в таком случае
Код:
x db 0100000000h
тоже не приводится к байту.
vladimashev вне форума   Ответить с цитированием
Старый 30.05.2019, 18:33   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,054
По умолчанию

Потому что это константа. Четкая, с определенным типом.
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определите и запишите в протокол шестнадцатеричный объектный код для следующих директив резервирования памяти nelo_001 Assembler - Ассемблер 6 28.06.2014 00:30
Директивы компилятора Alex2009 Общие вопросы Delphi 2 30.01.2014 06:10
Директивы ImmortalAlexSan Общие вопросы Delphi 4 07.11.2010 16:25
Директивы. VintProg Свободное общение 3 10.11.2009 15:35
Директивы препроцессора в С++ alef Общие вопросы C/C++ 1 25.04.2008 01:36


04:07.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.