- Код: Выделить всё
- const
 a = 512*1024*1024*1024;
 ...
 
 procedure foo;
 var
 b:QWord;
 begin
 if b>a then DoSmth;
 end;
Что получается на выходе:
- Код: Выделить всё
- mov rdx,qword [rsp+64] ;<= это b
 mov rax,0 ;<====== ?????????
 cmp rdx,rax
 jng .6
Меняем объявление константы на:
- Код: Выделить всё
- const
 a:QWord = 512*1024*1024*1024;
Что получаем:
- Код: Выделить всё
- mov rax,qword [rsp+64] ;<= это снова b
 cmp rax,qword [TC_TEST_A]
 jna .6
 TC_TEST_A DQ 549755813888 ;<=== вот это супер...
Т.е., имея 64-битный компилятор, мы не можем работать с 64-битными константами без включения их в экзешник как переменных?
Также видно, что меняется условный джамп со знакового на беззнаковый, хотя, по идее, он и в первом случае должен быть беззнаковый (b беззнаковая), хотя это спорно, конечно...
Или я чего-то не понял, или одно из двух...
Компилер версии 2.2.0, экзешник называется ppcrossx64.exe (скачал бинарник).
зы На синтаксис асма не обращайте внимания, чуток правленый до формата fasm.



