Здравейте,
> ама и да не е така то кой ли се занимава в днешно време с ?асемблер
Кой ли се занимава днес със
системните функции на DOS, не с асемблер... ;) Демота, програмиране на графични процесори, любители на ниското ниво, програмисти на микроконтролери и на MenuetOS...
![Smiley :)](https://forum.uni-plovdiv.net/Smileys/classic/smiley.gif)
>Сега си спомням за оня проект с графиката, дето целия курс
>трябваше да го пишем на асемблер преди 4 години!
Ще споделиш ли нещо повече за тоя проект?
Аз ще споделя статията си "Анализ на почти празен цикъл", в която пиша за тестове на Правец-8М, 8Д, Pentium 90 и Pentium 200 MMX на ниско и високо ниво и с различни машинни езици, асемблери и компилатори. :lol:
http://eim.hit.bg/eim21/analiz_21.htmhttp://geocities.com/eimworld/eim21/analiz_21.htmи "Как се чертае отсечка" в режим $13 с около 75 инструкции на 8086.
http://geocities.com/eimworld/eim22n/eim24/otsechka.htmИ не се въздържам да цитирам поне мъничко от първата статия.
![tongue :-P](https://forum.uni-plovdiv.net/Smileys/classic/tongue.gif)
Използвано е юнашко наречие... ;)
-----------
...
"Първият": Правец-8М, 6502/1.018 MHz
За любимия си Емчо съчиних следното стихче на вършачопис, което драгият MONITOR преведе на глаголица:
300: A9 00 LDA #$00, 2
302: 8D 00 50 STA $5000, 4
305: A2 00 LDX #00, 2
307: A0 00 LDY #00, 2
309: EE 00 50 INC $5000, 6
30C: 69 01 ADC 01, 2
30E: C9 10 CMP #$10, 2
310: F0 03 BEQ $0315, 2
312: 4C 09 03 JMP $309, 3
315: A9 00 LDA #00, 2
317: E8 INX, 2
318: E0 10 CPX #$10, 2
31A: F0 03 BEQ $031F, 2
31C: 4C 09 03 JMP $309, 3
31F: A2 00 LDX #00, 2
321: C8 INY, 2
322: C0 10 CPY #$10, 2
324: F0 03 BEQ $329, 2
326: 4C 09 03 JMP $309, 3
329: 20 DD FB JSR $FBDD, 6 (ЗВЪНЧЕ)
32C: 60 RTS, 6
Както се вижда, в него освен празната въртележка, има и увеличаване с единица на клетка от паметта ($309: INC $5000), което е доста тежка казба за 6502 - цели 6 удара на сърцето... Сигурно също се вижда, че натрапващата се шестнайска ($10) е броят повторения и на трите вложени въртележки, следователно:
Общият брой цикления е N*N*N = N^3.
За лесно въвеждане на N бе написано кратко глаголище на личната ми програмистка "Основа" - BASIC.
10 N = 250 (N, M = N*N*N)
20 POKE 783, N
30 POKE 793, N
40 POKE 803, N
50 CALL 768
Като завъртях сметачето на въртележката (1.018 MHz), при N = 250 (M = 250^3 = 15.625E6), то се наигра за около 231.7 секунди, като постигна скорост от около 1018000/231.7 = 67436 врътки/сек. "Брей, не е малко" - си рекох и погледнах стихчето, за да преброя колко казби има във всяка врътка на най-вътрешната въртележка. Пет са, като ги гледам:
309: EE 00 50 INC $5000, 6
30C: 69 01 ADC 01, 2
30E: C9 10 CMP #$10, 2
310: F0 03 BEQ $0315, 2
312: 4C 09 03 JMP $309, 3
Тогава 67346*5 = 336730 казби/сек... Ех, да не беше това INC $xxxx, то изяжда 40% от цялото време (6/15). Все пак, и 67346/сек не са малко за сметачето...
Колко обаче са на BASIC?
5 N = 20
10 I = 0: J = 0; K = 0
20 C = 0
50 FOR I = 1 TO N
60 FOR J = 1 TO N
70 FOR K = 1 TO N
80 C = C + 1
90 NEXT: NEXT: NEXT
100 ?CHR$(7)(ЗВЪН)
Пуснах глаголището при N = 20 и то изглаголи всичко за около 31.2 секунди, или 20*20*20 = 8000; 8000/31.2 = 256/сек. Брей, че бавно... Тогава махнах ред 80, да бъде само празна въртележка, и милото свърши само за 9.2 сек - около 870 врътки/сек.
256/сек, при около 250-350 хил. казби/сек (както установихме по-горе) означава, че мекицата на BASIC изпълнява поне около 1000 казби за всяка врътка...
...
-----------
Поздрави