第四和处理器标志

  • 本文关键字:标志 处理器 forth
  • 更新时间 :
  • 英文 :


为什么 Forth 不使用处理器标志进行条件执行?

相反,比较的结果将放在参数堆栈上。是因为内部解释器循环可能会在转到下一条指令时更改标志吗?还是简单地抽象条件逻辑?

例如,在 x86 上,标志寄存器保存比较结果,因为大多数处理器(如果不是全部)都会有一个标志寄存器。

As Forth 是一种基于堆栈的语言,为了定义语言内部的操作,您必须定义结果以更改语言内部的某些内容。标志寄存器不在语言中。显然,在优化编译器的情况下,任何给出相同最终结果的方法都是同样可以接受的。

这取决于 Forth 和优化级别。

: tt 0 if ." true" else ." false" then ;

在 SwiftForth (x86_64 GNU/Linux 中):

see tt
808376F   4 # EBP SUB                   83ED04
8083772   EBX 0 [EBP] MOV               895D00
8083775   0 # EBX MOV                   BB00000000
808377A   EBX EBX OR                    09DB
808377C   0 [EBP] EBX MOV               8B5D00
808377F   4 [EBP] EBP LEA               8D6D04
8083782   808379D JZ                    0F8415000000
8083788   804D06F ( (S") ) CALL         E8E298FCFF
808378D   "true"
8083793   804C5BF ( TYPE ) CALL         E8278EFCFF
8083798   80837AE JMP                   E911000000
808379D   804D06F ( (S") ) CALL         E8CD98FCFF
80837A2   "false"
80837A9   804C5BF ( TYPE ) CALL         E8118EFCFF
80837AE   RET                           C3 ok

在格福斯:

see tt
: tt
  0
  IF     ." true"
  ELSE   ." false"
  THEN ; ok

相关内容

  • 没有找到相关文章