distrib.asm

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3100/spring2026/notes/flags/code/distrib.asm
 

%include "CONSTANTS.h"

SYS_GETRANDOM equ 318
SIDES equ 20
TRIALS equ 1000000

section .data
    randNum: dq 0
    fmt: db `%d occured %d times\n`,0

section .bss
    counts: resq SIDES

section .text

global main
main:
 
    ; r12 is the lcv

    mov r12, 0
GenLoopTop: 
    cmp r12, TRIALS
    je  .done

    mov rax, SYS_GETRANDOM
    mov rdi,  randNum
    mov rsi,  8
    mov rdx,  0
    syscall

    mov rax, [randNum]
    mov rdx, 0
    mov r8, SIDES
    div r8
    inc qword[counts + rdx*8]

    inc r12
    jmp GenLoopTop

.done:

    mov r12, 0
PrintLoopTop:

    cmp r12, SIDES
    jge .done

    mov rdi, fmt
    mov rdx, [counts + r12 * 8]
    mov rsi, r12
    call CallPrintf

    inc r12
    jmp PrintLoopTop
.done

    jmp Exit