Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-11-2010, 16: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, 11: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 11:54.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2010, 13: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, 15: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, 16: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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Anche Sam Altman ha paura: ecco i due sc...
Perplexity Portable Computer arriva su W...
Se l'IA sostituisse il lavoro i salari r...
Fujitsu Monaka è pronto: 144 core...
Il dispositivo ultra compatto che trasfo...
Bonus colonnine 2026: dal 22 settembre d...
Revolut, una cartella "Italy" ...
Le auto connesse possono vendere i tuoi ...
E se i computer elaborassero le informaz...
NVIDIA non ci sta: "Non lasceremo che l'...
Gli Stati Uniti hanno armi in orbita: ar...
Robot aspirapolvere in offerta su Amazon...
ChatGPT inventa testimoni falsi e un avv...
Find X10 Pro Max di OPPO arriverà...
L'IA scriverà codice migliore del suo st...
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: 14:21.


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