MOV Frage



  • .MODEL SMALL
    .CODE
    MOV DL,00
    M1: MOV AH,02
    INT 21H
    INC DL
    MOV BX,80H
    M3: MOV CX,0FFFFH
    M2: DEC CX
    JNZ M2
    DEC BX
    JNZ M3
    JMP M1
    END

    warum macht man hier MOV BX,80H
    und darunter MOV CX,0FFFFH
    ???



  • es scheint eine art verzögerung zu sein, damit das programm nicht zu schnell abläuft.
    dabei benutzt der programmierer hier zwei schleifen. die eine ist in die andere verschachtelt.
    dabei ist 80H = 128 und 0FFFFh = 65535
    CX wird also erst 65535 mal decrementiert und danach wird BX decrementiert. das ganze passiert 128 mal. also insgesamt 128*65535 mal decrementiert. danach wird das zeichen ausgegeben, dessen ascii code in DL steht. DL wird incrementiert und es wird wieder die doppelschleife durchlaufen. usw...


  • Mod

    der sinn von

    M3: MOV CX,0FFFFH
    

    ist allerdings trotzdem zweifelhaft 😉



  • camper schrieb:

    der sinn von

    M3: MOV CX,0FFFFH
    

    ist allerdings trotzdem zweifelhaft 😉

    Verstehe ich nicht. Willst du auf das Zweierkomplement anspielen? Das spielt hier sowieso keine Rolle. Von -1 muss man dann trotzdem 65535 dekrementieren, bis man die Null erreicht.

    Anmerkung:
    Hast recht. Es hätte ein einmaliges Nullsetzen des Registers CX genügt.


  • Mod

    für den zweck der verzögerung ist es sogar völlig egal welchen wert cx anfangs hat. evtl. abgesehen vom ersten durchgang ist die länge der schleife auf jedenfall wohldefiniert. und der code macht einfach nicht den eindruck, als ob es auf die exakte anzahl ankäme.


Anmelden zum Antworten