|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
Assembler 8086
salve
qualcuno è pratico di assembler 8086?? mi servirebbe una mano. ecco la traccia dell'esercizio: dato un valore generico nel registro AL confrontarlo con ogni valore che si trova tra gli indirizzi 0100 e 0110. se trova un valore uguale visualizza sullo schermo il valore 1 altrimenti visualizza 0. aiutatemi ci sto lavorando da un paio di giorni e non sono riuscito a risolverlo. come assemblatore-amulatore ho Emu8086 v3.05. grazie a tutti anticipatamente. ciao |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Intanto, per cominciare, dovresti dire se il tuo programma è a 16 o 32 bit. Cioè se il tuo obiettivo è creare un programma per DOS o per Windows (Win32). Poi dovresti spiegare meglio cosa intendi per indirizzi 0100 e 0110. Che razza di indirizzi sono?? Vuoi accedere ad indirizzi assoluti o ad una qualche area di memoria che definisci tu da qualche parte nel tuo programma?? P.S.: Il Emu8086 non lo conosco, io una volta usavo TASM/TLINK della Borland. Ho fatto una veloce ricerca con google ed ho trovato il sito di questo software. Sembra però che lo si possa solo acquistare, cioè non ho trovato un punto da cui poterlo scaricare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() Quote:
Codice:
; assumo che quegli indirizzi assurdi fossero in base 10... ; anche perché non ho mai visto un indirizzo espresso in base 2 ^^ mov cx,10 ; 110 - 100 xor dx,dx mov es,dx mov dx,100 mov di,dx repe scasb ; mi ricorda qualcuno :D je _print1 _print0: mov al,'0' jmp _exit _print1: mov al,'1' _exit: mov ah,0ah xor bh,bh mov cx,1 int 10h Quote:
ma perché scusa, tu usi un emulatore x86 su x86??
Ultima modifica di 71104 : 12-12-2005 alle 12:39. |
|||
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
allora il prof mi ha detto che quast'area di memoria è esadecimale
e nell'emulatore parte a 0100h. il problema che non capisco è che non sò le istruzioni di come prendere un valore in questo intervallo di indirizzi e metterli nel registro BL. capito? un'altro problema è che quando voglio passare al prossimo indirizzo (dovrei incrementarlo di uno) uso o INC CL (CL registro dove carico i vari indirizzi e non i loro valori) o ADD CL,01h. se non vi e chiaro ecco il programma che sto abbozzando: #make_COM# ; COM file is loaded at CS:0100h ORG 100h MOV CL,00FFh sopra: MOV DL,48d MOV AH,02h INT 21h ADD CL,01h CMP CL,[0111] JE fine MOV BL,CL CMP AL,BL JNE sopra MOV DL,49d MOV AH,02h INT 21h CMP CL,[0111] JNE sopra fine: HLT per quanto riguarda l'emulatore datemi i vostri indirizzi MSN e ve lo passo volentieri ciao |
|
|
|
|
|
#5 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
non sono indirizzi, sono offset... -.-' Quote:
Quote:
oppure lavori su mac?
|
|||
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#7 | |||
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
Quote:
Quote:
Quote:
non emula la piattaforma stessa ma emula il processore 8086. |
|||
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
raga non è che potete dare un occhiata al programma che messo prima???
verificate ce c'è qualche errore tramite il mio emulatore. non avete un email hotmail??? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
71104 connettiti a hotmail che ti passo l'emulatore
|
|
|
|
|
|
#11 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() repe scasb è semplicissima, basta che gli riempi tutti i registri e lei ti fa tutto; può essere che ho sbagliato e che invece che repe scasb devi usare (LOL!! Quote:
PS: ho visto che mi hai aggiunto alla contact list: scusa se non ti do retta ma devo andare a lezione ^^ ci sentiamo casomai stasera ciao |
||
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Quindi potresti fare un qualcosa del tipo: MOV SI, 0100h ... MOV BL,[SI] INC SI E ricordati che i processori x86 (parlo in modo specifico per la modalità reale), hanno la memoria "segmentata". L'indirizzo fisico viene formato combinando un segmento con un offset!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
Quote:
MOV SI,00FFh sopra: MOV DL,48d MOV AH,02h INT 21h INC SI CMP SI,0111h JE fine MOV BL,[SI] CMP AL,BL JNE sopra MOV DL,49d MOV AH,02h INT 21h CMP SI,0111h JNE sopra fine: HLT l'ho provato però dovrei apportare delle modifiche: -all'inizio se vedi bene mi visualizza sicuramente uno 0 poichè è sequanziale la decodifica del prog. -mi segna anche alla fine un'altro 0. calcolando tutte le allocazioni di memoria di offset ne risultano 17 (correggimi se sbaglio) quindi mi dovrebbe visualizzare 17 tra zero e uno; e invece me ne visualizza 19. come lo risolvo??? |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
inoltre mi visualizza sempre la stessa sequenza di zero e uno:
0000010000000000000 è normale o dovrebbe cambiare??? stavo pensando poi, ma in questi indirizzi i valori variano da pc a pc?? o sono già predefiniti per tutti dall'emulatore?? |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
inoltre (scusami se ti bombardo di domande) quando avvio l'emulkatore e immetto nel registro AL un valore, dopo mi altera tutto poichè viene cambiato durante l'esecuzione del prog.
cosa mi consigli di fare???? ciao |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
MOV SI,0100h
ciclo:
CMP SI,0111h
JE fine
MOV DL,48
CMP AL,[SI]
JNE stampa
INC DL
stampa:
MOV AH,02h
INT 21h
INC SI
JMP ciclo
fine:
HLT
MOV DL,48 CMP AL,[SI] JNE stampa INC DL Metto subito DL a 48 ('0') e poi confronto il valore. Quindi se non è uguale vado a stampa e stampo '0' altrimenti incremento DL (49) e stampo '1'. Molto lineare no?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quando si invocano questi interrupt bisogna sempre fare un po' di attenzione perché alcuni registri vengono certamente alterati. È il caso del registro AL e/o AH che in genere contengono un valore o codice di errore restituito dall INT chiamato. Una soluzione sarebbe quella di fare un PUSH AX prima dell'INT 21h e un POP AX dopo. Così ti salvi il registro AX.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Napoli
Messaggi: 355
|
Quote:
non sei affatto arrugginito anzi.. cmq ho risolto: ho visto quale registro non veniva alterato e l'ho sostituito con AL. l'ho sostituito con BL. ciao caso mai qualche altro ingrippo ti chiamo. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:03.




















