title: Simple y86 do-nothing program halt
body: <pre><code>[terminal]$ ./yis a.yo
  Stopped in 11 steps at PC = 0x2c.  Status 'HLT', CC Z=1 S=0 O=0
  Changes to registers:
  %eax:   0x00000000  0x00000004
  %ebx:   0x00000000  0x00000005
  %esp:   0x00000000  0x00000023
  %ebp:   0x00000000  0x0000002f
  
  Changes to memory:
  0x0020: 0x2c803fa0  0x27803fa0
  0x0024: 0x20000000  0x05000000
  0x0028: 0x905fb054  0x04000000
  0x002c: 0x45205fa0  0x37000000
  0x0030: 0x32200120  0x0d000000
  0x0034: 0x00905fb0  0x00000000
  [terminal]$ cat a.yo
    0x000:              |     .pos 0
    0x000:              | init:
    0x000: 30f437000000 |     irmovl Stack, %esp
    0x006: 2045         |     rrmovl %esp, %ebp
    0x008: 800e000000   |     call Main
    0x00d: 00           |     halt
                        | 
    0x00e:              | Main:
    0x00e: a05f         |     pushl %ebp
    0x010: 2045         |     rrmovl %esp,%ebp
                        | 
    0x012: 30f004000000 |     irmovl $4,%eax
    0x018: a00f         |     pushl %eax
    0x01a: 30f305000000 |     irmovl $5,%ebx
    0x020: a03f         |     pushl %ebx
    0x022: 802c000000   |     call Sum
                        | 
    0x027: 2054         |     rrmovl %ebp,%esp
    0x029: b05f         |     popl %ebp
    0x02b: 90           |     ret
                        | 
    0x02c:              | Sum:
    0x02c: a05f         |     pushl %ebp        #right here
    0x02e: 2045         |     rrmovl %esp,%ebp
                        | 
    0x030: 2001         |     rrmovl %eax,%ecx
    0x032: 2032         |     rrmovl %ebx,%edx
                        | 
    0x034: b05f         |     popl %ebp
    0x036: 90           |     ret
    0x037:              | Stack:
  </code></pre>
  <p>I'm using <a href="https://web.archive.org/web/20140726144011/http://voices.yahoo.com/the-y86-processor-simulator-770435.html?cat=15" rel="nofollow noreferrer">the yas simulator</a> to compile and run my y86 assembly. I'm trying to understand why the program would halt at 0x2c, It does nothing except send 2 constants into a function (which aren't even used) that just moves the values that would be parameter into other registers.</p>