2016-04-09 14 views
-4

Ich schreibe ein Programm zum Drucken von 00 bis 60 in 60 Sekunden Verzögerung! Aber irgendwie funktioniert es nicht! Kannst du helfen?Stoppuhr Programm in 8086 Assembly

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

Bitte erklären, wie es "nicht funktioniert". – snakecharmerb

Antwort

2

Ihr Programm hat ein paar Probleme:

  • Da der Aufruf BIOS CX als eines seiner Parameter verwendet, können Sie Ihre Loop-Regelgröße effektiv zerstört haben! push/pop es:

    mov cx,100 
    secnd: 
    PUSH CX 
    ... 
    POP CX 
    loop secnd 
    ret 
    
  • Sie die eine Variable als Zehntel zu behandeln und die b Variable als Einheiten, sondern nur den früheren mit einer einzigen inc a ändern.
    Sie könnten diesen Ansatz wählen:

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