PDA

View Full Version : Chi mi da una mano per un esame sull'assembler 8086???


dario79
09-06-2003, 15:03
Ciao devo fare un esame a quiz sull'assembler e 8086 in generale...vi propongo qualche quiz che magari riusciamo a risolvere assieme
ecco il primo:

alcune delle istruzioni sono errate. Indicare quali gruppi di istruzioni sono errate o incoerenti con quelle dello stesso gruppo:
1) mov var1, var2 2)dato dw 7,5 ; move ax, dato 3) move table[DI], bx

risp
2 2,3 1,3 nessuna di queste

io ho un'idea...confrontiamo
grazie mille

matpez
09-06-2003, 15:20
8086 l'ho fatto molto tempo fa ma se nn dico una costroneria le errata di certo è la 1) perchè nn puoi mai muovere o confrontare due aree di memoria senza passare dai registri!!

La 3) mi sembra corretta, anzi dovrebbe proprio esserlo

La 2) non mi astengo, nn ricordo!! :(

dario79
09-06-2003, 15:25
ti dico la 1 è sbagliata xkè nn si puo' add o sub immediato (ossia con variabili) e fin qui ci siamo....la 2 credo anche xkè dw è a 32 bit mentre ax è a 16...la 3 mi lascia perplesso....

matpez
09-06-2003, 15:28
La tre è un vettore che vieni aggiunto un valore da un area da un registro, visto cosi nn sembra errata! :rolleyes:

dario79
09-06-2003, 18:50
ma bisogna valutare il numero di bit....credo...

cionci
09-06-2003, 19:05
Se si parla di assembler 8086 allora i registri al max sono a 16 bit...
Comunque la 2 è sicuramente giusta...qualunque sia la dimensione di dato...
La 3 in teoria è giusta, table[DI] corrisponde comunque ad un indirizzo e lì andiamo a scrivere i nostri dati...

matpez
09-06-2003, 19:42
Allora sono tutte giuste :p

cionci
09-06-2003, 19:43
No...la prima no perchè un trasferimento mem->mem non si può fare...

matpez
09-06-2003, 20:58
Originally posted by "matpez"

8086 l'ho fatto molto tempo fa ma se nn dico una costroneria le errata di certo è la 1) perchè nn puoi mai muovere o confrontare due aree di memoria senza passare dai registri!!

La 3) mi sembra corretta, anzi dovrebbe proprio esserlo

La 2) non mi astengo, nn ricordo!! :(

Che pirla, l avevo detto pure io prima....bom sono troppo rinco!!!

dario79
10-06-2003, 11:48
scusate io ho letto di registri a 32 bit di cui gli ax bx ecc sono solo una parte.....helppp :cry:

dario79
10-06-2003, 11:54
scusate la 2 come fa ad essere giusta?? ax è a 16 bit e cerco di spostare dato (che è definito dw ossia a 32 bit) in ax....non è sbagliata??

cionci
10-06-2003, 13:29
Originally posted by "dario79"

scusate la 2 come fa ad essere giusta?? ax è a 16 bit e cerco di spostare dato (che è definito dw ossia a 32 bit) in ax....non è sbagliata??
Qui ti potrebbe dare un warning l'assemblatore... Ma in ogni caso dato è una etichetta che corrisponde ad un indirizzo...e da quell'indirizzo in poi verranno letti 16 bit...

Sei tu che hai parlato di assembler 8086...l'8086 ha registri al max di 16 bit... Se hai letto che AX è parte di EAX allora non stai facendo l'assembler dell'8086...ma quello del 80386...

maxithron
10-06-2003, 13:48
Originally posted by "cionci"



Sei tu che hai parlato di assembler 8086...l'8086 ha registri al max di 16 bit... Se hai letto che AX è parte di EAX allora non stai facendo l'assembler dell'8086...ma quello del 80386...

In effetti anche per me la "2" è giusta.

E non credo ci sia modo (da A8086) per gestire EAX.

dario79
10-06-2003, 13:54
la risp corretta è la 1-3 vero??? (3 sbagliata?)

cionci
10-06-2003, 15:09
Secondo me la 3 è giusta...
Perchè hai scritto move invece di mov ?

jolanda_81
10-06-2003, 16:28
Originally posted by "cionci"


Qui ti potrebbe dare un warning l'assemblatore... Ma in ogni caso dato è una etichetta che corrisponde ad un indirizzo...e da quell'indirizzo in poi verranno letti 16 bit...

Sei tu che hai parlato di assembler 8086...l'8086 ha registri al max di 16 bit... Se hai letto che AX è parte di EAX allora non stai facendo l'assembler dell'8086...ma quello del 80386...

1) mov var1, var2

è sbagliata perché non si può spostare direttamente un dato in memoria, limitazione dell'8086

2) DATO dw 7,5
mov ax, DATO

l'istruzione è corretta, la direttiva DW

la direttiva DW permette di definire strutture dati costruite da word (2 byte).

quindi la prima istruzione (DATO ...) crea in memoria una struttura composta da due word (16 bit ogniuna). Con la seconda istruzione leggo il primo dato, 7. Quindi in ax ci sarà 7.

3) mov TABLE[DI], bx

anche questa è corretta, questo è un modo di indirizzamento indiretto.

Ciao a tutti.

cionci
10-06-2003, 16:33
la direttiva DW permette di definire strutture dati costruite da word (2 byte).
Giusto...ero convinto che DW definisse un dato a 32 bit... E' da una vita che non uso la sintassi M$... Ultimamente ho usato solo la sintassi AT&T...

dario79
10-06-2003, 17:22
quindi dite che la risp corretta è nessuna di queste! vero??

cionci
10-06-2003, 17:24
Sì...

dario79
12-06-2003, 10:13
nella definizione variabili di un progr. vi sia:
dato db 1,2,3, 5dup(15H) e che dato abbia offset 1500H.
Cosa c'è nei registri al e cx dopo l'esecuzione delle seguenti istruz?

mov bx,3
mov al,dato[bx]
lea cx, dato[bx]

risp:
3,1503 15h,15h 5,1503 nessuna di queste

mi spiegate il procedimento così se cambiano i dati..... :D
grazie!

cionci
12-06-2003, 10:30
3,1503H...

mov al, dato[bx] significa a muovere dato[3] (che è uguale a 3) in al...
lea cx, dato[bx] carica in cx l'indirizzo di dato[bx], cioè l'indirizzo che carica è quello di dato + 3...cioè 1503H...

dario79
12-06-2003, 12:17
la cosa strana che al 15 c'è l'H al 1503 no...non vorrei che fosse un trabocchetto!


mov al, dato[bx] significa a muovere dato[3] (che è uguale a 3) in al...

dato[3] non è il valore nella posizione tra []?? xkè è = a 3???
thankssssssss

cionci
12-06-2003, 15:12
Che testa...non faccio altro che scazzare di questi giorni...sarà il caldo...

Allora...se mi ricordo la sintassi Microsoft il contenuto della memoria sarebbe:
dato db 1,2,3, 5dup(15H)

dato o dato[0] = 1
dato[1] = 2
dato[2] = 3
dato[3] = 15H
dato[4] = 15H
dato[5] = 15H
dato[6] = 15H
dato[7] = 15H

Inoltre se l'indirizzo di dato è 1500H i vari indirizzi sono:

dato o dato[0] ->1500H
dato[1] ->1501H
dato[2] ->1502H
dato[3] ->1503H
dato[4] ->1504H
dato[5] ->1505H
dato[6] ->1506H
dato[7] ->1507H

Quindi la risposta è 15H,1503H...

dario79
12-06-2003, 16:40
mi hai convinto...quindi è nessuna di queste...!??!

GHz
13-06-2003, 16:20
Originally posted by "dario79"

mi hai convinto...quindi è nessuna di queste...!??!

concordo con cionci, la risposta è "nessuna di queste"

Ciao,
GHz! :cool:

dario79
13-06-2003, 18:09
grazie mille

dario79
21-06-2003, 19:31
uso lo stesso 3d:
Si supponga di voler effettuare la camcellazione di un segmento. Per specificare quale segmento cancellare quale ILD si userà????
PICK LOCATOR CHOICE NESSUNO DI QUESTI

sn un po' confuso su ste cose...helppp thnkss

cionci
22-06-2003, 13:57
E che roba è ?

dario79
22-06-2003, 14:15
parte della computer grafica...tipo dispositivi di puntamento mouse ecc

cionci
22-06-2003, 14:22
Non ne so assolutamente niente...

dario79
22-06-2003, 14:23
thanksss

dario79
22-06-2003, 14:31
tale programma esamina una lista di interi a 16 bit, sottarre 1 a tutti i num dispari, totalizzare in una variab DISP il loro numero. Il progr non funziona: correggere 1 istruzione: (JNZ salta se zf=0)

num dw 16 dup(?)
disp dw 0
....
....
mov cx, 16
mov si,0
ciclo: test num[si],1
jnz pari
inc disp
dec num[si]
pari: add si,2
loop ciclo

se nn mi sbaglio la soluz era jnz....che ne dite???

cionci
22-06-2003, 14:37
Originally posted by "dario79"

se nn mi sbaglio la soluz era jnz....che ne dite???
Sì. mi sembra che ci vglia JZ al posto di JNZ...

dario79
22-06-2003, 14:54
grazie infinite...ci pensi un attimino??? sai vale 5 punti sto quiz!!! :p :p :p :p

cionci
22-06-2003, 18:48
Sì è quella...lo puoi verificare facilmente assemblando il codice...no ?

dario79
22-06-2003, 23:18
se passo l'esame ti pago una cena promesso!!!!

dario79
23-06-2003, 09:58
ce n'è un altro che dice jz se zf=1....è il caso duale quindi è sempre jz vero???

cionci
23-06-2003, 10:23
Con jz salta se zf = 1...

Quindi salta se test num[si],1 setta zf...cioè lo setta quando num[si] AND 1 = 0 che si ha solo in caso di numero pari...

dario79
23-06-2003, 19:05
è sbagliato anche in quel caso!?!?

cionci
23-06-2003, 19:28
Originally posted by "dario79"

è sbagliato anche in quel caso!?!?
In quale caso ? Non capisco ?

dario79
23-06-2003, 22:35
jz se zf è = 1??? è da evidenziare come sbagliata???

cionci
24-06-2003, 08:37
Mi scrivi il testo intero ?

Comunque JZ salta se ZF è = 1...

dario79
24-06-2003, 08:48
è identico ma dice: (jz salta se zf=1)
..
...
..
jz dispari
..
..
cambia solo questo (e chiaramente l'etichetta ora è dispari).
Grazie mille

cionci
24-06-2003, 08:59
JZ sicuramente non salta se è dispari ;)

dario79
24-06-2003, 12:32
quindi in entrambi in casi è jz e jnz quella da evidenziare...grazie mille!!!