Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TITLE quattro_operazioni
- .MODEL MEDIUM
- .STACK 100h
- .DATA
- my1Var BYTE ? ; Dichiarazione, come scrivere "char a;" Char = 8 bit
- my2Var BYTE ?
- somma DB ? ; Double byte = 8 bit x 2 = 16 bit = 2 byte
- dif DB ?
- pro DB ?
- quo DB ?
- .CODE
- MOV AL,0h
- MOV AH,01h ; Servizio di DOS per input
- INT 21h
- MOV my1Var,AX ; Assegno alla variabile di 8 bit il contenuto del registro AX
- ; Puo' sembrare sbagliato ma il registro AX ha solo 8 bit su 16 occupati
- MOV AL,0h
- MOV AH,01h
- INT 21h
- MOV my2Var,AX
- ; Adesso hai le due variabili con le robe dentro
- ADD my1Var,my2Var
- MOV somma,my1Var
- SUB my1Var,my2Var
- MOV dif,my1Var
- MOV AH,0h
- MOV AL,my2Var
- MUL my1Var ; Dato che la dimensione dell'operano e' 8 bit lo moltiplica per la parte alta (AL)
- ; Se fosse stato 16 bit lo avrebbe moltiplicato per tutto AX, e verrebbe messo nella coppia DX:AX
- ; Il prodtto nostro invece sta in AX ora, quindi...
- MOV pro,AX
- DIV my2Var ; La dimensione dell'operando e' 8 bit quindi divide quello che sta in AX per my2Var
- ; Il quoziente finisce nella parte alta AL e il resto nella parte bassa AH
- ; Se era 16 bit avrebbe diviso (32 bit) DX:AX per l'operando che hai messo te, mettendo il quoziente in AX (16 bit) e il resto in DX (16 bit)
- MOV quo,AL
- ; Se vuoi stamparli chiami il servizio di DOS 09h
- MOV AL,0h
- MOV AH,09h
- LEA DX,somma
- INT 21h
- MOV AL,0h
- MOV AH,09h
- LEA DX,dif
- INT 21h
- MOV AL,0h
- MOV AH,09h
- LEA DX,pro
- INT 21h
- MOV AL,0h
- MOV AH,09h
- LEA DX,quo
- INT 21h
- MOV AH,4Ch
- INT 21h
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement