!COMPITO C !Scrivere un programma per il processore 8088 con il main, una funzione fun, e una funzione print !La funzione fun riceve come parametri un vettore v, la sua dimensione, e un intero n. !La funzione fun modifica il vettore v nel seguente modo: !v[i] = v[i] * n se v[i] > i !v[i] = n % v[i] se v[i] < i !nessuna modifica altrimenti !La funzione print riceve come parametri un vettore e la sua dimensione ed esegue la stampa. !Il main chiama prima la funzione fun e successivamente la funzione print per stampare v. !Esempio: !v: 5, 7, 3, 1, 4, 9, 6, 3 !n: 10 !v: 50, 70, 30, 0, 4, 90, 6, 1 (dopo l'esecuzione) _PRINTF = 127 _EXIT = 1 .SECT .TEXT main: MOVB AL, 10 MOVB AH, 0 PUSH v PUSH end-v PUSH AX CALL fun PUSH v PUSH end-v CALL print PUSH 0 PUSH _EXIT SYS print: PUSH BP MOV BP, SP MOV BX, 6(BP) MOV CX, 4(BP) MOV AX, 0 ciclo_stampa: MOVB AL, (BX) PUSH AX PUSH s PUSH _PRINTF SYS INC BX LOOP ciclo_stampa MOV SP, BP POP BP RET fun: PUSH BP MOV BP, SP MOV DI, 8(BP) MOV CX, 6(BP) MOV DX, 4(BP) MOV BX, 0 ciclo: MOVB AL, (BX)(DI) MOVB AH, 0 CMP AX, BX JG caso1 JL caso2 incr: INC BX LOOP ciclo POP BP RET caso1: MULB DL MOVB (BX)(DI), AL JMP incr caso2: MOV AX, DX DIVB (BX)(DI) MOVB (BX)(DI), AH JMP incr .SECT .DATA v: .BYTE 5, 7, 3, 1, 4, 9, 6, 3 end: .BYTE 0 s: .ASCII "%d \0" .SECT .BSS