Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-11-2010, 17:09   #1
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
[Assembler 8086] Determinare numero negativo

Ciao..
Devo scrivere un programma che è in grado di determinare quanti valori di un array sono negativi.
Il problema che sorge è che non ho la più pallida idea di come inserire nel vettore i numeri negativi... Certo potrei tranquillamente manipolare i codici ascii e far si che quando trova un '-' allora deve avanzare ancora di uno per prendere l'intero numero, ma non mi pare una soluzione buona...
Volevo cercare di far qualcosa con la rappresentazione in complemento a due, però i numeri devono essere decimali e non so come convertirli in binario...
Suggerimenti?
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2010, 12:47   #2
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
La soluzione più semplice sarebbe un call alla funzione "atol", che ti converte la stringa in numero:

Codice:
push offset stringa
call atol
O in sintassi MASM32:

Codice:
invoke atol, addr stringa
Successivamente avrai sul registro "eax" il numero convertito.

PS: Se usi un assembler a 16bit è ovvio che devi usare la funzione "atoi" e prendere il valore dal registro ax. Inoltre devi includere la relativa libreria di Windows.

Ultima modifica di Supdario : 14-11-2010 alle 12:54.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2010, 14:44   #3
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Supdario Guarda i messaggi
La soluzione più semplice sarebbe un call alla funzione "atol", che ti converte la stringa in numero:

Codice:
push offset stringa
call atol
O in sintassi MASM32:

Codice:
invoke atol, addr stringa
Successivamente avrai sul registro "eax" il numero convertito.

PS: Se usi un assembler a 16bit è ovvio che devi usare la funzione "atoi" e prendere il valore dal registro ax. Inoltre devi includere la relativa libreria di Windows.
Ma atoi non è una funzione di C??
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2010, 16:12   #4
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
No, quasi tutte le funzioni native del C sono chiamate al kernel del sistema operativo (che sia Windows, Linux o altro). Anche "malloc" ad esempio è una chiamata al sistema operativo, che si occupa di trovare spazio libero nella memoria ed allocarlo, e restituisce il puntatore. Tutte queste funzioni si trovano in liberie statiche o dinamiche. Nello specifico, queste funzioni sono contenute in msvcrt.lib o msvcrt.dll (che contiene printf, system, malloc, scanf, ed altro).
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2010, 17:31   #5
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Supdario Guarda i messaggi
No, quasi tutte le funzioni native del C sono chiamate al kernel del sistema operativo (che sia Windows, Linux o altro). Anche "malloc" ad esempio è una chiamata al sistema operativo, che si occupa di trovare spazio libero nella memoria ed allocarlo, e restituisce il puntatore. Tutte queste funzioni si trovano in liberie statiche o dinamiche. Nello specifico, queste funzioni sono contenute in msvcrt.lib o msvcrt.dll (che contiene printf, system, malloc, scanf, ed altro).
Ah ho capito, beh buono a sapersi! Potrà tornarmi utile in futuro...
Comunque ho risolto nel seguente modo:
Codice:
;You are asked to develop an 8086 assembly program that counts the number of both positive and negative
;elements of an integer vector.

.MODEL small
.STACK
MAX         EQU 10                              ;Number of elements in the array
CR          EQU 13                              ;Carriage Return, decimal
LF          EQU 10                              ;Line Feed, decimal

.DATA
posElem DB  48                                  ;Number of positive elements, starts from 48 because it's 0 in ascii table
                                                ;Decimal notation
negElem DB  48                                  ;As above, but for negative elements
array   DB  -1,2,5,4,2,6,9,-5,-4,-9             ;Our array
msgPos  DB  "Number of positive elements: $"    ;Print message for positive
msgNeg  DB  "Number of negative elements: $"    ;Print message for negative

.code
.startup                                        
XOR DX,DX                                       ;Reset some registers
XOR AX,AX
XOR DI,DI
MOV CX,MAX                                      ;And put max number of elements in CX

findNeg:    MOV AL,array[DI]
            AND AL,80H                          ;Check if the number is positive, if it is, then we get 00000000 in our register
            CMP AL,0                            ;Otherwise we get 10000000
            JE  findPos                         ;If AL == 0 then goto findPos
            INC negElem                         ;Otherwise we have a negative element, so we increase the counter
            INC DI                              ;Index increased
            LOOP    findNeg                     ;Loop until CX == 0
            JMP print                           ;Then print results
findPos:    INC posElem                         ;If we are here we found a positive element, we increase counter
            INC DI                              ;And index
            LOOP    findNeg                     ;Loop until CX == 0
            
print:      MOV AH,9                            ;Prepare for printing a string
            LEA DX,msgPos                       ;Load effective address of msgPos string, this is the same as MOV DX, OFFSET msgPos
            INT 21H                             ;Print
            
            MOV AH,2                            ;Prepare for printing a single char
            MOV DL,posElem                      ;Put posElem in DL for printing
            INT 21H                             ;Print
            
            MOV DL,CR                           ;Print a CR
            INT 21H
                                                ;and
            MOV DL,LF                           ;a LF
            INT 21H
            
            MOV AH,9                            ;Print the string for negative numbers
            LEA DX,msgNeg
            INT 21H
            
            MOV AH,2                            ;Print the number of negative elements
            MOV DL,negElem
            INT 21H

.EXIT
END
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Artemis II: nuovo test prima del Wet Dre...
GTA 6 gratis se nasce un figlio il giorn...
Quasi la metà degli smartphone at...
DDR5 a 16 dollari al gigabyte: Framework...
Meno di 3kg per 'diventare' bionici: l'u...
Al regalo di San Valentino ci pensa HUAW...
Intel multata in India: 30 milioni di do...
Beast of Reincarnation ha una data di us...
Provati Reno15 e Reno15 FS: analisi comp...
L'Europa sfida la Cina sul litio: in Fin...
Sono 32, di cui 6 nuove, le offerte Amaz...
Rinnovo dei coupon Amazon nascosti: ecco...
Corsair aggiorna la confezione delle RAM...
Ecco tutti i robot aspirapolvere in offe...
Tachyum: dal processore universale alle ...
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: 23:08.


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