Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
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


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
RDNA 5 sulle APU AMD, ma non per tutti: ...
Marvell acquisisce Lumentum per 115 mili...
La febbre dei data center fa impennare i...
ECOVACS T90S OMNI crolla a 499€ su Amazo...
In Cina i camion elettrici hanno gi&agra...
Attacchi hacker ai supermercati in Europ...
I datacenter non piacciono? OpenAI prova...
Cupra Raval sfida BMW, Volvo e le altre:...
BYD supera per la prima volta le 300.000...
Crisi RAM, spunta un prezzo incredibile ...
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:36.


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