Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema Programma Assembly

    Salve a tutti questo è il mio primo post, vorrei avere una delucidazione su un programma in assembly che ho stilato, trattasi di un labirinto dove in esso vi è la possibilità di muovere una faccina ( in tutte le direzioni possibili ).
    L'intero codice è questo:

    codice:
    ;descrizione del problema
    dati segment
    mess  db "  トトトトトトトトトトソ"
    mess1 db "            ウ"
    mess2 db "  トソ  レトトトトトル"
    mess3 db "   ウ  ウ      "
    mess4 db " レトル  タトトソ   "
    mess5 db " タトソ  レトトル   "
    Riga  db ?
    Colonna db ?
    dati ends
    sistema segment stack
     dw 100 dup(?)
     top label word
    sistema ends
    codice segment
     assume cs:codice, ss:sistema, ds:dati, es:dati
     
     inizio:
         mov ax,sistema
         mov ss,ax
         lea ax,top
         mov sp,ax
         mov ax,dati
         mov ds,ax
         mov es,ax
      ;programma
      ;azzera schermo
       mov ah,06
       mov al,0
       mov bh,0
       mov ch,0
       mov cl,0
       mov dh,24
       mov dl,79
       int 10h
      ;posizionamento cursore
       mov Riga,10
       mov Colonna,20
       call viscurs
      ;visualizzazione labirinto
       lea bp,mess
       call vis
       inc Riga
       call viscurs
       lea bp,mess1
       call vis
       inc Riga
       call viscurs
       lea bp,mess2
       call vis
       inc Riga
       call viscurs
       lea bp,mess3
       call vis
       inc Riga
       call viscurs
       lea bp,mess4
       call vis
       inc Riga
       call viscurs
       lea bp,mess5
       call vis
     
      ;visualizzazione faccina
       mov riga,11
       mov colonna,20
       call viscurs
       mov al,""
       call faccina
     
             
                
    CICLO:
          pop cx
          push cx
          loop ciclo
    call muovi
    alto: mov al," "
     dec riga
     call viscurs
     cmp al," "
     je sposta
     inc riga
     call viscurs
     jmp CICLO
    sposta:
            inc riga
     call canc
     dec riga
     call faccina
     jmp CICLO
    destra:
     inc colonna
     call viscurs
     cmp al," "
     je sposta1
     dec colonna
     call viscurs
     jmp CICLO
    sposta1:
            dec colonna
     call canc
     inc colonna
     call faccina
     jmp CICLO
    sinistra:
     dec colonna
     call viscurs
     cmp al," "
     je sposta2
     inc colonna
     call viscurs
     jmp CICLO
    sposta2:
     inc colonna
     call canc
     dec colonna
     call faccina
     jmp CICLO
    basso:
     inc riga
     call viscurs
     cmp al," "
     je sposta3
     dec riga
     call viscurs
     jmp CICLO
    sposta3:
     dec riga
     call canc
     inc riga
     call faccina
     jmp CICLO
    
      ;ritorno al dos
            mov al,00h
            mov ah,4ch
            int 21h
    vis proc
      mov ax,ds
        mov es,ax
        mov ah,13h
        mov al,01h
        mov bh,0
        mov bl,2h
        mov cx,13
        mov dh,Riga
        mov dl,Colonna
        int 10h
        ret                             
        endp
    viscurs proc
           
          mov ah,02
               mov bh,0
            mov dh,Riga
            mov dl,Colonna
            int 10h
            ret
            endp
    faccina proc
              
                mov ah,09
            mov bh,0
            mov bl,48h
            mov cx,1
            int 10h
            ret
            endp
    muovi proc
     
          mov ah,0
           int 16h
           je alto
           cmp ah,80d
           je basso
           cmp ah,75d
           je destra
           cmp ah,72d
           je sinistra
            cmp ah,77d
           jmp muovi
               ret
               endp
    canc proc
        mov ah,02
        mov bh,0
        mov dh,riga
               mov dl,colonna
               int 10h
    
               mov al,09h
               mov al," "
               mov bh,0
               mov bl,00001111b
               mov cx,1
               int 10h
               ret
               endp
      codice ends
    end inizio


    riscontra un problema di lunghezza di salto ( jmp ), troppo lungo, all'istruzione - je basso - e non riesce ad eseguire il programma. Mi e' stato detto di ridurre il salto utilizzando un jmp tra il je basso e il suo richiamo, per ridurre la lunghezza da saltare in modo da poter eliminare il problema. E' una cosa semplice e stupida, ma non mi ricordo proprio dove farlo.
    Grazie in anticipo.

    P.S.: Dov'è la sezione presentazioni?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    codice:
           cmp ah,80d
           jne no_basso
           jmp basso
    no_basso:
           cmp ah,75d
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    codice:
           cmp ah,80d
           jne no_basso
           jmp basso
    no_basso:
           cmp ah,75d
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.