从高级语言翻译为 IA-32

发布于 2024-10-28 15:25:18 字数 417 浏览 1 评论 0原文

有人可以在不使用任何全局变量的情况下将此高级代码转换为 IA-32 汇编吗?我只是需要它作为我必须做的其他工作的示例。谢谢。整数是 32 位,字符是 8 位。

class MyString{
   char buff[100];
   int len;

   void deleteChar(char ch){
      int to = 0;
      for (int from = 0; from < this.length; from++){
          char nextch = this.buff[from];
          if (nextch != ch){
             this.buff[to] = nextch;
             to++;
          }
      }
   }
}

Can someone please translate this high-level code into IA-32 assembly without using any global variables? I just need it as an example for other work I have to do. Thanks. Integers are 32-bit and chars are 8-bit.

class MyString{
   char buff[100];
   int len;

   void deleteChar(char ch){
      int to = 0;
      for (int from = 0; from < this.length; from++){
          char nextch = this.buff[from];
          if (nextch != ch){
             this.buff[to] = nextch;
             to++;
          }
      }
   }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多像笑话 2024-11-04 15:25:18

以下是 gcc 给出时生成的内容:

void delete_char(char ch, char buf[], int len) {
        int from, to;
        for (from=0,to=0; from<len; ++from)
                if (buf[from] != ch)
                        buf[to++] = buf[from];
}


_delete_char:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $40, %esp
        movl    8(%ebp), %eax
        movb    %al, -28(%ebp)
        movl    $0, -12(%ebp)
        movl    $0, -16(%ebp)
        jmp     L2
L3:
        movl    -12(%ebp), %eax
        addl    12(%ebp), %eax
        movb    (%eax), %al
        cmpb    -28(%ebp), %al
        je      L4
        movl    -16(%ebp), %eax
        movl    %eax, %edx
        addl    12(%ebp), %edx
        movl    -12(%ebp), %eax
        addl    12(%ebp), %eax
        movb    (%eax), %al
        movb    %al, (%edx)
        incl    -16(%ebp)
L4:
        incl    -12(%ebp)
L2:
        movl    -12(%ebp), %eax
        cmpl    16(%ebp), %eax
        jl      L3
        leave
        ret

Here is what gcc generates when given:

void delete_char(char ch, char buf[], int len) {
        int from, to;
        for (from=0,to=0; from<len; ++from)
                if (buf[from] != ch)
                        buf[to++] = buf[from];
}


_delete_char:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $40, %esp
        movl    8(%ebp), %eax
        movb    %al, -28(%ebp)
        movl    $0, -12(%ebp)
        movl    $0, -16(%ebp)
        jmp     L2
L3:
        movl    -12(%ebp), %eax
        addl    12(%ebp), %eax
        movb    (%eax), %al
        cmpb    -28(%ebp), %al
        je      L4
        movl    -16(%ebp), %eax
        movl    %eax, %edx
        addl    12(%ebp), %edx
        movl    -12(%ebp), %eax
        addl    12(%ebp), %eax
        movb    (%eax), %al
        movb    %al, (%edx)
        incl    -16(%ebp)
L4:
        incl    -12(%ebp)
L2:
        movl    -12(%ebp), %eax
        cmpl    16(%ebp), %eax
        jl      L3
        leave
        ret
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文