Dunque, ho un problema in un esercizio che richiedere il calcolo di un'equazione di primo grado del tipo Y=AX+B. Conoscendo, in entrata, i valori di A,X e B, calcolare quindi Y. Palese quindi che dovrò usare le istruzioni ADD e MUL. E penso che l'errore sia proprio in quest'ultima, dato che non riesco a spostare il contenuto di AX, dove va a finire il prodotto.
Comunque, ecco il codice che ho scritto fino ad ora.
Usando TASM, viene restituito l'errore relativo alla riga 79, ovvero "MOV Ris,AX", "Operand types do not match".
Non riesco a capire perchè non me lo faccia fare, dato che ho praticamente seguito il codice di un programma fatto dal mio prof, in cui moltiplicava due numeri giàspecificati nel programma.
Che ne pensate?
PS:scusate la pessima formattazione del codice (copiato pari pari da Notepad++).
Comunque, ecco il codice che ho scritto fino ad ora.
Codice:
;programma che, dati in ingresso A, B e X (a 1 Byte), risolva l'equazione di primo grado Y = A*X+B (Y a 2 Byte).
Dati SEGMENT ; definizione dati usati nel programma
X DB 'inserire la x: ','$'
A DB 'inserire il coefficiente della x: ','$'
B DB 'inserire il termine noto: ','$'
msg DB 'Il risultato e: ','$'
Primo DB ?
Secondo DB ?
Terzo DB ?
Ris DB ?
Dati ENDS
Sistema SEGMENT STACK ; definiamo uno stack di 100 bytes
DW 100 DUP (?)
Top LABEL WORD
Sistema ENDS
Codice SEGMENT
; Definizione dei segmenti
; ASSUME serve a definire a quale puntatore potràssere assegnato la struttura
ASSUME CS: Codice, SS:Sistema, DS:Dati, ES:Dati
ORG 0100H
;Inizializzazione dei registri di segmento
Inizio: MOV AX,sistema
MOV SS,AX
LEA AX,Top
MOV SP,AX
MOV AX,Dati
MOV DS,AX
MOV ES,AX
LEA DX,X ;visualizzazione della frase
MOV AX,0900H
INT 21H
MOV AH,01H ;lettura numero
INT 21H
SUB AL,48
MOV Primo,AL
MOV DL,10 ;riga successiva
MOV AH,02H
INT 21H
MOV DL,13 ;inizio riga
MOV AH,02H
INT 21H
LEA DX,A ;visualizzazione della frase
MOV AX,0900H
INT 21H
MOV AH,01H ;lettura numero
INT 21H
SUB AL,48
MOV Secondo,AL
MOV DL,10 ;riga successiva
MOV AH,02H
INT 21H
MOV DL,13 ;inizio riga
MOV AH,02H
INT 21H
LEA DX,B ;visualizzazione della frase
MOV AX,0900H
INT 21H
MOV AH,01H ;lettura numero
INT 21H
SUB AL,48
MOV Terzo,AL
MOV DL,10 ;riga successiva
MOV AH,02H
INT 21H
MOV DL,13 ;inizio riga
MOV AH,02H
INT 21H
MOV AL,Primo
MOV BL,Secondo
MUL BL ; AX = AL * BL
MOV Ris,AX
MOV AL,Terzo
ADD Ris,AL
MOV AL,Ris
MOV DL,AL
LEA DX,msg ;visualizzazione della frase
MOV AX,0900H
INT 21H
MOV AH,02H ;scrittura risultato
INT 21h
MOV AH,01H ;attesa lettura carattere
INT 21H
; ritorno al sistema operativo
MOV AL,00H
MOV AH,4CH
INT 21H
Codice ENDS ; ENDS fine segmento
END inizio
Non riesco a capire perchè non me lo faccia fare, dato che ho praticamente seguito il codice di un programma fatto dal mio prof, in cui moltiplicava due numeri giàspecificati nel programma.
Che ne pensate?
PS:scusate la pessima formattazione del codice (copiato pari pari da Notepad++).