It was thus said that the Great Jecel Assumpcao Jr. via cctalk once stated:
Sean Conner wrote two great posts on Mon, 10 Apr 2017
21:43:29 -0400
These are all very good points. I agree I was exagerating by saying the
iAPX432 and 8086 couldn't run C. After all, the language was born on the
PDP-11 and that was limited to either 64KB or 128KB. So any C programs
for that machine could be trivially recompiled to run on either Intel
processor. But I certainly wouldn't want to port the C version of Spice
to DOS, for example (I was given the job of porting the Fortran version
of Spice from the PDP-11 to the Burroughs B6900 and can tell you that
tales of Fortran's compatiblity are greatly exagerated, but that is
another story).
I can relate. I have the code to Viola [1] and it no longer compiles
cleanly [2]. I have cleaned up the code enough to get it to produce an
executable, but man ... the code ... it *barely* runs on a 32-bit system and
immeidately crashes on a 64-bit system, mainly due to the deeply baked in
assumption that
sizeof(int) == sizeof(long) == sizeof(char *) == sizeof(void *)
which is not always the case (even C says as much). But it was written in a
time of flux, just after C was standardized and not everyone had an ANSI-C
compiler.
The reason I used [bp-2] instead of [bp] in my second
example is that I
supposed the latter was for the dynamic links (pointer to who called us)
so I needed the static link (pointer to who defined us) to be somewhere
else. I did not bother trying to remember how the ENTER and LEAVE
instructions work so my examples probably are not compatible with them:
https://pdos.csail.mit.edu/6.828/2012/readings/i386/ENTER.htm
Yeah, I recently wrote code that used ENTER (works on both 32-bit and
64-bit x86 CPUs) just to figure out how it works. I never found the
description clear and NONE of the examples actually used it for nested stack
frames (sigh).
-spc
[1]
http://www.viola.org/
[2] Conflicting types for malloc() and fprintf(), and use of an
obsolete header.