Rev 483 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
461 | Lrz | 1 | ; Макрос выхода |
2 | macro edit_ex |
||
3 | { |
||
4 | popa |
||
5 | ret |
||
6 | } |
||
7 | macro debug |
||
8 | { |
||
9 | ;----------- отладка |
||
10 | pushad |
||
11 | ; mov dword [ed_buffer.2],0 |
||
12 | ; mov eax,edi |
||
13 | mov eax,dword [ed_buffer.2] |
||
14 | mov edi,ed_buffer.3 |
||
15 | call .str |
||
16 | ;рисование фона |
||
17 | mov eax,13 |
||
18 | mov ebx,178*65536+70 |
||
19 | mov ecx,28*65536+10 |
||
20 | xor edx,edx |
||
21 | int 0x40 |
||
22 | ;вывод значения на экран |
||
23 | mov eax,4 |
||
24 | mov ebx,180*65536+30 |
||
25 | mov ecx,0x10DDBBCC |
||
26 | mov edx,ed_buffer.3 |
||
27 | mov esi,8 |
||
28 | int 0x40 |
||
29 | popad |
||
30 | ;----------- отладка |
||
31 | } |
||
32 | macro debug_func |
||
33 | { |
||
34 | .str: |
||
35 | mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число |
||
36 | ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной |
||
37 | cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax |
||
38 | jb @f |
||
39 | xor edx,edx ;очистить edx |
||
40 | div ecx ;разделить - остаток в edx |
||
41 | push edx ;положить в стек |
||
42 | ;dec edi ;смещение необходимое для записи с конца строки |
||
43 | call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx |
||
44 | pop eax |
||
45 | @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) |
||
46 | ;sbb al,$69 ;- честно данная инструкция меня заставляет задуматься т.е. я не знаю как это работает |
||
47 | ;das ;после данной команды как бы происходит уменьшение al на 66h (в книге написано другое) |
||
48 | or al,0x30 ;данная команда короче чем две выше |
||
49 | stosb ;записать элемент из регистра al в ячеку памяти es:edi |
||
50 | |||
51 | ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться |
||
52 | } |