Slide 110
Slide 110 text
Code to Code
Code to Code
; 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
; 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