how to make iterative version of towers of hanoi
animation
how to make it without state
equality. programming a computer is what equato do.
; File: arrayinc.asm
;
; A subroutine to be called from C programs.
; Parameters: int A[], int n
; Result: A[0], ... A[n-1] are each incremented by 1
SECTION .text
global arrayinc
arrayinc:
push ebp ; set up stack frame
mov ebp, esp
; registers ebx, esi and edi must be saved, if used
push ebx
push edi
mov edi, [ebp+8] ; get address of A
mov ecx, [ebp+12] ; get num of elts
mov ebx, 0 ; initialize count
for_loop:
mov eax, [edi+4*ebx] ; get array element
inc eax ; add 1
mov [edi+4*ebx], eax ; put it back
inc ebx ; update counter
loop for_loop
pop edi ; restore registers
pop ebx
mov esp, ebp ; take down stack frame
pop ebp
ret
linux3% gcc -c arraytest.c
linux3% nasm -f elf arrayinc.asm
linux3% gcc arraytest.o arrayinc.o
linux3%
linux3% a.out
sizeof(int) = 4
Original array:
A[0] = 2 A[1] = 7 A[2] = 19 A[3] = 45 A[4] = 3 A[5] = 42 A[6] = 9
Modified array:
A[0] = 3 A[1] = 8 A[2] = 20 A[3] = 46 A[4] = 4 A[5] = 43 A[6] = 10
linux3%
// File: arraytest.c
//
// C program to test arrayinc.asm
//
void arrayinc(int A[], int n) ;
main() {
int A[7] = {2, 7, 19, 45, 3, 42, 9} ;
int i ;
printf ("sizeof(int) = %d\n", sizeof(int)) ;
printf("\nOriginal array:\n") ;
for (i = 0 ; i < 7 ; i++) {
printf("A[%d] = %d ", i, A[i]) ;
}
printf("\n") ;
arrayinc(A,7) ;
printf("\nModified array:\n") ;
for (i = 0 ; i < 7 ; i++) {
printf("A[%d] = %d ", i, A[i]) ;
}
printf("\n") ;
}