使用yyparse()来使两个通汇编程序?
-
23-08-2019 - |
题
我正在写为定制微控制器我正在汇编。我已经得到了汇编到一个点,这将汇编指令到二进制。
不过,我现在有与得到唱片公司的工作问题。目前,当我遇到汇编新的标签,它存储标签和其指的是存储位置的名称。当一个指令引用一个标签,汇编程序查找标签和替换适当的值的标签。
这是罚款和花花公子,但如果将标签指令引用它之后定义?正因为如此,我需要我的解析器碾过代码的两倍。
这就是我目前有我的主要功能:
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来。在文件的结尾(或块,如果你有局部符号),您只需经过该列表和补丁的地址。
不隶属于 StackOverflow