Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
esempio menu - menu.asm

menu.asm

Caricato da:
Scarica il programma completo

  1. .MODEL TINY
  2. .CODE
  3. JUMPS
  4. LOCALS
  5.  
  6. NULL EQU 0
  7. CR EQU 13
  8. LF EQU 10    
  9. UP        EQU 'H'
  10. DOWN       EQU 'P'  
  11. ESCAPE    EQU 1bh    
  12. INVIO     EQU 13
  13.  
  14.  
  15. ROSSO EQU 0C0h
  16. VERDE EQU 0A0H
  17. BLU EQU 90H
  18. NERO EQU 0fh
  19. BIANCO_NERO    EQU 0fh
  20.  
  21. PASSACOLORE MACRO opzione
  22. LOCAL SELEZIONE0
  23. LOCAL VAI0
  24.                    cmp INDICE, opzione
  25.                    je SELEZIONE0
  26.                    push BIANCO_NERO
  27.                    jmp VAI0
  28. SELEZIONE0:    push ROSSO
  29. VAI0:      
  30. ENDM
  31.  
  32. ORG 100h
  33.  
  34. INIZIO: jmp MAIN
  35.  
  36. ;area dati0
  37. TITOLO DB "Menu' di Nicola Sagliano:",NULL
  38. OPZ1 DB "opzione1",NULL
  39. OPZ2 DB "opzione2",NULL
  40. OPZ3 DB "STAMPARRAYMMM",NULL
  41. OPZ4 DB "opzione3",NULL
  42. USCITA DB "(premere Esc per terminare)",NULL  
  43. STRINGAOP1 DB "BLU",NULL
  44. STRINGAOP2 DB "ROSSO",NULL
  45. STRINGAOP3 DB "STAMPARRAYMMM",NULL
  46. STRINGAOP4 DB "VERDE",NULL
  47. STRINGAINOPZ DB "Premere un tasto per tornare al menu'...",NULL
  48. STRINGAARRAY DB "Array: ",NULL
  49. STRINGAMAX DB "Max: ",NULL
  50. STRINGAMIN DB "Min: ",NULL
  51. STRINGAMEDIA DB "Media: ",NULL
  52. ARRAY DB 4,3,102,250,3
  53. INDICE DB 0
  54.  
  55. ; Pulisce schermo
  56. ; ...........................................................
  57. ; abstract: funzione per pulire lo schermo, con un qualunque colore (semiregistro bh)
  58. ;
  59. ; In: nessun passaggio di parametri, colore impostato nel semiregistro bh
  60. ;
  61. ; Dep: nulla
  62. ; ...........................................................
  63. CLRSCR  PROC
  64.         push ax                    
  65.         push bx
  66.         push cx
  67.         push dx
  68.  
  69.         mov bl,0
  70.         mov al,0                  
  71.         mov cx,0                
  72.         mov dh,24                
  73.         mov dl,79                
  74.         mov ah,6                  
  75.         int 10h                  
  76.  
  77.         pop dx                  
  78.         pop cx
  79.         pop bx
  80.         pop ax
  81.  
  82.         ret
  83. ENDP   
  84.  
  85. ; Stampa colorata in una posizione x,y
  86. ; ...........................................................
  87. ; abstract: la funzione stampa una stringa colorata (colore in bh) ad una posizione x,y (dl = x, dh = y)
  88. ;
  89. ; In: passaggio del colore (semiregristro bh)
  90. ;
  91. ; Dep: dipende da GOTOXY
  92. ; ...........................................................
  93. STAMPACOL PROC
  94.         push bp
  95.         mov bp, sp
  96. STAMPA:
  97.         push ax  
  98.     push dx
  99.         push cx
  100.    
  101.     call GOTOXY
  102.  
  103.         CICLOSTAMPA:
  104.         mov dl,[bx]
  105.         push bx
  106.         cmp dl,NULL
  107.         je CORDINIZIO  
  108.         mov bh,0
  109.         mov bl,byte ptr[bp+4]
  110.         mov cx,1
  111.         mov ah,9
  112.         int 10h
  113.     mov ah,2
  114.     int 21h
  115.         pop bx
  116.         inc bx
  117.         jmp CICLOSTAMPA
  118. CORDINIZIO:
  119.         pop ax
  120.         pop cx
  121.         pop bx
  122.     pop dx
  123.         pop bp
  124.         ret
  125. ENDP  
  126.  
  127. ; GOTOXY
  128. ; ...........................................................
  129. ; abstract: sposta il cursore ad una cordinata x, y
  130. ;
  131. ; In: nessun parametro in ingresso, posizione x nel semiregistro dl e posizione y nel semiregistro dh
  132. ;
  133. ; Dep: nulla
  134. ; ...........................................................  
  135.  
  136. GOTOXY  PROC
  137.         push ax
  138.         push bx
  139.        
  140.         mov bh,0                
  141.         mov ah,2                  
  142.         int 10h                  
  143.        
  144.         pop bx
  145.         pop ax
  146.         ret
  147. ENDP
  148.  
  149. ; STAMPAOPZIONI
  150. ; ...........................................................
  151. ; abstract: stampa le 4 opzioni del menų colorando la selezionata
  152. ;
  153. ; In: nessun parametro
  154. ;
  155. ; Dep: dipende dalla macro passacolore e dalla funzione stampacol
  156. ; ...........................................................
  157.  
  158. STAMPAOPZIONI PROC
  159.  
  160.     mov dl, 0      
  161.     mov dh, 4      
  162.     lea bx, OPZ1  
  163.     PASSACOLORE 0
  164.     call STAMPACOL
  165.     add sp,2
  166.        
  167.     mov dl, 0    
  168.     mov dh, 5  
  169.     lea bx, OPZ2  
  170.     PASSACOLORE 1
  171.     call STAMPACOL
  172.     add sp,2
  173.  
  174.     mov dl, 0      
  175.     mov dh, 6      
  176.     lea bx, OPZ3  
  177.     PASSACOLORE 2
  178.     call STAMPACOL
  179.     add sp,2
  180.  
  181.     mov dl, 0      
  182.     mov dh, 7    
  183.     lea bx, OPZ4  
  184.     PASSACOLORE 3
  185.     call STAMPACOL
  186.     add sp,2
  187.        
  188.         ret
  189. ENDP
  190.  
  191. ; (nome funzione)
  192. ; ...........................................................
  193. ; abstract: stampa i codici ascii dei numeri in memoria altrimenti visualizzati come codici ascii (itoa)
  194. ;
  195. ; In: primo parametro la base in cui stampare(divisore) secondo il numero da stampare
  196. ;
  197. ; Dep: nessuna
  198. ; ...........................................................
  199. STAMPANUM PROC
  200.        push bp
  201.            mov bp, sp
  202.            
  203.            push AX
  204.            push BX
  205.            push CX
  206.            push DX
  207.            
  208.            mov ax, [bp+4]   ; il numero da stampare
  209.        mov bl, [bp+6]           ; il divisore
  210.        mov cx,0         ; conterā il numero di divisioni, cioč il numero di cifre binarie
  211. ANCORA:
  212.        div bl                   ; divisione per il parametro, in AH il resto, in AL il risultato           
  213.        push ax                  ; salvataggio del resto e del risultato sullo stack
  214.        inc cx                   ; conteggio del numero delle cifre binarie
  215.        mov ah,0         ; annullamento del resto, rimarrā solo il risultato per la prossima divisione
  216.        cmp al,0         ; il risultato č zero?
  217.        jne ANCORA               ; se no, si continua la divisione per due
  218. STAMPA1:
  219.        pop dx                   ; si preleva dallo stack il valore, tra cui il resto della divisione per due
  220.        mov dl,dh                ; si mette il resto in DL per la stampa a schermo
  221.            cmp dl,9
  222.        jg ESA      
  223.        add dl,'0'               ; si aggiunge il codice Ascii dello zero per ottenere il codice Ascii del numero (‘0’ o ‘1’) corrispondente
  224.        jmp RESTO
  225. ESA:   add dl, 55          
  226. RESTO:      
  227.            mov ah,2            
  228.        int 21h                  ; stampa a schermo della cifra binaria
  229.        loop STAMPA1             ; ancora cifre da stampare?
  230.  
  231.            pop DX
  232.            pop CX
  233.            pop BX
  234.            pop AX
  235.            
  236.            pop bp
  237.   ret
  238. ENDP
  239.  
  240. ; STAMPAMAX
  241. ; ...........................................................
  242. ; abstract: stampa il numero maggiore in un array
  243. ;
  244. ; In: primo parametro n. elementi, secondo parametro indirizzo dell'array
  245. ;
  246. ; Dep: dipende da STAMPANUM
  247. ; ...........................................................
  248. STAMPAMAX PROC
  249. PIndirizzo   EQU word ptr [BP+6]       
  250. PNumElementi EQU word ptr [BP+4]       
  251. Max EQU [BP-2]
  252.  
  253.     push bp
  254.        
  255.         mov bp, sp
  256.         mov cx, PNumElementi  ; il primo parametro (n. elementi)
  257.         mov bx, PIndirizzo  ; il secondo parametro (indirizzo dell'array)
  258.        
  259.         sub sp,2                        ; Max: allocazione della variabile locale. Conterra' il massimo
  260.  
  261.         mov word ptr Max,0      ; scrittura della variabile locale. La azzero
  262. @@CICLO:
  263.         mov dx,0
  264.         mov dl,[bx]     ; suppongo che in bx ci sia l'indirizzo dell'array
  265.     cmp dx, Max
  266.         jg @@AGGIORNAMAX
  267.     jmp @@PROSSIMO
  268. @@AGGIORNAMAX:
  269.     mov word ptr Max, dx
  270. @@PROSSIMO:
  271.     inc bx
  272.         loop @@CICLO
  273.        
  274.         ; Ora in di c'e' il massimo. Lo stampo
  275.         push 10
  276.         push Max
  277.         call STAMPANUM
  278.         add sp, 4
  279.        
  280.         mov sp,bp                       ; deallocazione della variabile locale
  281.         pop bp
  282.  
  283.     ret
  284. ENDP
  285.  
  286. ; STAMPAMIN
  287. ; ...........................................................
  288. ; abstract: stampa il numero minore in un array
  289. ;
  290. ; In: primo parametro n. elementi, secondo parametro indirizzo dell'array
  291. ;
  292. ; Dep: dipende da STAMPANUM
  293. ; ...........................................................
  294.  
  295. STAMPAMIN PROC
  296. PIndirizzo   EQU word ptr [BP+6]       
  297. PNumElementi EQU word ptr [BP+4]       
  298. Min EQU [BP-2]
  299.  
  300.     push bp
  301.        
  302.         mov bp, sp
  303.         mov cx, PNumElementi  ; il primo parametro (n. elementi)
  304.         mov bx, PIndirizzo  ; il secondo parametro (indirizzo dell'array)
  305.        
  306.         sub sp,2                        ; Min: allocazione della variabile locale.
  307.  
  308.         mov word ptr Min,255    ; scrittura della variabile locale. La azzero
  309. @@CICLO:
  310.         mov dx,0
  311.         mov dl,[bx]     ; suppongo che in bx ci sia l'indirizzo dell'array
  312.     cmp dx, Min
  313.         jl @@AGGIORNAMIN
  314.     jmp @@PROSSIMO
  315. @@AGGIORNAMIN:
  316.     mov word ptr Min, dx
  317. @@PROSSIMO:
  318.     inc bx
  319.         loop @@CICLO
  320.        
  321.         ; Ora in di c'e' il minimo. Lo stampo
  322.         push 10
  323.         push Min
  324.         call STAMPANUM
  325.         add sp, 4
  326.        
  327.         mov sp,bp                       ; deallocazione della variabile locale
  328.         pop bp
  329.  
  330.     ret
  331. ENDP
  332.  
  333. ; STAMPAMAX
  334. ; ...........................................................
  335. ; abstract: stampa la media in un array
  336. ;
  337. ; In: primo parametro n. elementi, secondo parametro indirizzo dell'array
  338. ;
  339. ; Dep: dipende da STAMPANUM
  340. ; ...........................................................
  341.  
  342. STAMPAMEDIA PROC
  343. PIndirizzo   EQU word ptr [BP+6]       
  344. PNumElementi EQU word ptr [BP+4]       
  345. Media EQU [BP-2]
  346.  
  347.     push bp
  348.        
  349.         mov bp, sp
  350.         mov cx, PNumElementi  ; il primo parametro (n. elementi)
  351.         mov bx, PIndirizzo  ; il secondo parametro (indirizzo dell'array)
  352.        
  353.         mov di,PNumElementi
  354.        
  355.         sub sp,2                        ; Media: allocazione della variabile locale.
  356.  
  357.         mov word ptr Media,0    ; scrittura della variabile locale. La azzero
  358. @@CICLO:
  359.         mov dx,0
  360.         mov dl,[bx]      ; suppongo che in bx ci sia l'indirizzo dell'array
  361.     cmp dx, Media
  362.     add word ptr Media, dx
  363.     inc bx
  364.         loop @@CICLO
  365.        
  366.         mov dx,0
  367.         mov ax, word ptr Media
  368.         mov cx,5
  369.        
  370.         div cx
  371.         mov word ptr Media,ax
  372.        
  373.         push 10
  374.         push Media
  375.         call STAMPANUM
  376.         add sp, 4
  377.        
  378.         mov sp,bp                       ; deallocazione della variabile locale
  379.         pop bp
  380.  
  381.     ret
  382. ENDP
  383.  
  384.  
  385.  
  386. ; area codice
  387. MAIN:
  388.  
  389.         mov bh,BIANCO_NERO
  390.         call CLRSCR
  391.    
  392.     mov dl, 20      
  393.         mov dh, 2          
  394.     push NERO
  395.         lea bx, TITOLO
  396.         call STAMPACOL      
  397.         add sp,2
  398.        
  399.     mov dl, 0      
  400.         mov dh, 10
  401.         push NERO
  402.         lea bx, USCITA
  403.         call STAMPACOL      
  404.         add sp,2
  405.  
  406. OPZIONI:
  407.  
  408.         call STAMPAOPZIONI
  409.     mov dl, 0      
  410.         mov dh, 40
  411.     call GOTOXY  
  412.  
  413. INPUT: 
  414.         mov ah,7
  415.         int 21h
  416.         cmp al,ESCAPE
  417.         je FINE    
  418.     cmp al,INVIO
  419.     je ESEGUIOPZIONE
  420.         cmp al,0
  421.         je TASTOSPEC  
  422.     jmp INPUT
  423.  
  424. TASTOSPEC:
  425.     mov ah,7
  426.     int 21h
  427.     cmp al, DOWN
  428.     je FRECCIAGIU
  429.     cmp al, UP
  430.     je FRECCIASU
  431.     jmp INPUT
  432.  
  433. FRECCIAGIU:
  434.         inc INDICE
  435.         cmp INDICE, 4
  436.         je  SELEZIONEINIZIO
  437.         jmp OPZIONI
  438.            
  439. SELEZIONEINIZIO:
  440.         mov INDICE, 0
  441.         jmp OPZIONI
  442.            
  443. FRECCIASU:      
  444.         dec INDICE
  445.         cmp INDICE, 255
  446.         je SELEZIONEFINE
  447.         jmp OPZIONI
  448.            
  449. SELEZIONEFINE:
  450.     mov INDICE, 3
  451.         jmp OPZIONI  
  452.  
  453.  
  454. ESEGUIOPZIONE:
  455.     cmp INDICE, 0
  456.     je ESEGUIOPZIONE1
  457.     cmp INDICE, 1
  458.     je ESEGUIOPZIONE2
  459.     cmp INDICE, 2
  460.     je ESEGUIOPZIONE3
  461.     cmp INDICE, 3      
  462.     je ESEGUIOPZIONE4  
  463.  
  464. ESEGUIOPZIONE1:
  465.         mov bh, BLU
  466.         call CLRSCR
  467.     mov dl, 35      
  468.         mov dh, 2          
  469.     push BLU
  470.         lea bx, STRINGAOP1
  471.         call STAMPACOL  
  472.         add sp,2        
  473.     mov dl, 20    
  474.         mov dh, 3
  475.         push BLU
  476.         lea bx,STRINGAINOPZ
  477.         call STAMPACOL
  478.         add sp,2
  479.         mov dl, 0    
  480.         mov dh, 40
  481.         call GOTOXY
  482.         mov ah,1
  483.         int 21h
  484.         jmp MAIN
  485.            
  486. ESEGUIOPZIONE2:
  487.         mov bh, ROSSO
  488.         call CLRSCR
  489.         mov dl, 35      
  490.         mov dh, 2          
  491.         push ROSSO
  492.         lea bx, STRINGAOP2
  493.         call STAMPACOL      
  494.         add sp,2
  495.         mov dl, 20    
  496.         mov dh, 3
  497.         push ROSSO
  498.         lea bx,STRINGAINOPZ
  499.         call STAMPACOL
  500.         add sp,2
  501.         mov dl, 0    
  502.         mov dh, 40
  503.         call GOTOXY
  504.         mov ah,1
  505.         int 21h
  506.         jmp MAIN
  507.            
  508. ESEGUIOPZIONE3:
  509.         mov bh, BIANCO_NERO
  510.         call CLRSCR
  511.         mov dl, 35      
  512.         mov dh, 2          
  513.         push BIANCO_NERO
  514.         lea bx, STRINGAOP3
  515.         call STAMPACOL         
  516.         add sp,2
  517.         mov dl,0    
  518.         mov dh,4
  519.         call GOTOXY    
  520.         push BIANCO_NERO
  521.         lea bx,STRINGAARRAY
  522.         call STAMPACOL
  523.         add sp,2
  524.         lea bx,ARRAY
  525.         mov cx,5
  526.        
  527. NUM:
  528.         mov ah,0
  529.         mov al,[bx]
  530.         push 10
  531.         push AX
  532.         call STAMPANUM
  533.         add sp,4
  534.         mov dl,' '
  535.         mov ah,2
  536.         int 21h
  537.         inc bx
  538.         loop NUM
  539.        
  540.         mov dl, 0    
  541.         mov dh, 6
  542.         call GOTOXY
  543.         push BIANCO_NERO
  544.         lea bx,STRINGAMAX
  545.         call STAMPACOL
  546.         add sp,2
  547.         lea bx,ARRAY
  548.         push bx
  549.         push 5
  550.         call STAMPAMAX
  551.         add sp, 4
  552.        
  553.         mov dl, 0    
  554.         mov dh, 8
  555.         call GOTOXY
  556.         push BIANCO_NERO
  557.         lea bx,STRINGAMIN
  558.         call STAMPACOL
  559.         add sp,2
  560.         lea bx,ARRAY
  561.         push bx
  562.         push 5
  563.         call STAMPAMIN
  564.         add sp, 4
  565.        
  566.         mov dl, 0    
  567.         mov dh, 10
  568.         call GOTOXY
  569.         push BIANCO_NERO
  570.         lea bx,STRINGAMEDIA
  571.         call STAMPACOL
  572.         add sp,2
  573.         lea bx,ARRAY
  574.         push bx
  575.         push 5
  576.         call STAMPAMEDIA
  577.         add sp, 4
  578.        
  579.         mov dl, 0    
  580.         mov dh, 12
  581.         push BIANCO_NERO
  582.         lea bx,STRINGAINOPZ
  583.         call STAMPACOL
  584.         add sp,2
  585.         mov dl, 0    
  586.         mov dh, 40
  587.         call GOTOXY
  588.         mov ah,1
  589.         int 21h
  590.         jmp MAIN
  591.            
  592. ESEGUIOPZIONE4:
  593.         mov bh, VERDE
  594.         call CLRSCR
  595.         mov dl, 35      
  596.         mov dh, 2          
  597.         push VERDE
  598.         lea bx, STRINGAOP4
  599.         call STAMPACOL         
  600.         add sp,2
  601.         mov dl, 20    
  602.         mov dh, 3
  603.         push VERDE
  604.         lea bx,STRINGAINOPZ
  605.         call STAMPACOL
  606.         add sp,2
  607.         mov dl, 0    
  608.         mov dh, 40
  609.         call GOTOXY
  610.         mov ah,1
  611.         int 21h
  612.         jmp MAIN
  613.  
  614. FINE:
  615.         int 20h                    
  616.        
  617. end INIZIO