 
View Full Version : Chi mi da una mano per un esame sull'assembler 8086???
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
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!!  :(
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....
La tre è un vettore che vieni aggiunto un valore da un area da un registro, visto cosi nn sembra errata!  :rolleyes:
ma bisogna valutare il numero di bit....credo...
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...
Allora sono tutte giuste  :p
No...la prima no perchè un trasferimento mem->mem non si può fare...
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!!!
scusate io ho letto di registri a 32 bit di cui gli ax bx ecc sono solo una parte.....helppp :cry:
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??
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.
la risp corretta è la 1-3 vero??? (3 sbagliata?)
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.
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...
quindi dite che la risp corretta è nessuna di queste! vero??
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!
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...
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
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...
mi hai convinto...quindi è nessuna di queste...!??!
Originally posted by "dario79"
mi hai convinto...quindi è nessuna di queste...!??!
concordo con cionci, la risposta è "nessuna di queste"
Ciao,
GHz!   :cool:
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
parte della computer grafica...tipo dispositivi di puntamento mouse ecc
Non ne so assolutamente niente...
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???
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...
grazie infinite...ci pensi un attimino??? sai vale 5 punti sto quiz!!!   :p  :p  :p  :p
Sì è quella...lo puoi verificare facilmente assemblando il codice...no ?
se passo l'esame ti pago una cena promesso!!!!
ce n'è un altro che dice jz se zf=1....è il caso duale quindi è sempre jz vero???
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...
è sbagliato anche in quel caso!?!?
Originally posted by "dario79"
è sbagliato anche in quel caso!?!?
In quale caso ? Non capisco ?
jz se zf è = 1??? è da evidenziare come sbagliata???
Mi scrivi il testo intero ?
Comunque JZ salta se ZF è = 1...
è identico ma dice: (jz salta se zf=1)
..
...
..
jz dispari
..
..
cambia solo questo (e chiaramente l'etichetta ora è dispari).
Grazie mille
JZ sicuramente non salta se è dispari ;)
quindi in entrambi in casi è jz e jnz quella da evidenziare...grazie mille!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.