35 lines
579 B
NASM
35 lines
579 B
NASM
|
bits 64
|
||
|
|
||
|
SECTION .data
|
||
|
; holds 64-bit addresses of all jump target
|
||
|
jumptable: dq switch.c1, switch.c2, switch.c3
|
||
|
|
||
|
SECTION .text
|
||
|
global _start
|
||
|
_start:
|
||
|
%include "header.asm.inc"
|
||
|
|
||
|
; switch example
|
||
|
mov rax, 1
|
||
|
switch:
|
||
|
cmp rax, 3
|
||
|
jg .def
|
||
|
|
||
|
jmp [jumptable + rax*8]
|
||
|
|
||
|
.def: mov rbx, 0 ; default case
|
||
|
jmp fin
|
||
|
|
||
|
.c1: mov rbx, 1 ; case 1
|
||
|
jmp fin
|
||
|
.c2: mov rbx, 2 ; case 2
|
||
|
jmp fin
|
||
|
.c3: mov rbx, 3 ; case 3
|
||
|
jmp fin
|
||
|
|
||
|
; end of switch
|
||
|
fin: nop
|
||
|
|
||
|
|
||
|
%include "sysexit.asm.inc"
|