Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-02-2007, 20:22   #1
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
[Assembly] Stampare Stringa Alla Rovescio

Ho un problema..il programma stampa oltre alla stringa ribaltata anche
faccine varie . E ed U..ovvero codice ascii casuali..come posso risolvere?
vi posto il codice..


.MODEL TINY
.CODE
ORG 0100h

START: jmp MAIN

STRINGA db 5,0,0,0,0,0,0


;----------------------------------------------------------------------------

MAIN PROC

;input stringa
mov ah,0ah
lea dx,STRINGA
int 21h

;stampa stringa
lea bx, STRINGA
inc bx
mov cx,0
mov cl,[bx]
inc bx
mov ah,2; stampa

;stampa stringa al contrario


Ribaltamento:


mov ch,0
lbl_a: mov cl,[bx]
mov dl,[bx]
inc bx
loop lbl_a
mov ch,0
mov cl,dl
lbl_r: mov dl,[bx]
mov ah,2
int 21h
dec bx
loop lbl_r
lbl_s: mov dl,[bx]
mov ah,2
int 21h
dec bx
loop lbl_s

int 20h
MAIN ENDP
;----------------------------------------------------------------------------
END START
END
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 07:56   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
non ho provato il code ma prova a dichiarare la stringa così:
STRINGA DB "mia stringa",'$'

probabilmente ti stampa segno strani, cuoricini e faccine perchè hai messo lo 0 finale alla stringa con il tasm devi limitarla con il '$' finale.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 08:42   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da okay Guarda i messaggi
prova a dichiarare la stringa così:
STRINGA DB "mia stringa",'$'
Lui non deve mettere una stringa "literal", in quanto usa il servizio 0Ah/int 21h che effettua l'input di una stringa. Il buffer deve essere impostato con 2 byte di "header" come spiegato <qui>.

Quote:
Originariamente inviato da okay Guarda i messaggi
probabilmente ti stampa segno strani, cuoricini e faccine perchè hai messo lo 0 finale alla stringa con il tasm devi limitarla con il '$' finale.
Il tasm non c'entra nulla. Il '$' va usato come terminatore di una stringa solo quando si usa il servizio 09h/int 21h (che lui non ha usato).

Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Ho un problema..il programma stampa oltre alla stringa ribaltata anche
faccine varie . E ed U..ovvero codice ascii casuali..come posso risolvere?
Il sorgente è un po' confuso ... ci sono istruzioni a mio avviso inutili.
Se vuoi stampare una stringa rovesciata, hai 2 possibilità: rovesciare fisicamente la stringa nel buffer e quindi stamparla, oppure stampare semplicemente i caratteri partendo dall'ultimo verso il primo.

Se non ci sono richieste/necessità particolari, consiglierei il secondo modo. Una volta che in CX hai la lunghezza della stringa e BX punta al byte che contiene la lunghezza, basta sommare CX a BX, quindi finché CX è diverso da 0 stampare il carattere in [BX] e decrementare BX e CX.
Verrebbe circa la metà di quanto hai scritto ...

EDIT: Invece di usare BX e CX si potrebbe usare SI come base e BX come offset, usando il modo di indirizzamento [BX+SI]. Sarebbe ancora meglio!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 28-02-2007 alle 09:10.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 12:44   #4
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Quote:
BX punta al byte che contiene la lunghezza,
Come faccio a puntare bx al byte contenente la lunghezza?

Quote:
per sommare poi
JZ lbl_somma



lbl_somma: ADD bx,cx
DEC cx
DEC bx

Ho cercato di tradurre in codice quello che mi hai detto..ora ci vorrebbe un tuo aiuto nel collegare tutto quanto
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 13:07   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Ho cercato di tradurre in codice quello che mi hai detto..ora ci vorrebbe un tuo aiuto nel collegare tutto quanto
Guarda ... è abbastanza semplice. Nel tuo codice hai usato BX che punta inizialmente al primo byte del buffer e CX come contatore (la parte bassa la prendi dal secondo byte del buffer).

Nell'EDIT ho detto che si può usare l'indirizzamento [BX+SI]. In effetti non mi è venuto in mente subito ma consentirebbe di eliminare alcune istruzioni.
In sostanza usi SI per puntare al buffer e il contatore dei caratteri lo metti in BX. Cambia poco dal tuo, solo i registri.
Poi però se SI lo lasci che punta al secondo byte (quello della lunghezza restituita), facendo [BX+SI] prendi il carattere dall'ultimo fino al primo.

Ad ogni ciclo verifichi prima che BX sia uguale a zero e se lo è esci dal ciclo. Altrimenti prendi il carattere con [BX+SI], lo stampi e quindi decrementi BX e ripeti il ciclo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 14:37   #6
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Siccome a scuola non abbiamo mai usato si, è meglio utlizzare i reigstir utilizzati fino ad ora..visto che è un esercitazione da consegnare

Non potendo usare si, devo utilizzare esclusivamente i registri
cx,bx,dx e ax..

Quote:
Nel mio caso Bx= primo byte
Ma non capisco come fare a dirgli..Leggi a partire dall' ultimo byte di bx( senza usare si ovviamente)..grazie x la disponibilità
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 14:54   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Ma non capisco come fare a dirgli..Leggi a partire dall' ultimo byte di bx( senza usare si ovviamente)..grazie x la disponibilità
Uh ... ok, allora non usiamo SI.

Se in CX hai il numero di caratteri e BX sta puntando al secondo byte del buffer, basta che sommi CX a BX. Poi nel loop dovrai decrementare sia BX che CX.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 18:00   #8
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Ribaltamento:
add cx,bx

jz
lbl_b: dec bx
dec cx
loop
mov cx,[bx]
mov ah,2

E ora nel codice? come fare a mettere in pratica quello che hai detto tu?
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 19:08   #9
pisto
 
Messaggi: n/a
OTtissimo

mi consigliate una guida per super principianti per l'assembly? si intende x86, e che sia possibilmente aggiornata e gratis
  Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 19:29   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Ribaltamento:
add cx,bx

jz
lbl_b: dec bx
dec cx
loop
mov cx,[bx]
mov ah,2

E ora nel codice? come fare a mettere in pratica quello che hai detto tu?
No no .. alt. Intanto ho detto di sommare CX a BX, non il contrario. Poi nel loop innanzitutto bisogna controllare che CX sia diverso da zero (lo puoi fare con una CMP o anche con una OR su sé stesso). Se è zero, esci dal ciclo. Poi metti in DL il carattere (cioè [BX]), chiami il servizio 02H/int 21H, quindi decrementi BX e CX e ripeti da capo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2007, 23:05   #11
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
allora ecco:


Codice HTML:
SEG_A SEGMENT
ASSUME CS:SEG_A, DS:SEG_A
ORG 100H

Ribalta PROC FAR

inizio: jmp START ;salta a START

max_len EQU 1000 ;massima lunghezza 
sorgente db max_len dup(?) ;stringa da ribaltare
destinaz db max_len dup(?) ;stringa ribaltata

START:
mov si,OFFSET sorgente
prossimo_car: mov ah,01h ;legge un car dalla tastiera
int 21h
cmp al,0Dh ;è = a return ?
je fine_lettura ;se si smetti di leggere
mov sorgente[si],al ;sposta il carattere in sorgente
inc si ;incrementa si
jmp prossimo_car ;leggi il prossimo car



fine_lettura:
mov cx,si 
push cx ;memorizza la lunghezza nello stack
mov bx,OFFSET sorgente
mov si,OFFSET destinaz
add si,cx ;metto in si la lunghezza della stringa
dec si ;decrementa si

Ribaltamento:
mov al,[bx] ;routine di ribaltamento
mov [si],al ; parto dal fondo e la copio
inc bx ; in destinaz
dec si
loop Ribaltamento ; salto a Ribaltamento

pop si ;prelevo la lunghezza
mov destinaz[si+1],'$' ;aggiungo il terminatore
mov ah,09h 
mov dx,OFFSET destinaz
int 21h ;stampo la stringa ribaltata

RETN
Ribalta ENDP

SEG_A ENDS
END inizio
okay è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 13:18   #12
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Quello che mi hai postato utilizza si..e cmq l'avevo già trovato..non fa al caso mio..


Ok il programma stampa la stringa rovesciata ma con 3 faccine(che progresso ) Come mai?


;Ribaltamento
add bx,cx

lbl_b: cmp cx,0
je lbl_fine
mov dl,[bx]
dec bx
dec cx
int 21h
loop lbl_b


lbl_fine:
int 20h
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 13:29   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
Ok il programma stampa la stringa rovesciata ma con 3 faccine(che progresso ) Come mai?
metti un jmp lbl_b invece di loop.

Si potrebbe anche benissimo usare l'istruzione loop ma a quel punto dovresti: a) togliere dec cx (lo fa già loop) e b) la comparazione di cx con 0 la puoi fare solo una volta fuori dal ciclo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 16:57   #14
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da pisto Guarda i messaggi
mi consigliate una guida per super principianti per l'assembly? si intende x86, e che sia possibilmente aggiornata e gratis
http://xoomer.virgilio.it/ramsoft/
okay è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 18:33   #15
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Ho provato a mettere il jmp ma purtoppo se inserisco 123 mi stampa 323 e il programma termina..ci siamo quasi?
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 18:35   #16
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
non funge
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 19:25   #17
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
non funge
Riposta il codice completo che vediamo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 19:49   #18
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
; Assemblaggio come .COM:
; TASM [nomefile.ASM]
; TLINK [nomefile.OBJ] /t
;---------------------------------------------------------------------------
.MODEL TINY
.CODE
ORG 0100h

START: jmp MAIN

STRINGA db 5,0,0,0,0,0,0


;----------------------------------------------------------------------------

MAIN PROC

;input stringa
mov ah,0ah
lea dx,STRINGA
int 21h

;stampa stringa
lea bx, STRINGA
inc bx
mov cx,0
mov cl,[bx]
inc bx
mov ah,2; stampa

;stampa stringa al contrario



Ribaltamento:
add bx,cx

lbl_b: cmp cx,0
je lbl_fine
mov dl,[bx]
dec bx
dec cx
int 21h
jmp lbl_b


lbl_fine:
int 20h
MAIN ENDP
;----------------------------------------------------------------------------
END START
END
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 20:03   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dengel_1 Guarda i messaggi
lea bx, STRINGA
inc bx
mov cx,0
mov cl,[bx]
inc bx
Quest'ultima inc bx non ci deve essere. L'avevo anche detto ... "Se in CX hai il numero di caratteri e BX sta puntando al secondo byte del buffer..."
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 20:22   #20
dengel_1
Member
 
Iscritto dal: Feb 2007
Messaggi: 42
Si vede che sei un programmatore esperto

Ora funziona... grazie
dengel_1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Unitree H1: il robot umanoide vicino al ...
GPU esterne: PCI-SIG porta le prestazion...
Per Lenovo i giocatori sono ricchi: Legi...
Polaroid lancia la nuova stampante Hi-Pr...
Da Kyndryl un gemello digitale per il di...
La Cina si prepara a una nuova missione ...
Climatizzatore Inverter A++ con Wi-Fi a ...
NZXT Flex, lo 'scandalo' del PC gaming a...
Robot lavavetri in offerta su Amazon: EC...
Attenti a questo update fake di Windows ...
NIO chiede la standardizzazione di batte...
Da 80 mesi-uomo a poche ore: l'AI cambia...
In 2 settimane senza social il cervello ...
Amazon top 7 di oggi: 2 portatili intere...
SteamGPT trapela dal client Steam: ecco ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v