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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Потому что это константа. Четкая, с определенным типом.
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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