View Full Version : Programma in assembly 8086
vale2597
21-03-2014, 11:40
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.
lorenzo001
21-03-2014, 12:09
http://www.hwupgrade.it/forum/showthread.php?t=1631648
vale2597
21-03-2014, 12:16
Ah non lo sapevo, scusate.
Vabene se a pomeriggio posto il codice con gli errori commessi?
lorenzo001
21-03-2014, 12:22
Beh ... postali adesso ... e poi, se conosci gli errori, come mai non rimedi?
vale2597
21-03-2014, 16:29
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
lorenzo001
21-03-2014, 16:49
E gli errori di cui parlavi?
vale2597
21-03-2014, 17:42
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
vale2597
21-03-2014, 18:29
Ecco l'errore che non riesco a risolvere
http://i58.tinypic.com/302ri3t.png
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.