如何解决从C到汇编器的PTR错误和偏移
我在C语言中具有如下功能
int rowScreen;
int colScreen;
char charac;
char tiles[DimMatrix][DimMatrix] = { {'1','2','4'},{'6','8','A'},{'C','E',' '} };
void updateBoardP1_C(){
int i,j;
rowScreen = 12;
for (i=0;i<DimMatrix;i++){
colScreen = 8;
for (j=0;j<DimMatrix;j++){
gotoxyP1_C();
charac = tiles[i][j];
printchP1_C();
colScreen = colScreen + 4;
}
rowScreen = rowScreen + 2;
}
rowScreen = 8;
colScreen = 20;
gotoxyP1_C(0);
charac = moves;
charac = charac + '0';
printchP1_C();
}
我将其更改为汇编器,如下所示
updateBoardP1_C:
push rbp
mov rbp,rsp
sub rsp,16
mov DWORD PTR rowScreen[rip],12
mov DWORD PTR [rbp-4],0
jmp .L2
.L5:
mov DWORD PTR colScreen[rip],8
mov DWORD PTR [rbp-8],0
jmp .L3
.L4:
mov eax,0
call gotoxyP1_C
mov eax,DWORD PTR [rbp-8]
movsx rcx,eax
mov eax,DWORD PTR [rbp-4]
movsx rdx,eax
mov rax,rdx
add rax,rax
add rax,rcx
add rax,OFFSET FLAT:tiles
movzx eax,BYTE PTR [rax]
mov BYTE PTR charac[rip],al
mov eax,0
call printchP1_C
mov eax,DWORD PTR colScreen[rip]
add eax,4
mov DWORD PTR colScreen[rip],eax
add DWORD PTR [rbp-8],1
.L3:
cmp DWORD PTR [rbp-8],2
jle .L4
mov eax,DWORD PTR rowScreen[rip]
add eax,2
mov DWORD PTR rowScreen[rip],eax
add DWORD PTR [rbp-4],1
.L2:
cmp DWORD PTR [rbp-4],2
jle .L5
mov DWORD PTR rowScreen[rip],8
mov DWORD PTR colScreen[rip],20
mov edi,0
mov eax,DWORD PTR moves[rip]
mov BYTE PTR charac[rip],al
movzx eax,BYTE PTR charac[rip]
add eax,48
mov BYTE PTR charac[rip],0
call printchP1_C
nop
leave
ret
当要使用yasm在64位linux中执行此汇编代码时:
yasm -f elf64 -g dwartf2 P1TOC.asm
undefined symbol 'PTR'
undefined symbol 'OFFSET'
是否可以在没有PTR和OFFSET的情况下进行汇编代码? 我在做什么错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。