Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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
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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
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 ...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
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: 19:23.


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