楼主:
descent (“雄辩是银,沉默是金”)
2018-05-08 23:12:27※ 引述《dragoncfe168 (梅长苏)》之铭言:
: 请问一下
: 为何直译器将source code转译成机器码,
: 不会产生不同电脑的机器语言不同 而无法执行的问题???
直译器并不是转成机械码, 而是直接执行运算。
例如:
1+2
直译器在发现是执行 加法时, 就会用写该直译器的语言完成 1+2 的结果。
如果是用 c 写的, 就会执行 add_fun(1,2), 然后得到 3。
: 反观同样把source code转译成机器码的编译器
: 却会有此类问题呢???
而编译器并不是直接转成机械码, 而是组合语言,
add 1,2
但是一直到最后的执行档, 都不是编译器做的。
组译器把 add 1,2 变成 机械码, 还有某种格式的执行档,
这就是不能执行的原因之一, 是的有之一, 还有其他条件会造成
这个执行档无法在其他平台执行的原因, 不过不同的
执行档格式算是比较容易解释的一个原因。
作者:
bcew (bcew)
2018-05-09 05:45:00用pseudo组语来简单解释好了,a=1; b=2; c=a+b;在编译后的结果是mov r0, 1; mov r1, 2; add r0, r1;st [c], r0; 直译器要执行上面可能走过的组语是push r0; push r1; mov r0, 1;mov r1, 2; bl add_func; st [c], r0; pop r1; pop r0; 在add_func可能还有一堆错误检查的组语,最后才有add r0, r1,但这些在编译器编译时就做掉,输出的组语就只有一个加法指令很简洁