Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
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


DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
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...
L'Iran avrebbe acquistato un satellite p...
VivaTech compie dieci anni e raddoppia p...
Le vendite di CPU si sono ridotte di 25 ...
Starship: SpaceX ha completato lo static...
Huawei FusionSolar Roadshow 2026: l'inno...
Nuovo trailer per Street Fighter: un fil...
Sovranità sui dati: arriva la pri...
Schede video NVIDIA e AMD di nuovo su Ma...
Robot aspirapolvere, TV OLED, iPhone 17 ...
EUREKA J15 Pro Ultra super interessante ...
Intel porta l'AI nei notebook entry-leve...
6000 mAh, 5G e 108MP a meno di 200€: ecc...
FRITZ!Mesh Set 2700: Wi-Fi 7 in tutta la...
Amazfit Cheetah 2 Pro: lo smartwatch per...
Intel, focus su GPU workstation e datace...
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: 17:57.


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