Confronto di due numeri interi

di il
1 risposte

Confronto di due numeri interi

Dati SEGMENT
    vett db 2 dup(0)
    max db ?
    min db ?
    inserisci1 db "Inserisci la prima cifra da comparare",0dh,0ah,"$"
    inserisci2 db "Inserisci la seconda cifra da comparare",0dh,0ah,"$"
    magg db "Il maggiore e'",0dh,0ah,"$"
    mino db "il minore e'",0dh,0ah,"$"
Dati ENDS

Sistema SEGMENT STACK
    DW 100 DUP (?)
    Top LABEL WORD
Sistema ENDS

Codice SEGMENT
    ;definizione dei segmenti
    ASSUME CS:Codice, SS:Sistema, DS:Dati, ES:Dati
    Inizio: 
    ;inizializzazione dei registri di segmento
    MOV AX,Sistema
    MOV SS,AX
    LEA AX,Top
    MOV SP,AX
    MOV AX,Dati
    MOV DS,AX
    MOV ES,AX
    ;programma
    lea dx, inserisci1
    mov ah,09h
    mov al,00h
    int 21h
    mov ah,01h
    mov al,00h
    int 21h
    sub al, 48d
    mov di,00d
    mov [vett+di],al
    inc di
                             
    ;SPAZIO
    MOV DL,13
    MOV AH,02h
    INT 21h
    MOV DL,10d
    MOV AH,02h
    INT 21h
     
    lea dx,inserisci2
    mov ah,09h
    mov al,00h
    int 21h
    mov ah,01h
    mov al,00h
    int 21h
    sub al, 48d
    mov [vett+di],al
    mov di,00d
    mov al,[vett+di]
    inc di
    mov bl,[vett+di] 
    ;if
    cmp ax,bx
    jng else1
    mov min,bl
    mov max,al
    lea dx, magg
    mov ah,09h
    mov al,00h
    int 21h
    mov dl,max
    add dl,48d
    mov ah,02h
    mov al,00d
    int 21h
                             
    ;SPAZIO
    MOV DL,13
    MOV AH,02h
    INT 21h
    MOV DL,10d
    MOV AH,02h
    INT 21h 
    lea dx,mino
    mov ah,09h
    mov al,00h
    int 21h
    mov dl,min
    add dl,48d
    mov ah,02h
    mov al,00d
    int 21h  
    jmp fine
    else1:
    mov min,al
    mov max,bl
    lea dx, magg
    mov ah,09h
    mov al,00h
    int 21h
    mov dl,max
    add dl,48d
    mov ah,02h
    mov al,00h
    int 21h
                             
    ;SPAZIO
    MOV DL,13
    MOV AH,02h
    INT 21h
    MOV DL,10d
    MOV AH,02h
    INT 21h 
    
    lea dx,mino
    mov ah,09h
    mov al,00h
    int 21h
    mov dl,min
    add dl,48d
    mov ah,02h
    mov al,00d
    int 21h 
    fine:
    ; riporto
    mov al,00h
    mov ah,4ch
    int 21h
    codice ends
end inizio


mi da un problemino quando ax<bx passa a dritto denza andare all'else

1 Risposte

  • Re: Confronto di due numeri interi

    Ciao
    uno dei gravi errori che ho notato è
    non è mov [vett+di],al
    ma è mov vett[di],al
    mi sembra strano che il compilatore non si sia incazzato!
    per quanto riguarda i segmenti ti consiglio le direttive .
    esempio .code per il codice
    .stack per lo stack nel quale però devi inserire anche la dimensione esempio .stack 100h
    ma se non ti serve è inutile definirlo
    esempio
    .model tiny ; ti dice il modello del programma serve per stabilire i tipi di ottimizzazione.
    .data ; segmento dati dove puoi definire tutte le variabili
    .code; segmento del codice
    assume cs:@code,ds:@data ;qui leghi i registri hai segmenti
    ;poi andrebbe definita una procedure
    prova proc near
    mov ax,@data
    mov ds,ax ; cosi inizializzi il registro ds facendolo puntare al segmento data
    l'argomento e molto lungo nonchè complesso (assembler non il tuo programma)
    comunque se ti interessa l'argomento vai su questo sito http://www.giobe2000.it
    è fantastico ed è pure in italiano cosa che non guasta mai
    spero di esserti stato d'aiuto
Devi accedere o registrarti per scrivere nel forum
1 risposte