این برنامه بصورتی کار میکنه که مقدار طول ها و تعداد شکل ها رو از Data Segment چک میکنه و بعد از هر بار دور زدن از تعداد ستاره های قابل چاپ شدن کم مینه و cursor رو به داخل shift میکنه تا شکل بعدی رو با ابعاد جدید نمایش بده, سورس رو میتونید از داخل صفحه کپی کنید, این سورس با Emu 8086 نسخه 4 به بالا سازگاره..
; multi-segment executable file template. data segment ; add your data here! pkey db "YEAHHHHH!!!..$" ;my data: rac db -2 ;for modifying the position of cursor wah db 19 ;size of shapes round db 5 ;my data ends. ends stack segment dw 128 dup(0) ends code segment start: ; set segment registers: mov ax, data mov ds, ax mov es, ax ; add your code here ;my code: sto:;star row MOV CH,wah ;counter for stars, starting at 19 MOV CL,rac MOV BL,rac INC CL INC CL INC BL INC BL nxc:MOV AH,2 ; MOV DL,CL ;>columns. MOV DH,BL ;>modifying the cursor position MOV BH,0 ; starting from -2(0). INT 10H ; MOV DL,'*' ; MOV AH,2 ;>printing stars INT 21H ; INC CL DEC CH ;1 star rows JNZ nxc ; ;star column MOV CH,wah nxr:MOV AH,2 ; MOV DL,CL ;>columns:static MOV DH,BL ;>rows:dynamic MOV BH,0 ; INT 10H ; MOV DL,'*' ; MOV AH,2 ;>printing stars INT 21H ; INC BL DEC CH JNZ nxr ;star row back MOV CH,wah nxt:MOV AH,2 ; MOV DL,CL ;>columns:dynamic MOV DH,BL ;>rows:static MOV BH,0 ; INT 10H ; MOV DL,'*' ; MOV AH,2 ;>printing stars INT 21H ; DEC CL DEC CH JNZ nxt ;star column back MOV CH,wah nxs:MOV AH,2 ; MOV DL,CL ;>columns:dynamic MOV DH,BL ;>rows:static MOV BH,0 ; INT 10H ; MOV DL,'*' ; MOV AH,2 ;>printing stars INT 21H ; DEC BL DEC CH JNZ nxs ;next round INC rac INC rac DEC wah DEC wah DEC wah DEC wah DEC round JNZ sto ;set position for "wait for any key...." MOV AH,2 ; MOV DL,4 ;>columns:dynamic MOV DH,22 ;>rows:static MOV BH,0 ; INT 10H ; ;my code ends. lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h ends end start ; set entry point and stop the assembler.