Rev 2288 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2288 | Rev 3539 | ||
---|---|---|---|
Line 22... | Line 22... | ||
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 | ;***************************************************************************** |
25 | ;***************************************************************************** |
Line 26... | Line 26... | ||
26 | 26 | ||
27 | ;òóò ðàñïîëîãàåòñÿ ìîäóëü ñ ïîìîùüþ êîòîðîãî áóäóò ïàðñèòüñÿ âñå îñòàëüíûå ñåêöèè |
27 | ;тут распологается модуль с помощью которого будут парситься все остальные секции |
28 | color_sym_black equ 0 |
28 | color_sym_black equ 0 |
29 | color_sym_blue equ 1 |
29 | color_sym_blue equ 1 |
30 | color_sym_green equ 2 |
30 | color_sym_green equ 2 |
31 | color_sym_turquoise equ 3 |
31 | color_sym_turquoise equ 3 |
Line 38... | Line 38... | ||
38 | color_sym_pink equ 12 |
38 | color_sym_pink equ 12 |
39 | color_sym_yellow equ 14 |
39 | color_sym_yellow equ 14 |
Line 40... | Line 40... | ||
40 | 40 | ||
41 | macro use_any_sec |
41 | macro use_any_sec |
42 | { |
42 | { |
43 | ;óçíàåì ðàáîòó ïðåäûäóùåãî øàãà ò.å. ÷åìó = timeout, åñëè îí 0, òî âèçóàëüíàÿ ÷àñòü íå áóäåò îòîáðàæåíà íà äèñïëåå ñ âûáîðîì çàãðóçî÷íûõ ñåêöèé. |
43 | ;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций. |
Line 44... | Line 44... | ||
44 | ;èíà÷å ìû åå äîëæíû îòîáðàçèòü è æäàòü çàÿâëåíîå âðåìÿ äëÿ âûáîðà è êîíèãóðèðîâàíèÿ ïóêíêòîâ ñåêöèè îò ïîëüçîâàòåëÿ. |
44 | ;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя. |
45 | 45 | ||
46 | if DEBUG |
46 | if DEBUG |
47 | pusha |
47 | pusha |
48 | mov ax, word [value_timeout];èäåò ïðîâåðêà íà íàëè÷åå çíà÷åíèÿ timeout, äëÿ áîëåå áûñòðîé ðàáîòû, ýòîò ïàðàìåòð äîëæåí áûòü óæå îáðàáîòàí,ò.å. â ýòîì ñëó÷àå ïðè åãî =0 áóäåò ñôîðìèðîâàí óêàçàòåëü òîëüêî íà äåôîëòíóþ ñåêöèþ, èíà÷å èíôîðìàöèÿ áóäåò ñîáðàíà ïî âñåì ñåêöèÿì è ñîñòàâëåíû óêàçàòåëè â áëîêå ïàìÿòè |
48 | mov ax, word [value_timeout];идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти |
49 | ; mov ax,cx |
49 | ; mov ax,cx |
50 | mov cx, 0x0a |
50 | mov cx, 0x0a |
51 | mov di, show_db1 |
51 | mov di, show_db1 |
Line 60... | Line 60... | ||
60 | end if |
60 | end if |
Line 61... | Line 61... | ||
61 | 61 | ||
62 | test ax, ax |
62 | test ax, ax |
Line 63... | Line 63... | ||
63 | jz .parse_run_only |
63 | jz .parse_run_only |
64 | 64 | ||
65 | ;îòîáðàçèì ïîëíûé ñïèñîê âñåõ íàéäåíûõ ñåêöèé. |
65 | ;отобразим полный список всех найденых секций. |
66 | if DEBUG |
66 | if DEBUG |
67 | pusha |
67 | pusha |
68 | mov si, show_all_sect |
68 | mov si, show_all_sect |
69 | call printplain |
69 | call printplain |
70 | popa |
70 | popa |
71 | end if |
71 | end if |
72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
73 | mov al, 0xf6 ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå |
73 | mov al, 0xf6 ; Сброс клавиатуры, разрешить сканирование |
74 | out 0x60, al |
74 | out 0x60, al |
75 | xor cx, cx |
75 | xor cx, cx |
76 | .wait_loop: ; variant 2 |
76 | .wait_loop: ; variant 2 |
Line 100... | Line 100... | ||
100 | ; get start time |
100 | ; get start time |
101 | call gettime |
101 | call gettime |
102 | mov dword [start_timer], eax |
102 | mov dword [start_timer], eax |
103 | mov word [timer_], newtimer |
103 | mov word [timer_], newtimer |
104 | mov word [timer_+2], cs |
104 | mov word [timer_+2], cs |
105 | ;óñòàíîâèòü ñâîå ïðåðûâàíèå íà òàéìåð ò.å. êîä áóäåò ïåððûâàòüñÿ ~18 ðàç â ñåê è ïåðåõîäèòü íà îáðàáîò÷èê |
105 | ;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик |
106 | cli |
106 | cli |
107 | push 0 |
107 | push 0 |
108 | pop es |
108 | pop es |
109 | push dword [es:8*4] |
109 | push dword [es:8*4] |
110 | pop dword [old_timer] |
110 | pop dword [old_timer] |
111 | push dword [timer_] |
111 | push dword [timer_] |
112 | pop dword [es:8*4] |
112 | pop dword [es:8*4] |
113 | sti |
113 | sti |
Line 114... | Line 114... | ||
114 | 114 | ||
115 | ;ïðîöåäóðà ôîðìèðîâàíèÿ áóôåðà äëÿ ñêðîëèíãà ñåêöèé |
115 | ;процедура формирования буфера для скролинга секций |
116 | ;if DEBUG |
116 | ;if DEBUG |
117 | ; pusha |
117 | ; pusha |
118 | ; mov ax,point_default |
118 | ; mov ax,point_default |
119 | ; mov ax,cx |
119 | ; mov ax,cx |
Line 128... | Line 128... | ||
128 | ; |
128 | ; |
129 | ; xor ax,ax |
129 | ; xor ax,ax |
130 | ; int 0x16 |
130 | ; int 0x16 |
131 | ; popa |
131 | ; popa |
132 | ;end if |
132 | ;end if |
133 | ;;;;;;;;;;;;;ðàçìåð ïðåäûäóùåé ñåöèè óñòàíîâèì =0 |
133 | ;;;;;;;;;;;;;размер предыдущей сеции установим =0 |
134 | mov save_descript_size, 18 |
134 | mov save_descript_size, 18 |
135 | ;îòîáðàçèòü black screen |
135 | ;отобразить black screen |
136 | show_bl_sc ;es=0xb800 |
136 | show_bl_sc ;es=0xb800 |
137 | .show_all_scr: |
137 | .show_all_scr: |
138 | get_frame_buffer ;es=0x2000 |
138 | get_frame_buffer ;es=0x2000 |
139 | ;îòîáðàæåíèå ñåêöèé |
139 | ;отображение секций |
140 | call show_bl_sc_sect ;es=0xb800 |
140 | call show_bl_sc_sect ;es=0xb800 |
141 | ;îòîáðàçèòü àêòèâíûé êóðñîð |
141 | ;отобразить активный курсор |
142 | .show_active_cursor: |
142 | .show_active_cursor: |
143 | show_act_cursor |
143 | show_act_cursor |
144 | show_descript ;ìàêðîñ ïî îòîáðàæåíèþ îïèñàíèÿ ñåêöèè |
144 | show_descript ;макрос по отображению описания секции |
Line 145... | Line 145... | ||
145 | 145 | ||
146 | ;îòîáðàçèòü Press any key .... |
146 | ;отобразить Press any key .... |
147 | mov eax, dword [old_timer] |
147 | mov eax, dword [old_timer] |
148 | cmp eax, dword [timer_] |
148 | cmp eax, dword [timer_] |
Line 149... | Line 149... | ||
149 | jz .interrupt_16 |
149 | jz .interrupt_16 |
150 | 150 | ||
151 | show_timer_message |
151 | show_timer_message |
152 | mov word [start_stack], sp |
152 | mov word [start_stack], sp |
153 | .interrupt_16: |
153 | .interrupt_16: |
154 | xor ax, ax ;ïîëó÷èì èíôîðìàöèþ î òîì ÷òî íàæàòî |
154 | xor ax, ax ;получим информацию о том что нажато |
155 | int 0x16 |
155 | int 0x16 |
156 | ;check on change |
156 | ;check on change |
157 | mov ebx, dword [old_timer] |
157 | mov ebx, dword [old_timer] |
158 | cmp ebx, dword [timer_] |
158 | cmp ebx, dword [timer_] |
159 | jz @f |
159 | jz @f |
160 | ;restore timer interrupt |
160 | ;restore timer interrupt |
161 | cli |
161 | cli |
162 | push 0 |
162 | push 0 |
163 | pop es |
163 | pop es |
164 | ; mov eax,dword [old_timer] ; âîññòàíîâèì ïðåæäíåå ïðåðûâàíèå |
164 | ; mov eax,dword [old_timer] ; восстановим прежднее прерывание |
165 | mov [es:8*4], ebx |
165 | mov [es:8*4], ebx |
Line 166... | Line 166... | ||
166 | mov dword [timer_], ebx |
166 | mov dword [timer_], ebx |
167 | sti |
167 | sti |
168 | 168 | ||
169 | push ax |
169 | push ax |
170 | clear_timer_msg |
170 | clear_timer_msg |
Line 171... | Line 171... | ||
171 | pop ax |
171 | pop ax |
172 | @@: |
172 | @@: |
173 | call clean_active_cursor ;clean old cursor ;es=0xb800 |
173 | call clean_active_cursor ;clean old cursor ;es=0xb800 |
174 | 174 | ||
175 | cmp ah, 0x48 ;ðåàêöèÿ ñèñòåìû íà ñîáûòèÿ |
175 | cmp ah, 0x48 ;реакция системы на события |
176 | jz .up |
176 | jz .up |
Line 186... | Line 186... | ||
186 | jz .end |
186 | jz .end |
Line 187... | Line 187... | ||
187 | 187 | ||
188 | cmp al, 0xD |
188 | cmp al, 0xD |
Line 189... | Line 189... | ||
189 | jnz .show_active_cursor |
189 | jnz .show_active_cursor |
190 | 190 | ||
191 | jmp .end_show_all ;ïàðñèíã ñåêöèè êîòîðàÿ óêàçàíà â point_default |
191 | jmp .end_show_all ;парсинг секции которая указана в point_default |
192 | .up: |
192 | .up: |
193 | mov si, point_to_point_def ;çíà÷åíèå óêàçàòåëÿ |
193 | mov si, point_to_point_def ;значение указателя |
Line 194... | Line 194... | ||
194 | add si, 2 |
194 | add si, 2 |
195 | lea ax, point_to_hframe |
195 | lea ax, point_to_hframe |
Line 206... | Line 206... | ||
206 | jmp .show_all_scr |
206 | jmp .show_all_scr |
Line 207... | Line 207... | ||
207 | 207 | ||
208 | 208 | ||
209 | 209 | ||
210 | .down: |
210 | .down: |
211 | mov si, point_to_point_def ;çíà÷åíèå óêàçàòåëÿ |
211 | mov si, point_to_point_def ;значение указателя |
212 | mov ax, point_to_eframe ;óêàçàòåëü íà ïîñëåäíèé ýëåìåíò |
212 | mov ax, point_to_eframe ;указатель на последний элемент |
Line 213... | Line 213... | ||
213 | sub si, 2 |
213 | sub si, 2 |
Line 253... | Line 253... | ||
253 | jmp .show_all_scr |
253 | jmp .show_all_scr |
Line 254... | Line 254... | ||
254 | 254 | ||
255 | 255 | ||
256 | 256 | ||
257 | 257 | ||
258 | ; òóò ìû áóäåì ïàðñèòü òîëüêî äåôîëòíóþ ñåêöèþ è âûïîëíÿòü åå íè÷åãî íå ïðåäëàãàÿ ïîëüçîâàòåëþ èç äèàëîãîâ. |
258 | ; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов. |
259 | .parse_run_only: |
259 | .parse_run_only: |
Line 284... | Line 284... | ||
284 | 284 | ||
285 | ;show black screen SL |
285 | ;show black screen SL |
286 | macro show_bl_sc |
286 | macro show_bl_sc |
287 | { |
287 | { |
288 | ;;;;;;;;;;;;;;; |
288 | ;;;;;;;;;;;;;;; |
289 | ;î÷èñòèì ýêðàí è âûâåäåì ìåíþ |
289 | ;очистим экран и выведем меню |
290 | ; draw frames |
290 | ; draw frames |
291 | xor ax, ax |
291 | xor ax, ax |
292 | if DEBUG |
292 | if DEBUG |
293 | mov ax, 0x0720 |
293 | mov ax, 0x0720 |
Line 322... | Line 322... | ||
322 | stosw |
322 | stosw |
323 | loop @b |
323 | loop @b |
324 | ;;;;;;;;;;;;;;;;;;;;;;; show '__________________________' |
324 | ;;;;;;;;;;;;;;;;;;;;;;; show '__________________________' |
325 | mov di, 480 |
325 | mov di, 480 |
326 | mov ah, color_sym_yellow |
326 | mov ah, color_sym_yellow |
327 | mov al, 'Ä' |
327 | mov al, 'Д' |
328 | mov cx, 61 |
328 | mov cx, 61 |
329 | rep stosw |
329 | rep stosw |
330 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Select section' |
330 | ;;;;;;;;;;;;;;;;;;;;;;; show 'Select section' |
331 | mov di, 804 |
331 | mov di, 804 |
332 | mov si, select_section |
332 | mov si, select_section |
Line 416... | Line 416... | ||
416 | les di, dword [file_data] |
416 | les di, dword [file_data] |
Line 417... | Line 417... | ||
417 | 417 | ||
418 | mov si, di ;point frame |
418 | mov si, di ;point frame |
419 | mov bx, cx |
419 | mov bx, cx |
420 | mov dx, size_show_section |
420 | mov dx, size_show_section |
Line 421... | Line 421... | ||
421 | ; mov point_to_hframe,di ; âíåñåì çíà÷åíèå, òàê ïîäñòðàõîâêà íå áîëåå |
421 | ; mov point_to_hframe,di ; внесем значение, так подстраховка не более |
422 | 422 | ||
423 | mov al, byte [es:di] |
423 | mov al, byte [es:di] |
424 | push word .first_ret_bl_sc |
424 | push word .first_ret_bl_sc |
Line 441... | Line 441... | ||
441 | jmp .analisist_al |
441 | jmp .analisist_al |
Line 442... | Line 442... | ||
442 | 442 | ||
443 | 443 | ||
444 | .start_bl: |
444 | .start_bl: |
445 | call get_firs_sym ;get first symbol on new line |
445 | call get_firs_sym ;get first symbol on new line |
446 | .first_ret_bl_sc: ;ïåðâûé âîçâðàò |
446 | .first_ret_bl_sc: ;первый возврат |
447 | test cx, cx |
447 | test cx, cx |
448 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
448 | jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before |
449 | .analisist_al: |
449 | .analisist_al: |
450 | cmp al, '[' |
450 | cmp al, '[' |
451 | jnz .start_bl |
451 | jnz .start_bl |
452 | ;ïðîñìàòðèâàåì ini ôàéë ñ íà÷àëà â ïîèñêàõ ñåêöèè óêàçàíîé êàê default |
452 | ;просматриваем ini файл с начала в поисках секции указаной как default |
453 | ;ïîèñê ôðåéìà â êîòîðîì ñîäåðæèòüñÿ çíà÷åíèå default |
453 | ;поиск фрейма в котором содержиться значение default |
454 | .found_sect_bl: |
454 | .found_sect_bl: |
455 | cmp di, point_loader |
455 | cmp di, point_loader |
456 | jz .start_bl |
456 | jz .start_bl |
Line 462... | Line 462... | ||
462 | 462 | ||
Line 463... | Line 463... | ||
463 | jmp .start_hbl |
463 | jmp .start_hbl |
464 | 464 | ||
465 | 465 | ||
466 | .save_point_def: |
466 | .save_point_def: |
467 | ;èòàê äàëåå ìû äîëæíû çàïîëíèòü frame áóôåð àäðåñîâ ñåêöèé, ÷òî áû ïîòîì ïî íåìó áûñòðî ïåðåìåùàòüñÿ íå âû÷èñëÿÿ ñíîâà àäðåñà |
467 | ;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса |
468 | mov di, si ;óêàçàòåëü íà íà÷àëî |
468 | mov di, si ;указатель на начало |
469 | mov cx, bx |
469 | mov cx, bx |
470 | lea si, point_to_hframe |
470 | lea si, point_to_hframe |
471 | mov dx, size_show_section+1 ;ò.ê. ó íàñ ñòðóêòóðà ñîäåðæèò ðàçìåð ìåæäó ïåðâûì è âòîðûì óêàçàòåëåì, òî íàì íóæíî íà 1 àäðåñ áîëüøå îáñ÷èòàòü ñåêöèé. |
471 | mov dx, size_show_section+1 ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций. |
472 | ;ïåðåõîäèì íà îáðàáîòêó çíà÷åíèÿ óêàçàòåëÿ |
472 | ;переходим на обработку значения указателя |
473 | mov al, byte [es:di] |
473 | mov al, byte [es:di] |
474 | push word .first_ret_mfb |
474 | push word .first_ret_mfb |
475 | cmp al, ' ' |
475 | cmp al, ' ' |
476 | jz .first_bl_mbf |
476 | jz .first_bl_mbf |
Line 477... | Line 477... | ||
477 | jmp get_firs_sym.not_space |
477 | jmp get_firs_sym.not_space |
478 | .first_bl_mbf: |
478 | .first_bl_mbf: |
479 | jmp get_firs_sym.first_sp |
479 | jmp get_firs_sym.first_sp |
480 | 480 | ||
481 | .start_mfb: |
481 | .start_mfb: |
482 | call get_firs_sym ;get first symbol on new line |
482 | call get_firs_sym ;get first symbol on new line |
Line 483... | Line 483... | ||
483 | .first_ret_mfb: ;ïåðâûé âîçâðàò |
483 | .first_ret_mfb: ;первый возврат |
Line 507... | Line 507... | ||
507 | 507 | ||
Line 508... | Line 508... | ||
508 | } |
508 | } |
509 | 509 | ||
510 | macro show_act_cursor |
510 | macro show_act_cursor |
511 | { |
511 | { |
512 | ;îòîáðàæåíèå êóðñîðà ïî óìîë÷àíèþ |
512 | ;отображение курсора по умолчанию |
513 | lea si, point_to_hframe |
513 | lea si, point_to_hframe |
514 | mov di, 962-160 |
514 | mov di, 962-160 |
515 | mov ax, point_default |
515 | mov ax, point_default |
Line 552... | Line 552... | ||
552 | call show_bl_sc_sect ;es=0xb800 |
552 | call show_bl_sc_sect ;es=0xb800 |
Line 553... | Line 553... | ||
553 | 553 | ||
Line 554... | Line 554... | ||
554 | } |
554 | } |
555 | 555 | ||
556 | macro show_descript |
556 | macro show_descript |
557 | ;Ýòîò ìàêðîñ ïîêàçûâàåò êðàòêîå îïèñàíèå, åñëè îíî åñòü ó ñåêöèè â ïóíêòå |
557 | ;Этот макрос показывает краткое описание, если оно есть у секции в пункте |
558 | ;Section description |
558 | ;Section description |
559 | { |
559 | { |
560 | local .start_p_sh_d |
560 | local .start_p_sh_d |
Line 566... | Line 566... | ||
566 | mov di, point_default |
566 | mov di, point_default |
567 | push ini_data_ |
567 | push ini_data_ |
568 | mov si, point_to_point_def |
568 | mov si, point_to_point_def |
569 | pop es |
569 | pop es |
570 | sub si, 2 |
570 | sub si, 2 |
571 | mov cx, [si] ;çàãðóçèì óêàçàòåëü íàñëåäóþùèþ ñåêöèþ |
571 | mov cx, [si] ;загрузим указатель наследующию секцию |
572 | sub cx, di ;âîò òåïåðü èìååì èñòèíûé ðàçìåð |
572 | sub cx, di ;вот теперь имеем истиный размер |
573 | ;di - óêàçàòåëü íà äåôîëòíóþ ñåêöèþ ò.å. âûáðàííóþ cx - ðàçìåð îáëàñòè. äëÿ ïðîñìîòðà |
573 | ;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра |
Line 574... | Line 574... | ||
574 | 574 | ||
575 | .start_p_sh_d: |
575 | .start_p_sh_d: |
576 | call get_firs_sym ;get first symbol on new line |
576 | call get_firs_sym ;get first symbol on new line |
577 | test cx, cx |
577 | test cx, cx |
578 | jz .exit ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
578 | jz .exit ;нету? ну ладно - следующее значение тогда ) |
579 | cmp al, 'd' |
579 | cmp al, 'd' |
580 | jnz .start_p_sh_d |
580 | jnz .start_p_sh_d |
Line 581... | Line 581... | ||
581 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
581 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 589... | Line 589... | ||
589 | jnz .rest_value_loop_sh_d ;is not compare |
589 | jnz .rest_value_loop_sh_d ;is not compare |
Line 590... | Line 590... | ||
590 | 590 | ||
591 | sub bx, parse_descript_e - parse_descript;correct cx |
591 | sub bx, parse_descript_e - parse_descript;correct cx |
592 | add bx, cx |
592 | add bx, cx |
593 | mov cx, bx |
593 | mov cx, bx |
594 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ðàçáîð àëÿ ' = ' |
594 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = ' |
595 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
595 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
596 | repe scasb |
596 | repe scasb |
Line 597... | Line 597... | ||
597 | jcxz .rest_value_loop_sh_d ;not found param timeout |
597 | jcxz .rest_value_loop_sh_d ;not found param timeout |
598 | 598 | ||
Line 599... | Line 599... | ||
599 | cmp ah, byte [es:di-1] ;find '=' |
599 | cmp ah, byte [es:di-1] ;find '=' |
600 | jnz .rest_value_loop_sh_d |
600 | jnz .rest_value_loop_sh_d |
601 | 601 | ||
602 | repe scasb ;cut ' ' |
602 | repe scasb ;cut ' ' |
603 | inc cx |
603 | inc cx |
604 | dec di |
604 | dec di |
605 | ;;;;;;;;;;;;;;;;;;;;di óêàçûâàåò íà ñòðî÷êó, êîòîðóþ íàì íóæíî âûâîäèòü. |
605 | ;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить. |
606 | ;ñòðî÷êà áóäåò âûâîäèòüñÿ áëîêàìè ïî 37 ñèìâîëîâ. |
606 | ;строчка будет выводиться блоками по 37 символов. |
607 | ;íàñòðîèì êóäà áóäåì âûâîäèòü ò.å. íà÷àëî |
607 | ;настроим куда будем выводить т.е. начало |
Line 608... | Line 608... | ||
608 | ;es:di - óêàçûâàþò íà ñòðî÷êó èç êîòîðîé ìû áåðåì ñèìâîë, ds:si êóäà áóäåì âûâîäèòü |
608 | ;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить |
609 | push di |
609 | push di |