Ouch -  just looked at that more carefully.   exit it returning the what was left on the stack.  The push $0 is something in the system calling convention for that port.  You'll have to look at the kernel sources for that system in code that takes the trap.
Clem

On Thu, Apr 30, 2020 at 6:06 PM Clem Cole <clemc@ccc.com> wrote:
Alexander, the exit(2) system call takes a parameter, which is an integer status that the process will return.  The value 0 is traditionally a successful return, and anything else signifies an error condition. 
This assembler is the moral equiv of:

char hello[] = { "hello world\n" };
main() {
   write(1, hello, sizeof(hello));
   exit(0);
}

On Thu, Apr 30, 2020 at 5:50 PM Alexander Voropay <alec@sensi.org> wrote:
Can anyone please explain the last $0 pushed to the stack ?
Early SysIII ans SYSV on the i386 (and may be on i286) used
similar syscall convention.

I wrote about this:
https://minnie.tuhs.org/pipermail/tuhs/2019-October/019274.html
https://minnie.tuhs.org/pipermail/tuhs/2019-October/019294.html

Example:
===
        .file "test.s"
        .version "02.01"
        .set WRITE,4
        .set EXIT,1
        .text
        .align 4
        .globl entry
entry:
         pushl %ebp
         movl %esp,%ebp
         subl $8,%esp

         pushl $14 /length
         pushl $hello
         pushl $1 /STDOUT
         pushl $0
         movl $WRITE,%eax
         lcall $0x07,$0
         addl $16,%esp

         pushl $0
         movl $EXIT,%eax
         lcall 0x07,$0

         .data
         .align 4
hello:
         .byte 0x48,0x65,0x6c,0x6c,0x6f,0x2c, 0x20,0x77,0x6f,0x72
         .byte 0x6c,0x64,0x21,0x0a,0x00

ср, 29 апр. 2020 г. в 17:19, <ron@ronnatalie.com>:
>
> Thanks for the link.   With that help, I fixed the bug in the program:
>
>    mov $6., -(sp)
>      mov $1f, -(sp)
>      mov $1,-(sp)
>      mov $0,-(sp)
>      sys 4
>      add $8., sp
>      mov $0,-(sp)
>      mov $0,-(sp)
>      sys 1
> 1:   <hello>
>
>
> >> Sorry, I typed that in haste without testing. I don’t have a 2.11 system
> >> to try it on. However, reading the source code, I did that wrong. The
> >> args go on the stack, not in line with the code.
> >> mov $6, -(sp)
> >> mov a, -(sp)
> >> mov $1,-(sp)
> >> sys 4
> >
> > Without suggesting that every helpful post should be tested, I find the
> > superb https://unix50.org web emulator excellent for such things.
> >
> > Many thanks to the folks hosting & maintaining this great resource!
> >
> >
>
>