|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Semplice programma assembly
Ciao, mi sono appena registrato.
In internet ho trovato questo codice, e l'ho modificato appena (parte in grassetto) Codice:
.model small .stack .data Message db "Hello World!$" ; message to be display num1 dw 10 num2 dw 5 res dw ? .code mov dx,OFFSET Message mov ax,SEG Message mov ds,ax mov ah,9 int 21h mov ax,4c00h int 21h mov bx,num1 mov cx,num2 add bx,cx mov res,bx int 21h mov res,4c00h int 21h END Come mai?? Altra domanda: cosa cambia tra asm e macro asm (masm) ?
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ultima modifica di repne scasb : 03-02-2005 alle 16:57. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
MMMH la stringa non l'ho modificata (Hello World lo stampa lo stesso)
Comunque 15 lo volevo stampare come risultato dell'addizione dei 2 numeri dove se ne dovrebbe occupare Codice:
mov bx,num1 mov cx,num2 add bx,cx ; somma di 5 + 10 mov res,bx ; res diventa 15 ... Ciao e grazie cmq
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." Ultima modifica di kniv7s : 26-06-2004 alle 11:53. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, ma devi stampare una cifra alla volta...
Codice:
.model small .stack .data Message db "Hello World!$" ; message to be display num1 dw 10 num2 dw 5 res dw ? .code mov dx,OFFSET Message mov ax,SEG Message mov ds,ax mov ah,9 int 21h mov bx,num1 mov cx,num2 add bx,cx mov ax, bx xor dx, dx mov cx, 10 div cx mov dh, dl mov dl, al ; move al (ascii code) into dl mov ah,02h ; function 02h of interrupt 21h int 21h ; call interrupt 21h mov dl, dh ; move al (ascii code) into dl mov ah,02h ; function 02h of interrupt 21h int 21h ; call interrupt 21h mov ax,4c00h int 21h END |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Ok grazie 1000
Ciao!
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Funziona ? Non l'ho provato...
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ultima modifica di repne scasb : 03-02-2005 alle 16:56. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sisi lo sapevo...me lo sono scordato
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: Milano
Messaggi: 402
|
Re: Semplice programma assembly
Quote:
__________________
Phenom 2 555 X2@X4@3,6Ghz 1.33v Asus M4A785TD-V EVO 4GB Team Group Elite 1333Mhz AC Freezer Xtreme Corsair 450VX Samsung SyncMaster T220 Hd Seagate 500x2(Raid 0) Barton 2500+@3200+ vcore 1.550 (liquid cooled@+9° T.A.) Asus A7N8X-E Dlx 1Gb Ram Dual DDR Hd Maxtor SATA 160x2(Raid 0) GeXCube 9600XT Eizo 19P Le belle cose hanno un inizio e una fine...tutto il resto è la normalità |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Grazie x le risposte e x la disponibilita' non appena avro' tempo di testare il programma vi faro' sapere intanto, avrei una domanda: c'è incompabilità fra compilatori e compilatori (assembler) ?
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Assemblatori
Certo che ci sono incompatibilità... Si dividono principalmente in due grandi famiglier... Sintassi Microsoft e sintassi AT&T... La sintassi AT&T ad esempio inverte sorgente e destinazione delle istruzioni con due operandi rispetto al codice che hai scritto (sintassi Microsoft)... Nella sintassi AT&T ci sono caratteri che identificano i registri (%) e valori... Inoltre mi sembra che sia obbligatorio specifcare la dimensione degli operandi (long word byte etc etc)... movw %ax, %bx Al interno delle varie famiglie poi c'è un'ulteriore differenza per cui ogni compilatore, fissata una sintassi delle istruzioni, introduce anche differenti direttive ai compilatori...vedi Borland TASM e Microsoft MASM... Ultima modifica di cionci : 27-06-2004 alle 18:59. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Sintassi Intel , ti prego , il nome Sintassi MICROSOFT mi fa venir meno
__________________
GPU Compiler Engineer |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...hai ragione
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
MMMH, ho controllato e il codice che mi avete dato funziona.
Comunque io uso TASM. Ora vorrei porvi un ultimo quesito nato dalla lettura oggi, di un libro su microprocessori intel della famiglia 8088 : come mai questi 2 assembly sono diversi? 1: quello dato da voi Codice:
.model small .stack .data num1 dw 10 num2 dw 5 .code Start: mov ax,@data mov ds,ax mov bx,num1 mov cx,num2 add bx,cx mov ax,bx xor dx,dx mov cx,10 div cx push dx add al,'0' mov dl,al mov ah,2h int 21h pop dx add dl,'0' mov ah,2h int 21h mov ax,4C00h int 21h END Start e questo Codice:
STACK SEGMENT PARA STACK 'STACK'
STACK ENDS
;
DATA SEGMENT PARA PUBLIC 'DATA'
num1 dw 10
num2 dw 5
DATA ENDS
;
CODE SEGMENT PARA PUBLIC 'CODE'
assume cs:code
assume es:data ; mov ax,@data
mov ds,ax
mov bx,num1
mov cx,num2
add bx,cx
mov ax,bx
xor dx,dx
mov cx,10
div cx
push dx
add al,'0'
mov dl,al
mov ah,2h
int 21h
pop dx
add dl,'0'
mov ah,2h
int 21h
mov ax,4C00h
int 21h
CODE ENDS
ps.: nel secondo mi dà 1 warning e 1 fatal error ( unexpected end of file encountered). Ciao
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il code assembly è lo stesso... Sono le direttive all'assemblatore che sono diverse... Quello appunto è per Microsoft MASM
|
|
|
|
|
|
#16 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ultima modifica di repne scasb : 03-02-2005 alle 16:56. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io dicevo che il modo di scrivere le istruzioni è lo stesso... Il codice non l'ho nemmeno guardato...sono 3-4 anni che non prendo in mano il MASM
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Ritornando sull'assembly, non mi è chiara la funzione di questo tratto di codice:
Codice:
mov ax,bx xor dx,dx mov cx,10 div cx push dx add al,'0' mov dl,al mov ah,2h int 21h pop dx add dl,'0' mov ah,2h int 21h mov ax,4C00h int 21h
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Tutto in pratica
Codice:
;metto il risultato dell'addizione in ax
mov ax,bx
;azzero dx
xor dx,dx
;metto 10 in cx
mov cx,10
;divido il contenuto di ax per cx, risultato in ax e resto in dx
div cx
;metto nello stack il contenuto di dx (che devo sporcare)
push dx
;aggiungo il caratter '0' perchè i numero sono rappresentati in ASCII da '0' in poi
add al,'0'
;metto in dl il carattere da stampare
mov dl,al
;seleziono la funzione 2h dell'int 21h
mov ah,2h
;richiamo l'interrupt 21h
int 21h
;riprendo il resto della divisione che avevo salvato
pop dx
;aggiungo '0' per lo stesso motivo precedente
add dl,'0'
mov ah,2h
int 21h
;esco al DOS
mov ax,4C00h
int 21h
Quote:
|
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Ok, perfetto! Grazie!
Ho trovato alcuni sorgenti su internet, ma davvero pochi. Conoscete voi un sito che ne offra parecchi? Ciao
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:26.



















