HACKING 120% {Hacking, programmazione, computer & molto altro}

[Esercizio] Dinuovo parola palindroma ma.. in ASSEMBLY!, Complichiamo un po' le cose..

« Older   Newer »
  Share  
view post Posted on 7/9/2013, 13:53     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


Ho notato che nei linguaggi di alto livello non avete avuto problemi nel trovare se una parola è palindroma o no.
Ebbene proviamo ad alzare un po' il livello di difficoltà.
Svolgere lo stesso esercizio ma programmando in Asm 8086/8088.
Ps:
Se necessitate un compilatore che faccia anche debug con lista FLAG vi consiglio Emu8086!
Buon lavoro :P
 
Top
PaperonePazzo
view post Posted on 7/9/2013, 16:36     +1   -1




CITAZIONE (xCrew @ 7/9/2013, 14:53) 
Ho notato che nei linguaggi di alto livello non avete avuto problemi nel trovare se una parola è palindroma o no.
Ebbene proviamo ad alzare un po' il livello di difficoltà.
Svolgere lo stesso esercizio ma programmando in Asm 8086/8088.
Ps:
Se necessitate un compilatore che faccia anche debug con lista FLAG vi consiglio Emu8086!
Buon lavoro :P

Anche masm non è male.
 
Top
view post Posted on 7/9/2013, 16:53     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


Non saprei, non lo ho mai provato!
Lo proverò :P
 
Top
RootkitNeo
view post Posted on 7/9/2013, 23:35     +1   -1




Scritto in NASM per l'occasione, se volete più commenti ditelo.

http://pastebin.com/gngA3eUS
 
Top
view post Posted on 8/9/2013, 11:32     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


Root io sono riuscito a risolverlo in un modo più semplice (credo).

CODICE
.model small
.stack 100h        
.data
   messInizio db 'Scrivi una frase senza spazi',10,13,'$'
   mess1 db 'La parola inserita e palindroma',10,13,'$'
   mess2 db 'La parola inserita NON e palindroma',10,13,'$'
   capo db 10,13,'$'
   
   vettore1 dw 50 dup (0)   ;vettore parola
   vettore2 dw 50 dup (0)   ;vettore contraio
   
   Lettere dw ?  ;DW=16bit piu lunga di db

.code
inizio:
   mov ax,@data  
   mov ds,ax
   
   call lettura ;chiamo la procedura per leggere
   call palindromo
   
 
   
   mov ah,4ch
   int 21h

proc lettura

   lea bx,messInizio
   mov ah,09
   int 21h
   
   mov di,0
   ciclo_leggere:
       mov ah,01
       int 21h
       cmp al,13
       je fine_leggere
       lea bx,vettore1
       mov byte ptr[bx+di],al
       mov numLettere,di
       inc di
   jmp ciclo_leggere
   fine_leggere:    
   
   
   ret
endp lettura


proc plindromo
   
   mov di,0
   mov si,Lettere
   ciclo_inverso:
       lea bx,vettore1 ;normale
       mov al,byte ptr[bx+si]
       dec si
       lea bx,vettore2 ;contrario
       mov byte ptr[bx+di],al
       inc di
       cmp di,Lettere
       ja fine_inverso
   jmp ciclo_inverso
   fine_inverso:
   
   mov di,0
   ciclo_controllo:
       lea bx,vettore1 ;parole
       mov al,byte ptr[bx+di]  
       
       lea bx,vettore2 ;contrario
       mov ah,byte ptr[bx+di]
       
       cmp al,ah
       jne nonpalindromo
       
       cmp di,Lettere
       ja palindromo
       
       inc di
   jmp ciclo_controllo  
   
   palindromo:         ;parte stampa MSG palindromo
   lea dx,mess1
   mov ah,09
   int 21h
   
   jmp finetot
   
   nonpalindromo:      ;parte stampa MSG non palindromo
   lea dx,mess2
   mov ah,09
   int 21h
   
   finetot:
   
   ret
endp palindromo

end
 
Top
RootkitNeo
view post Posted on 8/9/2013, 11:47     +1   -1




Ora sono da telefono.
Il mio è praticamente la traduzione del mio C++.
Ad ogni modo non mi sembra più semplice, anzi, non sfrutti la caratteristica del cotatore CX.
Stando a guardare, consumi anche più risorse...
 
Top
RootkitNeo
view post Posted on 8/9/2013, 17:31     +1   -1




lol comunque non conosci MASM ma stai usando o MASM o TASM.

Ora che sono da PC posso aggiungere che non hai usato CX per l'incremento del contatore, hai dichiarato due array.

Il ritorno a capo è CRLF, quindi 13,10.
 
Top
6 replies since 7/9/2013, 13:53   720 views
  Share