从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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...