Question: What is the output of the following assembly code? Original: http://i1183.photobucket.com/albums/x479/Szenya/532355_521882794525379_1012823075_n_zpse30e6bec.jpg Parsed by me (scarysandwich): OutChar: lui $v0, 10; /// $v0 = 10 << 16 ori $v0, $v0, 10; /// $v0 | 10 pad it with zeros syscall jump to address $ra // jump to return address main: $s0 = $zero + 1 aka s0 = 1 $s0 << 6 // shift left by 6 so $s0 * (2*6) = 12 $a0 = $s0 + 1 // 13 jump to OutChar // OutChar(13) $s0 += $s0 // 24 $s1 = $zero + 1 // s1 = 1 $s1 << 4 //shift left aka $s0 * (2*4) // s1 = 8 $a0 = $s0 - $s1 // 16 jump OutChar // OutChar(16) $s0 = 19 $s1 = 3 $s0 * $s1 $a0 = 57 $a0 << 1 // $a0 * 2 jump OutChar // OutChar(114) $s2 = $zero + $a0 // 16 $s2 -= $s0 // -8 $s2 += 10 // 18 $a0 = $zero + $s2 jump OutChar // OutChar(18) $s2 = $s2 + $s1 // 26 $sp = -4 // set stackpointer memstore $s2 in ($sp + 0) // store $s2 at -4 memory location $a0 = $s2 jump OutChar // OutChar(26) $s0 = 1 $s0 << 5 // $s0 = 10 $a0 = $s0 jump OutChar // OutChar(10) $a0 = $s2 - 6 jump OutChar // OutChar(26) $s0 = 37 $s0 * $s1 $a0 = 111 jump Outchar // OutChar(111) o jump OutChar // OutChar(111) o $a0 = mem[$sp + 0] // load from address -4 (pop stackpointer) $sp += 4 // 0 jump OutChar // OutChar(26) $a0 = 111 $a0 += 4 jump OutChar // OutChar(115) s $a0 = $s0 - 4 jump OutChar // OutChar(33) // note: $a0-$a3 -> function argument registers // C++ int OutChar(int v) { // call system to write to screen } int main() { int s0 = 12; OutChar(s0 + 1); // continue it from here.. }