从C到汇编器的PTR错误和偏移

如何解决从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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?