|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2014
Messaggi: 5
|
Programma in assembly 8086
Il comando è:
"Letto un numero N, da tastiera, se maggiore di 5 visualizzarlo altrimenti visualizzare tutti i numeri da 1 a N." Devo usare il CICLO LOOP con CMP. Grazie a chi è disposto a darmi una mano. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2014
Messaggi: 5
|
Ah non lo sapevo, scusate.
Vabene se a pomeriggio posto il codice con gli errori commessi? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Beh ... postali adesso ... e poi, se conosci gli errori, come mai non rimedi?
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2014
Messaggi: 5
|
Questo è il codice che sono riuscito a fare.
.MODEL SMALL .STACK 100 .DATA NUM1 DB ? ris db ? dom1 DB "INSERISCI IL PRIMO VALORE: " ,13,10,"$" risp1 db "il numero e': " ,13,10,"$" risp2 db "I numeri che vanno da 1 alla somma sono: " ,13,10,"$" .CODE MOV AX,@DATA MOV DS,AX LEA DX,dom1;visualizza stringa MOV AH,9 INT 21H MOV AH,1 ;acquisizione valore INT 21H SUB al,30H ;coversione valore cmp num1,5 jb ciclo ciclo: inc ris LEA DX,risp2 mov ah,9 int 21H mov dl,ris mov ah,2 int 21h cmp ris,al jl ciclo jmp fine LEA DX,risp1 mov ah,9 int 21H mov dl,num1 mov ah,2 int 21h fine: MOV AH,4CH ;fine INT 21H END |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
E gli errori di cui parlavi?
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Mar 2014
Messaggi: 5
|
Ho corretto delle cose. Allora il numero da acquisire va da 0 a 9.
Gli errori gli ho commessi nel ciclo molto sicuramente. .MODEL SMALL .STACK 100 .DATA NUM1 DB ? ris db ? dom1 DB "INSERISCI IL PRIMO VALORE: " ,13,10,"$" risp1 db "il numero e': " ,13,10,"$" risp2 db "I numeri che vanno da 1 al numero inserito sono : " ,13,10,"$" .CODE MOV AX,@DATA MOV DS,AX LEA DX,dom1;visualizza stringa MOV AH,9 INT 21H MOV AH,1 ;acquisizione valore INT 21H SUB al,30H ;coversione valore cmp al,5 jg vis jbe ciclo ciclo: inc ris dec al LEA DX,risp2 mov ah,9 int 21H mov dl,ris mov ah,2 int 21h cmp al,0 jg ciclo je fine vis: LEA DX,risp1 mov ah,9 int 21H mov num1,al mov dl,num1 mov ah,2 sub dl,30h int 21h jmp fine fine: MOV AH,4CH ;fine INT 21H END |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Mar 2014
Messaggi: 5
|
Ecco l'errore che non riesco a risolvere
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1382
|
Non conosco l'assembler dell 80x86 ma vedo due cose:
------1-------- La variabile ris dovrebbe partire da 30H che corrisponde alla rappresentazione grafica dello 0. Quella è la ragione per cui ti compaiono a video tutti i simbolini strani. ------2-------- Sei sicuro che la chiamata all'interrupt (INT21) non vada a modificare il registro AL ? Io me lo salverei da qualche parte poi chiamerei INT21 e poi rispristinerei AL. Ciao |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:33.



















