我正在尝试将此汇编代码翻译成 C,我需要帮助。它与while循环有关,但我不知道while循环中发生了什么。我已经看了一段时间,我确定它包含“while(something =!null)”然后做一些事情,但我不知道当代码“movl”进入%eax时会发生什么。
本节是编译的 x86 汇编代码:
whilecode:
pushl %ebp
movl %esp, %ebp
jmp .L20
.L22:
movl 8(%ebp), %eax
movl 16(%eax), %eax
movl %eax, 8(%ebp)
.L20:
cmpl $0, 8(%ebp)
je .L21
movl 8(%ebp), %eax
movl 4(%eax), %eax
cmpl 12(%ebp), %eax
jne .L22
.L21:
cmpl $0, 8(%ebp)
setne %al
movzbl %al, %eax
popl %ebp
ret
这是一个节点的定义:
typedef enum {CHAR,SHORT,INT} Type;
typedef struct node {
Type thetype;
int data;
void *opaque;
struct node *ptr1, *ptr2;
} Node;
这是 while 循环的函数定义:
/* a while loop */
int whilecode(Node *somenode, int data)
{
// FIX ME
return 0;
}