PDA

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

das
23-03-2014, 11:49
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