2016-04-09 1 views
-4

J'écris un programme pour imprimer 00 à 60 en 60 secondes de retard! Mais d'une manière ou d'une autre ça ne marche pas! Pouvez-vous aider les gars?Programme Chronomètre dans l'assemblage 8086

org 100h 

.model small 
.stack 100h 
.data 
    a db 0 
    b db 0 
.code 
    main PROC 
    mov cx,100 
    secnd: 
    mov bl,a 
    add bl,48 
    mov bh,b 
    add bh,48 
    mov ah,2 
    mov dl,bl 
    int 21h 

    mov ah,2 
    mov dh,bh 
    int 21h 

    mov ah,2 
    mov dl,0dh 
    int 21h 

    mov dl,0ah 
    int 21h 

    MOV CX, 0FH 
    MOV DX, 4240H 
    MOV AH, 86H 
    INT 15H 

    inc a 
    loop secnd 
    ret 
+2

S'il vous plaît expliquer comment il "ne fonctionne pas". – snakecharmerb

Répondre

2

Votre programme a quelques problèmes:

  • Depuis l'appel du BIOS utilisé CX comme l'un de ses paramètres, vous avez effectivement détruit votre variable boucle de contrôle! push/pop il:

    mov cx,100 
    secnd: 
    PUSH CX 
    ... 
    POP CX 
    loop secnd 
    ret 
    
  • Vous traitez la une variable en dixièmes et la variable sous forme d'unités b, mais vous ne changer que l'ancien avec un seul inc a.
    Vous pouvez choisir cette approche:

    ... 
    inc b 
    cmp b,10 
    jb done 
    mov b,0 
    inc a 
    done: 
    POP CX 
    loop secnd 
    ret