Kod SEGMENT ASSUME CS:Kod szam dw 3240 binkiir MACRO hova mit local cikl, tovabb MOV di,40 ;1. sor 20. poziciotol fogok kiirni MOV AX, szam ;Ax-be beolvassuk a szam erteket MOV CX,16 Cikl: MOV BL,"0" ; bl-be "0"-t teszunk karakteresen SHL AX,1 ;legfelso bit a cf-ben van, ezt vizsgalom majd, jump-pal teszteljuk jnc tovabb ;if cf=0, then jump (kihagyom az igaz agat) inc bl ;bl=bl+1 tovabb: mov [di],bl ;kiirja a kepernyore add di,2 ;kepernyon 2 byte-ot lepek elore, hogy a di a kov kepernyo helyre mutasson Loop Cikl ENDM START: CALL Torles ;igy hivjuk meg az eljarast ;bevezetes ;kepernyore kiiras inicializalasa MOV AX,0b800h MOV ds,ax MOV di,40 ;1. sor 20. poziciotol fogok kiirni ;most kezdjuk a ciklust, 16 bit-et irunk ki MOV AX, szam ;Ax-be beolvassuk a szam erteket ;mov ax, offset szam azt jelenti, hogy nem a szam cimke alatal mutatott erteket olvassuk be, hanem az eltolas erteket, ez most 0 lenne. ;erre indirekt cimzesi utasitasok eseten van szukseg. ; cx-be irjuk, hogy hanyszor menjen a ciklus MOV CX,16 Cikl1: MOV BL,"0" ; bl-be "0"-t teszunk karakteresen SHL AX,1 ;legfelso bit a cf-ben van, ezt vizsgalom majd, jump-pal teszteljuk ; ha c=1 then bl=bl+1-t kell gepi kodba tenni jnc tovabb1 ;if cf=0, then jump (kihagyom az igaz agat) inc bl ;bl=bl+1 tovabb1: mov [di],bl ;kiirja a kepernyore add di,2 ;kepernyon 2 byte-ot lepek elore, hogy a di a kov kepernyo helyre mutasson Loop Cikl1 ;most jon a decimalis kiiras, 10-zel osztunk maradekosan ;div 1 parametert szeret, hogy mivel szeretnek osztani dx:ax-et osztja a parameterrel ;dx-be kerul a maradek, az ax-be kerul az egeszresz MOV di,200 ;2. sor 20. poziciotol fogok kiirni MOV bx,10 ;10-zel fogunk osztani MOV ax,szam ;also helyiertek MOV dx,0 ;felso helyiertek 0, mert elfer ax-ben a szam ;osztas utan a dx-be kerul a maradek, ami most 0-9 lehet, ezert igazibol csak a dl-be fog kerulni Cikl2: MOV cl,"0" ;elobb bl-bol, de most bx-et hasznaljuk DIV bx ;ez utan dl-be kerul a maradek ADD cl,dl ;dl-ben van a maradek MOV [di],cl ;kiirja a kepernyore ;ADD di,2 mert a maradekokat jobbrol balra kell kiirni SUB di,2 MOV dl,0 ;akkor kell ujra osztani, ha az ax-ben van maradek CMP ax,0 ;ax-t 0-ban hasonlitom (ax-be kerul az egeszresz) jnz cikl2 binkiir 80, 3240 ;billentyuzetrol "3240"-kent olvassuk ve a szamot, ebbol kell konvertalni word-ot ;16h-hoz kotott a bill beolvaso interrupt ;hazi feladat ;vege MOV AH,4CH ;BEFEJEZI A PROGRAMOT INT 21H ;dos funkciót hív ;ide jönnek az eljárások, mert itt már nem zavarnak a kódban a DOS-ba való ;visszatérés után Torles PROC MOV AX,3 ;képernyőtörlés rutin, ax alapján dönti el, hogy 40 karakter/sor vagy 80 -- ld help ;ax,3=ax,0003h ezt a fordító kezeli INT 10h RET ;visszaugrik arra a mem címre, ahonnan meghívták ;különben a következő mem cím szemetét próbálja utasításként értelmezni Torles ENDP ;proc lezárása ;makro: lehet parametere mindig a hasznalat elott kell irni, start elott kotelezoen Kod ENDS END START ;utolsó szegmens után kell, idáig fordít a fordító