|
|
|
|
|
by Thomas_Lord
3818 days ago
|
|
Slightly off topic. The article doesn't call it out but there's a lovely assembly hack here. In: bec 1f / branch if no error jsr r5,error / error in file name
<Input not found\n\0>; .even
sys exit
jsr calls a subroutine passing the return address in register 5. The routine error interprets the return address as a pointer to the string.r5 is incremented in a loop, outputing one character at a time. When the null is found, it's time to return. The instructions used to return from "error:" aren't shown but there is a subtlety here, I think. ".even" after the string constant assures that the next instruction, "sys exit", to which "error:" is supposed to return, is aligned on an even address. By implication, the return sequence in "error:" just be sure to increment r5, if r5 is odd. I am guessing something like the pseudo-code: inc r5 and r5, fffe ret r5 |
|
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V1/sh.s