- Код: Выделить всё
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.