如何解决ARMv8 AARCH64 - 错误:立即超出范围
我开始为 ARMv8 编写程序集,但在比较值以创建条件代码时遇到错误:
第一种方法:
#include <AsmMacroIoLibV8.h>
var1 .8byte 0xdedededef1f1f1f1
ASM_FUNC(CompareValues)
ldr x1,=var1
cmp x1,#dedededef1f1f1f1
b.ne error
mov x0,#0
ret
error:
mov x0,x1
ret
但是当我开始编译代码时,我收到了消息:“错误:立即超出范围”。
第二种方法:
#include <AsmMacroIoLibV8.h>
var1 .8byte 0xdedededef1f1f1f1
var2 .8byte 0xdedededef1f1f1f1
ASM_FUNC(CompareValues)
ldr x1,=var1
ldr x2,=var2
cmp x1,x2
b.ne error
mov x0,x1
ret
在这种方法中,我可以编译代码,但是当我运行代码时,我得到的值不为零(0xF03730B4)。这是我的C 代码:
/** @file
* EntryPoint.c
* Poc ASM application
**/
#include <Uefi.h>
#include <Library/UefiLib.h>
UINT64 CompareValues();
/** Entry point for the application.
*
* @param[in] ImageHandle The firmware allocated handle for the EFI image.
* @param[in] SystemTable A pointer to the EFI System Table.
*
* @retval EFI_SUCCESS The entry point is executed successfully.
* @retval other Some error occurs when executing this entry point.
**/
EFI_STATUS
EFIAPI
PocAsm_EntryPoint
(
IN EFI_HANDLE ImageHandle,IN EFI_SYstem_TABLE* SystemTable
)
{
UINT64 CmpVal = 0;
CmpVal = CompareValues();
Print(L"Result: %llx\n",CmpVal);
return EFI_SUCCESS;
}
最后,如果我在第一种方法中使用像 #0xff
这样的小立即数,一切正常。有什么办法可以使这种比较有效吗?如果我遗漏了什么,我不会。
谢谢各位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。