ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

L'assembly è il linguaggio di programmazione più vicino al linguaggio macchina

Moderatori: Toki, M.A.W. 1968

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
tanoferr
Utente Junior
Messaggi: 50
Iscritto il: 17 giu 2014, 10:08

ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

Messaggioda tanoferr » 13 feb 2018, 12:05

Ciao ragazzi,sto studiando assembly(x8086) e mi trovo dinanzi ad un problema a cui non riesco a dare una risposta:come muovermi dentro un doubleword.

ipotizziami che io abbia una variabile(array) del tipo

database DD 121,1233,2334,ETC....

ora so che il doubleword è costituito da 32 bit...di questi 32 bit io voglio accedere esclusivamente ai bit dal 8 al 23 cosi da potere salvare il loro contenuto in un registro AX. Dalla teoria presumo che la memoria si muove sempre un byte alla volta quindi per accedere al suddetto range mi basta scrivere

MOV AX, WORD PTR database[1]

inoltre rifacendomi sempre alla teoria penso che il comando precedente mettere nella parte bassa(AL) i bit dal 8 al 15 e nella parte alta(AH) i bit dal 16 al 23..

confermate il mio ragionamento??? è corretto???

grazie dell'aiuto
smalldragon
Utente Senior
Messaggi: 656
Iscritto il: 24 nov 2008, 17:11

Re: ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

Messaggioda smalldragon » 19 feb 2018, 14:02

Ciao
allora iniziamo dalle basi i vettori a prescidere dalle dimensioni iniziano sempre da 0!
il tuo vettore e costituito dai seguenti elementi 00 00 00 79h,00 00 04 d1h,00 00 09 1eh etc etc
adesso se tu fai mov ax,word ptr database[1]
ax = 00 00 perchè
00 I byte a posizione 0
00 II byte a posizione 1
00 III byte a posizione 2
79 III byte a posizione 3
adesso se tu vuoi prende il valore devi fare mov ax,word ptr database[2] cosi da prelevare la posizione 2 e la posizione 3 quelle che contengono il valore
per il prossimo valore dovrai fare, se gia sai che i valori rientrano in una word, + 4 cosi da scartare i valori di 00 00 che precedono i tuoi dati
esempio:

Codice: Seleziona tutto

.data
database dd 00000079h,000004d1h,0000091eh,00000afah
.code
mov si,2
mov cx,4
loop1: mov ax,word ptr [si]
add si,4
; fai quello che vuoi con i dati presi
loop loop1

se invece non sai se i dati stiano o meno in una word basta che l' precedente sarà:

Codice: Seleziona tutto

.data
database dd 00000079h,010004d1h,0004091eh,44000afah
.code
mov si,0
mov cx,4
loop1: mov ax,word ptr [si]
add si,2
; fai quello che vuoi con i dati presi
loop loop1

spero di esserti stato d'aiuto
oregon
Utente Senior
Messaggi: 10497
Iscritto il: 20 nov 2011, 18:54

Re: ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

Messaggioda oregon » 19 feb 2018, 18:02

tanoferr ha scritto:confermate il mio ragionamento??? è corretto???


Sì, questo mi sembra corretto.

Non ho capito cosa intende smalldragon ... o meglio forse lui non ha letto bene che tu vuoi i due byte di mezzo ...
In pratica, se

database DD 0x11223344

lui vuole ottenente in AX = 2233
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)
smalldragon
Utente Senior
Messaggi: 656
Iscritto il: 24 nov 2008, 17:11

Re: ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

Messaggioda smalldragon » 19 feb 2018, 18:21

Avevo capito che lui volesse prendere i dati numerici e basta
comunque per prendere i valori di mezzo basta applicare la formula
(numero record - 1 *4)+2 se sai che i valori sono di tipo word
altrimenti (numero record - 1 *4)

Codice: Seleziona tutto

data
database dd 00000079h,010004d1h,0004091eh,44000afah
numero_record db ?
.code
mov byte ptr numero_record,3
mov cx,4
dec byte ptr numero_record
cmp numero_record,0
jl label1
inc byte ptr numero_record
label1: xor ax,ax
mov al,numero_record
mul cx
mov esi,eax
add esi,2 ; se sai che la dimensione dei dati e word altrimenti non serve questa riga
xor eax,eax
lmov ax,word ptr [si]
; fai quello che vuoi con i dati presi

spero di aver colmato la mia precedente lacuna e di aver capito bene!
oregon
Utente Senior
Messaggi: 10497
Iscritto il: 20 nov 2011, 18:54

Re: ARRAY DI DOUBLEWORD E TRASFERIMENTO IN UN REGISTRO

Messaggioda oregon » 19 feb 2018, 18:33

In realtà hai peggiorato le cose perché lui parla di x8086 quindi niente registri esi o eax o simili ... Ma perché complicare le cose?
___________________
"Il gioco del Lotto : la tassa sull'imbecillità". (Bruno De Finetti, grande matematico italiano)

Torna a “Assembly”

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti