关于LINUX中的分段错误

我正在LINUX里做一个开发SIC / XE汇编程序的作业。

当我编写代码时,我遇到了一些错误,但是我不知道为什么会发生这种情况。 你能为我解释为什么会出现这个问题吗?

下面的代码显示了带有标记的'test.asm'文件。

178 printf("token1: %s \t",token1); 179 printf("token2: %s \t",token2); 180 printf("token3: %s \t",token3); 181 printf("token4: %s \t",token4); 182 printf("ss\nss"); 

据此,特别是“ss \ nss”声明,我预计打印结果如下。

  sstoken1: LDT token2: LENGTH token3: (null) token4: (null) ss sstoken1: WLOOP token2: TD token3: OUTPUT token4: (null) ss ss 

但是,当我运行这个程序到最后,我遇到了分段错误,遇到了奇怪的情况。

 sstoken1: OUTPUT token2: BYTE token3: X'05' token4: (null) ss sstoken1: END token2: FIRST token3: (null) token4: (null) ss Segmentation fault. 

“分段错误”语句之前没有“ss”。 我不明白为什么。 你能为我解释吗?

我相信这是打印的,在stdout被刷新之前被SEGV杀死的进程。 尝试添加:

 fflush(stdout); 

在printf语句之后。