.model small data segment msg0 db 'Inserisci la parola da codificare: $' msg1 db 'Chiave: $' menu0 db '1) inserisci e codifica',0ah,0dh,'$' menu1 db '2) decodifica e stampa',0dh,0ah,'$' menu2 db '3) esci',0dh,0ah,'$' A_CAPO db 0ah,0dh,'$' str db 254,0,254 DUP (?) strk db 254,0,254 DUP (?) strkd db 254,0,254 DUP (?) chiave db ? ends .stack .code lea ax,data mov ds,ax menu: mov ax,0003h int 10h lea dx,menu0 mov ah,09h int 21h lea dx,menu1 int 21h lea dx,menu2 int 21h mov ah,07h int 21h cmp al,'1' je caso_1 cmp al,'2' je caso_2 cmp al,'3' je fine jmp menu caso_1: lea dx,msg0 mov ah,09h int 21h ;scrive msg0 mov ah,0ah lea dx,str int 21h ;legge la stringa mov ah,09h lea dx,A_CAPO int 21h lea dx,msg1 int 21h mov ah,01h int 21h mov chiave,al ;legge la chiave xor bx,bx mov bl,str[1] ;lunghezza stringa mov strk[1],bl xor cx,cx mov cl,bl ciclo: mov al,str[bx+1] xor al,chiave mov strk[bx+1],al dec bx loop ciclo mov bl,strk[1] mov strk[bx+2],'$' mov ah,09h lea dx,A_CAPO int 21h int 21h lea dx,strk+2 int 21h mov ah,07h int 21h jmp menu caso_2: mov ah,09h lea dx,A_CAPO int 21h lea dx,msg1 int 21h mov ah,01h int 21h mov chiave,al ;legge la chiave xor bx,bx mov bl,strk[1] ;lunghezza stringa mov strkd[1],bl xor cx,cx mov cl,bl ciclo_2: mov al,strk[bx+1] xor al,chiave mov strkd[bx+1],al dec bx loop ciclo_2 mov bl,strkd[1] mov strkd[bx+2],'$' mov ah,09h lea dx,A_CAPO int 21h int 21h lea dx,strkd+2 int 21h mov ah,07h int 21h mov dl, 0Ch ;nuova pagina mov ah, 5h int 21h lea si,strkd+2 xor cx,cx mov cl,strkd[1] print: mov dl, [si] mov ah, 5h ; MS-DOS print function. int 21h inc si ; carattere successivo loop print mov ax, 0h ; premere un tasto int 16h mov dl, 0Ch ; fine stampa --> via la pagina mov ah, 5h int 21h fine_stampa: jmp menu fine: END