mt9x9.asm && ; ld mt9x9.o -o mt9x9 && ./mt9x9 GLOBAL _start SECTION .data i: DB 0 j: DB 0 k: DB 0 ten: DB 10 item: DB '9x9=81', 9 nl: DB 10 SECTION .text _start: MOV BYTE[i], 1 loop_i: MOV BYTE[j], 1 loop_j: MOV BYTE[k], 0 loop_k: MOV AL, [k] ADD AL, [i] ADD AL, 48 MOV BYTE[item], AL MOV AL, [j] ADD AL, 48 MOV BYTE[item+2], AL MOV AL, [k] ADD AL, [i] MUL BYTE[j] CMP AL, [ten] JB if_then DIV BYTE[ten] ADD AL, 48 MOV BYTE[item+4], AL ADD AH, 48 MOV BYTE[item+5], AH JMP if_end ; nasm -f elf64 mt9x9.asm && ; ld mt9x9.o -o mt9x9 && ./mt9x9 GLOBAL _start SECTION .data i: DB 0 j: DB 0 k: DB 0 ten: DB 10 item: DB '9x9=81', 9 nl: DB 10 SECTION .text _start: MOV BYTE[i], 1 loop_i: MOV BYTE[j], 1 loop_j: MOV BYTE[k], 0 loop_k: MOV AL, [k] ADD AL, [i] ADD AL, 48 MOV BYTE[item], AL MOV AL, [j] ADD AL, 48 MOV BYTE[item+2], AL MOV AL, [k] ADD AL, [i] MUL BYTE[j] CMP AL, [ten] JB if_then DIV BYTE[ten] ADD AL, 48 MOV BYTE[item+4], AL ADD AH, 48 MOV BYTE[item+5], AH JMP if_end Assembly(Intel) Assembly(AT&T) if_then: ADD AL, 48 MOV BYTE[item+4], ' ' MOV BYTE[item+5], AL if_end: MOV RAX, 1 MOV RDI, 1 MOV RSI, item MOV RDX, 7 SYSCALL INC BYTE[k] CMP BYTE[k], 2 JBE loop_k CALL newline INC BYTE[j] CMP BYTE[j], 9 JBE loop_j CALL newline ADD BYTE[i], 3 CMP BYTE[i], 9 JBE loop_i MOV RAX, 60 XOR RDI, RDI SYSCALL newline: MOV RAX, 1 MOV RDI, 1 MOV RSI, nl MOV RDX, 1 SYSCALL RET if_then: ADD AL, 48 MOV BYTE[item+4], ' ' MOV BYTE[item+5], AL if_end: MOV RAX, 1 MOV RDI, 1 MOV RSI, item MOV RDX, 7 SYSCALL INC BYTE[k] CMP BYTE[k], 2 JBE loop_k CALL newline INC BYTE[j] CMP BYTE[j], 9 JBE loop_j CALL newline ADD BYTE[i], 3 CMP BYTE[i], 9 JBE loop_i MOV RAX, 60 XOR RDI, RDI SYSCALL newline: MOV RAX, 1 MOV RDI, 1 MOV RSI, nl MOV RDX, 1 SYSCALL RET # as mt9x9.s -o mt9x9.o && # ld mt9x9.o -o mt9x9 && ./mt9x9 .global _start .data i: .byte 0 j: .byte 0 k: .byte 0 ten: .byte 10 item: .ascii "9x9=81\t" nl: .ascii "\n" .text _start: movb $1, i loop_i: movb $1, j loop_j: movb $0, k loop_k: movb k, %al addb i, %al addb $48, %al movb %al, item movb j, %al addb $48, %al movb %al, item+2 movb k, %al addb i, %al mulb j cmpb ten, %al jb if_then divb ten addb $48, %al movb %al, item+4 addb $48, %ah movb %ah, item+5 jmp if_end # as mt9x9.s -o mt9x9.o && # ld mt9x9.o -o mt9x9 && ./mt9x9 .global _start .data i: .byte 0 j: .byte 0 k: .byte 0 ten: .byte 10 item: .ascii "9x9=81\t" nl: .ascii "\n" .text _start: movb $1, i loop_i: movb $1, j loop_j: movb $0, k loop_k: movb k, %al addb i, %al addb $48, %al movb %al, item movb j, %al addb $48, %al movb %al, item+2 movb k, %al addb i, %al mulb j cmpb ten, %al jb if_then divb ten addb $48, %al movb %al, item+4 addb $48, %ah movb %ah, item+5 jmp if_end if_then: addb $48, %al movb $32, item+4 movb %al, item+5 if_end: mov $1, %rax mov $1, %rdi mov $item, %rsi mov $7, %rdx syscall incb k cmpb $2, k jbe loop_k call newline incb j cmpb $9, j jbe loop_j call newline addb $3, i cmpb $9, i jbe loop_i mov $60, %rax xor %rdi, %rdi syscall newline: mov $1, %rax mov $1, %rdi mov $nl, %rsi mov $1, %rdx syscall ret if_then: addb $48, %al movb $32, item+4 movb %al, item+5 if_end: mov $1, %rax mov $1, %rdi mov $item, %rsi mov $7, %rdx syscall incb k cmpb $2, k jbe loop_k call newline incb j cmpb $9, j jbe loop_j call newline addb $3, i cmpb $9, i jbe loop_i mov $60, %rax xor %rdi, %rdi syscall newline: mov $1, %rax mov $1, %rdi mov $nl, %rsi mov $1, %rdx syscall ret