/* 1. */ if (a >= 0) goto ifthen; if (a >= b) goto ifelse; if (b == 0) goto ifelse; ifthen: anw1(); goto ifend; ifelse: anw2(); ifend: /* 2. */ if (a == 10) goto case10; if (a == 2) goto case2; if (a == 3) goto case3; if (a == 4) goto case4; goto casedefault; case10: anw1(); goto switchend; case2: anw2(); case3: case4: anw3(); goto switchend; casedefault: anw4(); switchend: /* 3. */ /* C */ goto looptest; loop: j -= i; i++; looptest: if (j == 0) goto loopend; if (i > j) goto loopend; goto loop; loopend: /* Assembler */ movl i, %eax movl j, %ebx jmp looptest; loop: subl %eax, %ebx incl %eax looptest: cmpl $0, %ebx je loopend cmpl %ebx, %eax ja loopend jmp loop loopend: movl %eax, i movl %ebx, j /* 4. */ /* C */ int val[32]; register int res = 0, /* %eax */ i = 0; /* %ecx */ goto looptest; loop: res += val[i] / 32; i++; looptest: if (i < 32) goto loop; /* Assembler */ xorl %eax, %eax xorl %ecx, %ecx jmp looptest loop: movl val(, %ecx, 4), %ebx sall $5, %ebx addl %ebx, %eax incl %ecx looptest: cmpl $32, %ecx jl loop /* 5. */ /* C */ loop: if (y != 0) goto loopend; i++; if (x < y) goto looptest; x--; looptest: if (i < 16) goto loop; loopend: /* Assembler */ movl i, %eax movl x, %ebx movl y, %ecx loop: cmpl $0, %ecx jne loopend incl %eax cmpl %ecx, %ebx jl looptest decl %ebx looptest: cmpl $16, %eax jl loop loopend: movl %eax, i movl %ebx, x movl %ecx, y /* 6. */ /* instruction value carry overflow sign */ movb $5, %al /* 5 0 0 0 */ addb $-21, %al /* -16 0 0 1 */ subb $64, %al /* -80 0 0 1 */ cmpb $80, %al /* -80 0 1 0 */ addb $100, %al /* 20 1 0 0 */