以下是某个Ada编译器生成的一段汇编代码:
mov ecx, eax
mov ebx, eax
sar ebx, 1Fh
mov edx, ebx
sar edx, 1Fh
not edx
mov eax, edx
sar eax, 1Fh
and ecx, eax
以上代码相当于以下C代码:
ecx = ((~(eax >> 62) >> 31) & eax);
根据分析,这段代码的作用相当于以下C代码:
ecx = (eax >= 0) ? eax : 0;
根据上下文分析,此时eax的值是某个数组的下标。
以上代码在整个软件中多次出现,不像是从用户写的Ada源程序翻译过来的,很可能是Ada编译器自动添加的。
但本人目前没有尝试写一个Ada程序,来使某个Ada编译器生成这样的汇编代码。