_PRINTF = 127 _GETCHAR = 117 _EXIT = 1 .SECT .TEXT PUSH _GETCHAR SYS SUBB AL, 0x30 MOVB (n), AL PUSH _GETCHAR SYS PUSH _GETCHAR SYS SUBB AL, 0x30 MOVB (m), AL PUSH v1 PUSH v2 PUSH v2-v1 CALL fun PUSH v1 PUSH v2 PUSH v2-v1 CALL print PUSH 0 PUSH _EXIT SYS fun: PUSH BP MOV BP, SP MOV SI, 8(BP) MOV DI, 6(BP) MOV CX, 4(BP) MOV BX, 0 for: MOVB AL, (SI) ADDB AL, (n) CMPB AL, (m) JLE else XORB AH, AH MOVB AL, (SI) MOVB DL, 2 DIVB DL MOVB DL, AH MOVB AL , (m) XORB AH, AH MULB (m) ADDB AL, DL MOVB (DI), AL JMP end else: XORB AH, AH MOVB AL, (n) MULB (SI) ADDB AL, (m) XORB AH, 0 MULB BL MOVB (DI), AL end: INC SI INC DI INC BX LOOP for MOV SP, BP POP BP RET print: PUSH BP MOV BP, SP MOV SI, 8(BP) MOV DI, 6(BP) MOV CX, 4(BP) MOV AX, 0 MOV BX, 0 ciclo_stampa: MOVB AL,(BX)(SI) ADDB AL, (BX)(DI) ADDB AL, BL MOVB AH, 0 PUSH AX PUSH s PUSH _PRINTF SYS INC BX LOOP ciclo_stampa MOV SP, BP POP BP RET .SECT .DATA v1: .BYTE 2,7,5,6,4,9 v2: .BYTE 8,9,5,4,6,1 s: .ASCII "%d \0" .SECT .BSS n: .SPACE 1 m: .SPACE 1