<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3413204</guid>
        <pubDate>Tue, 11 Feb 2014 19:40:59 +0000</pubDate>
        <title>ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(</title>
        <link>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3413204</link>
        <description><![CDATA[DIS: Прямо до боли напоминает сдачу лабораторных по асму в колледже...  :whistle: <br><br>Там же все в комментариях написано<br>1. Вешается свой обработчик на прерывание таймера<br>2. Выводится символ по центру экрана<br>3. Восстанавливается прежний обработчик прерывания.]]></description>
        <author>DIS</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3403269</guid>
        <pubDate>Thu, 23 Jan 2014 09:36:24 +0000</pubDate>
        <title>ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(</title>
        <link>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3403269</link>
        <description><![CDATA[Qraizer: <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body">Используем тег &#91;code&#93; для добавления текста программы в пост! Устное предупреждение! Читаем <a class='tag-url' href='http&#58;//forum.sources.ru/rules.html' target='_blank'><strong class='tag-b'><span class="tag-color tag-color-named" data-value="red" style="color&#58; red">правила</span></strong></a>!</div></div>]]></description>
        <author>Qraizer</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3403190</guid>
        <pubDate>Thu, 23 Jan 2014 08:39:59 +0000</pubDate>
        <title>ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(</title>
        <link>https://forum.sources.ru/index.php?showtopic=386124&amp;view=findpost&amp;p=3403190</link>
        <description><![CDATA[tumiva: Код разделен на три части: 1). void setpointer() <br>
2). void clock_p_s<br>
3). void retpointer(). <br>
Что делается в каждой из частей?<br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">_TEXT segment byte public &#39;CODE&#39;</div><div class="code_line">_TEXT ends</div><div class="code_line">&nbsp;</div><div class="code_line">DGROUP group _DATA,_BSS</div><div class="code_line">assume cs:_TEXT,ds:DGROUP</div><div class="code_line">&nbsp;</div><div class="code_line">_DATA segment word public &#39;DATA&#39;</div><div class="code_line">_off_1ch equ 1ch*4</div><div class="code_line">_maskf db 7</div><div class="code_line">_position dw 0</div><div class="code_line">_DATA ends</div><div class="code_line">&nbsp;</div><div class="code_line">_BSS segment word public &#39;BSS&#39;</div><div class="code_line">_oldoffset1c dw ?</div><div class="code_line">_oldsegemnt1c dw ?</div><div class="code_line">_BSS ends</div><div class="code_line">&nbsp;</div><div class="code_line">_DATA segment word public &#39;DATA&#39;</div><div class="code_line">_counttakts dw 0</div><div class="code_line">_timeend dw 20</div><div class="code_line">_oldsec dw 0</div><div class="code_line">_DATA ends</div><div class="code_line">&nbsp;</div><div class="code_line">_TEXT segment byte public &#39;CODE&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">; ************************************************************************</div><div class="code_line">; void setpointer()</div><div class="code_line">; ************************************************************************</div><div class="code_line">assume cs:_TEXT</div><div class="code_line">@setpointer$qv proc near</div><div class="code_line">cli</div><div class="code_line">mov ax,0</div><div class="code_line">mov es,ax ;таблица находится в 0м сегменте</div><div class="code_line">mov bx,_off_1ch ;засылаем в bx смещение</div><div class="code_line">mov ax,[es:bx] ;засылаем в аккумулятор значение по ардесу es:bx смещение </div><div class="code_line">;(первые 2 байта адреса системного обработчика)</div><div class="code_line">mov _oldoffset1c,ax ;засылаем в oldoffset1c cмещение ...</div><div class="code_line">mov ax,[es:bx+2] ;аналогично, только сегмент</div><div class="code_line">mov _oldsegemnt1c, ax</div><div class="code_line">&nbsp;</div><div class="code_line">;записать новый вектор в таблицу векторов прерываний</div><div class="code_line">mov ax, offset @clock_p_s$qv;смещение нового обработчика в ax</div><div class="code_line">mov bx,_off_1ch</div><div class="code_line">mov [es:bx],ax </div><div class="code_line">push cs</div><div class="code_line">pop ax ;настройка ax на cs</div><div class="code_line">mov [es:bx+2],ax ;запись сегмента </div><div class="code_line">&nbsp;</div><div class="code_line">mov ax, 0b800h</div><div class="code_line">mov es, ax</div><div class="code_line">mov cx, 3838</div><div class="code_line">mov ax,32+7*256</div><div class="code_line">m0: </div><div class="code_line">mov bx, cx</div><div class="code_line">mov [es:bx],ax</div><div class="code_line">dec cx</div><div class="code_line">loop m0</div><div class="code_line">&nbsp;</div><div class="code_line">sti</div><div class="code_line">ret</div><div class="code_line">@setpointer$qv endp</div><div class="code_line">&nbsp;</div><div class="code_line">; ************************************************************************</div><div class="code_line">; void clock_p_s()</div><div class="code_line">; ************************************************************************</div><div class="code_line">assume cs:_TEXT</div><div class="code_line">@clock_p_s$qv proc near</div><div class="code_line">&nbsp;</div><div class="code_line">;сохранение в стеке используемых регистров</div><div class="code_line">push ax</div><div class="code_line">push bx</div><div class="code_line">push dx ;dx портит imul и idiv</div><div class="code_line">push es</div><div class="code_line">push ds</div><div class="code_line">&nbsp;</div><div class="code_line">; настройка ds на cs</div><div class="code_line">push cs</div><div class="code_line">pop ds</div><div class="code_line">&nbsp;</div><div class="code_line">inc _counttakts ;инкремент counttakts</div><div class="code_line">mov ax,_counttakts</div><div class="code_line">mov dx,10</div><div class="code_line">imul dx</div><div class="code_line">mov bx,182 </div><div class="code_line">idiv bx</div><div class="code_line">cmp ax,_oldsec</div><div class="code_line">jz endprog</div><div class="code_line">mov _oldsec,ax</div><div class="code_line">sub ax,_timeout</div><div class="code_line">jl endprog</div><div class="code_line">dec _timeend</div><div class="code_line">mov ax,2Ah</div><div class="code_line">&nbsp;</div><div class="code_line">;запись в es адреса начала видеопамяти - B800:0000 </div><div class="code_line">mov bx, 0b800h</div><div class="code_line">mov es, bx</div><div class="code_line">mov bx, _position ;позицию на экране - в bx</div><div class="code_line">mov ah, _maskf ;маску вывода - в ah</div><div class="code_line">mov es:[bx],ax ;вывод символа в центр экрана</div><div class="code_line">;восстановление используемых регистров:</div><div class="code_line">inc _position</div><div class="code_line">inc _position</div><div class="code_line">endprog: </div><div class="code_line">pop ds</div><div class="code_line">pop es</div><div class="code_line">pop dx</div><div class="code_line">pop bx</div><div class="code_line">pop ax</div><div class="code_line">iret </div><div class="code_line">@clock_p_s$qv endp</div><div class="code_line">&nbsp;</div><div class="code_line">; ************************************************************************</div><div class="code_line">; void retpointer()</div><div class="code_line">; ************************************************************************</div><div class="code_line">assume cs:_TEXT</div><div class="code_line">@retpointer$qv proc near</div><div class="code_line">&nbsp;</div><div class="code_line">cli </div><div class="code_line">;восстановление вектора прерывания от таймера </div><div class="code_line">;запрет аппаратных прерываний</div><div class="code_line">xor ax, ax ;снова настройка es на начало таблицы</div><div class="code_line">mov es, ax ;векторов прерываний</div><div class="code_line">mov ax, _oldoffset1c ;запись в таблицу смещения старого</div><div class="code_line">mov bx,_off_1ch</div><div class="code_line">mov [es:bx],ax ;обработчика прерывания от таймера</div><div class="code_line">mov ax,_oldsegemnt1c ;запись сегмента</div><div class="code_line">mov [es:bx+2], ax</div><div class="code_line">sti ;разрешение аппаратных прерываний</div><div class="code_line">&nbsp;</div><div class="code_line">ret</div><div class="code_line">@retpointer$qv endp</div><div class="code_line">&nbsp;</div><div class="code_line">_TEXT ends</div><div class="code_line">&nbsp;</div><div class="code_line">_DATA segment word public &#39;DATA&#39;</div><div class="code_line">_DATA ends</div><div class="code_line">_TEXT segment byte public &#39;CODE&#39;</div><div class="code_line">_TEXT ends</div><div class="code_line">public @clock_p_s$qv</div><div class="code_line">public @retpointer$qv</div><div class="code_line">public @setpointer$qv</div><div class="code_line">extrn _timeout:word</div><div class="code_line">public _oldsec</div><div class="code_line">public _timeend</div><div class="code_line">public _counttakts</div><div class="code_line">public _oldsegemnt1c</div><div class="code_line">public _oldoffset1c</div><div class="code_line">public _position</div><div class="code_line">public _maskf</div><div class="code_line">public _off_1ch</div><div class="code_line">end</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>tumiva</author>
        <category>Assembler</category>
      </item>
	
      </channel>
      </rss>
	