我正在写为定制微控制器我正在汇编。我已经得到了汇编到一个点,这将汇编指令到二进制。

不过,我现在有与得到唱片公司的工作问题。目前,当我遇到汇编新的标签,它存储标签和其指的是存储位置的名称。当一个指令引用一个标签,汇编程序查找标签和替换适当的值的标签。

这是罚款和花花公子,但如果将标签指令引用它之后定义?正因为如此,我需要我的解析器碾过代码的两倍。

这就是我目前有我的主要功能:

303 int main(int argc, char* argv[])
304 {
305 
306     if(argc < 1 || strcmp(argv[1],"-h")==0 || 0==strcmp(argv[1],"--help"))
307     {
308         //printf("%s\n", usage);
309         return 1;
310     }
311     // redirect stdin to the file pointer
312     int stdin = dup(0);
313     close(0);
314 
315     // pass 1 on the file
316     int fp = open(argv[1], O_RDONLY, "r");
317     dup2(fp, 0);
318 
319     yyparse();
320 
321     lseek(fp, SEEK_SET, 0);
322 
323     // pass 2 on the file
324     if(secondPassNeeded)
325     {
326         fp = open(argv[1], O_RDONLY, "r");
327         dup2(fp, 0);
328         yyparse();
329     }
330     close(fp);
331 
332     // restore stdin
333     dup2(0, stdin);
334 
335     for(int i = 0; i < labels.size(); i++)
336     {
337         printf("Label: %s, Loc: %d\n", labels[i].name.c_str(), labels[i].memoryLoc);
338     }
339     return 0;
340 }

我使用这个柔性/野牛配置内部。

有帮助吗?

解决方案

如果这是你所需要的,你并不需要一个完整的双通道汇编。如果当你引用它的标签是没有定义,你只需输出替身地址(比如0×0000),并有一个数据结构,列出了所有的地方有向前引用,什么符号他们refered来。在文件的结尾(或块,如果你有局部符号),您只需经过该列表和补丁的地址。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top