Subversion Repositories Kolibri OS

Rev

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
}