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
ENDwarum 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...
-
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.
-
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.