<?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=260801&amp;view=findpost&amp;p=2189875</guid>
        <pubDate>Sat, 07 Feb 2009 21:55:41 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2189875</link>
        <description><![CDATA[Федосеев Павел: Привет, <strong class='tag-b'>Deffi</strong><br>
<br>
Вообще-то, это уже вопрос для отдельной темы.<br>
Поэтому отвечу в приват.]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2189441</guid>
        <pubDate>Sat, 07 Feb 2009 11:17:18 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2189441</link>
        <description><![CDATA[Deffi: Привет, Павел&#33; У меня возникли сложности при написании лабораторной работы. У меня задание: найти произведение элементов массива, и максимальное значение. <br>
Работаю я в TASM, а в учебнике нашла похожие примеры, но для MASM. Вобщем кое-как слепила из-этих примеров себе лабораторную. Но при компилировании возникали ошибки, так как Tasm не понимал команды Masm. Пыталась изменять команды, чтоб исходник компилировался в TASM, но все время возникают ошибки. <br>
Павел, помоги мне подправить этот исходник. Очень тебе прошу  :rolleyes: &#33;<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">; Подготовка программы:</div><div class="code_line">; MASM /Z /ZI /N P, P, P;</div><div class="code_line">; LINK /CO P,P;</div><div class="code_line">; Програмные мтроки</div><div class="code_line">text &nbsp; &nbsp;segment &#39;code&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;assume &nbsp;cs:text, ds:data</div><div class="code_line">; Определения</div><div class="code_line">count = 80;</div><div class="code_line">KEYBOARD STRUCT</div><div class="code_line">&nbsp;&nbsp; &nbsp;maxInput &nbsp; &nbsp;BYTE &nbsp; &nbsp;count &nbsp; ; Максималтный размер буфера</div><div class="code_line">&nbsp;&nbsp; &nbsp;inputCount &nbsp;BYTE &nbsp; &nbsp;? &nbsp; &nbsp; &nbsp; ; Количество введеных символов</div><div class="code_line">&nbsp;&nbsp; &nbsp;buffer &nbsp; &nbsp; &nbsp;BYTE &nbsp; &nbsp;count DUP(?) &nbsp; &nbsp;; Введенные символы</div><div class="code_line">KEYBOARD ENDS</div><div class="code_line">&nbsp;</div><div class="code_line">myproc &nbsp;proc</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; AX,data &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; DS,AX</div><div class="code_line">; Очистка экрана</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ax,0003h</div><div class="code_line">&nbsp;&nbsp; &nbsp;int &nbsp; &nbsp; 10h</div><div class="code_line">; Читает строку символов из стандартного устройства ввода</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ah,0Ah</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; dx,OFFSET kybdData</div><div class="code_line">&nbsp;&nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">; Перемещение курсора в начало следующец строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ah,02h</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; dl,0Ah</div><div class="code_line">&nbsp;&nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; bl,kybdData.inputCount</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; dx,OFFSET kybdData</div><div class="code_line">&nbsp;&nbsp; &nbsp;add &nbsp; &nbsp; dx,2</div><div class="code_line">&nbsp;&nbsp; &nbsp;add &nbsp; &nbsp; dx,bx</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; di,dx</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; byte ptr [di],&#39;$&#39;</div><div class="code_line">; Выводит строку, оканчивающуюся символом &quot;$&quot;, на стандартное устройство вывода</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; dx,OFFSET kybdData</div><div class="code_line">&nbsp;&nbsp; &nbsp;add &nbsp; &nbsp; dx,2</div><div class="code_line">&nbsp;&nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">; Добуток елеиентів масиву</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; si,OFFSET arrayB</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; cx,(LENGTHOF arrayB)-1</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ax,[si]</div><div class="code_line">L1:</div><div class="code_line">&nbsp;&nbsp; &nbsp;add &nbsp; &nbsp; si,2 &nbsp; &nbsp; &nbsp; &nbsp;; Поскольку массив arrayB типа WORD</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; bx,[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; В ax будет гаходится результат умножения</div><div class="code_line">&nbsp;&nbsp; &nbsp;loop &nbsp; &nbsp;L1</div><div class="code_line">; максимальне значення масиву</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; si,OFFSET arrayB</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; cx,(LENGTHOF arrayB)-1</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ax,[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp;.WHILE &nbsp;cx &#62; 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;add &nbsp; &nbsp; si,2 &nbsp; &nbsp; &nbsp; &nbsp;; Поскольку массив arrayB типа WORD</div><div class="code_line">&nbsp;&nbsp; &nbsp;dec &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp;.IF &nbsp; &nbsp; ax &#60; [si]</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; ax,[si]</div><div class="code_line">; &nbsp; .ELSE &nbsp; </div><div class="code_line">; &nbsp; mov &nbsp; &nbsp; bx,ax</div><div class="code_line">&nbsp;&nbsp; &nbsp;.ENDIF</div><div class="code_line">&nbsp;&nbsp; &nbsp;.ENDW</div><div class="code_line">; Завершим программу</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; AX,4C00h</div><div class="code_line">&nbsp;&nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">myproc &nbsp;endp</div><div class="code_line">text &nbsp; &nbsp;ends</div><div class="code_line">&nbsp;</div><div class="code_line">; Поля данных</div><div class="code_line">&nbsp;&nbsp; &nbsp;data &nbsp; &nbsp;segment</div><div class="code_line">&nbsp;&nbsp; &nbsp;kybdData KEYBOARD &#60;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;arrayB &nbsp;WORD &nbsp; &nbsp; &nbsp; &nbsp;2, 1, 1, 1, 1, 1, 3, 1, 1, 5, 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;data &nbsp; &nbsp;ends</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack &nbsp; segment &nbsp; &nbsp; para stack &#39;stak&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;128 dup (?)</div><div class="code_line">&nbsp;&nbsp; &nbsp;stack &nbsp; ends</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end &nbsp; &nbsp; &nbsp; &nbsp; myproc</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2170304</guid>
        <pubDate>Fri, 16 Jan 2009 15:35:39 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2170304</link>
        <description><![CDATA[Deffi: Я обучаюсь заочно, так что студенческий коллективный разум внутри собственной группы или потока - это исключено  ;)]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168895</guid>
        <pubDate>Thu, 15 Jan 2009 12:28:46 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168895</link>
        <description><![CDATA[Федосеев Павел: Нет, про UML ничего не знаю. Попробуй погуглить, пояндексить или порамблерить. Ещё существует &quot;студенческий коллективный разум&quot; внутри собственной группы или потока  ;) .]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168827</guid>
        <pubDate>Thu, 15 Jan 2009 11:42:40 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168827</link>
        <description><![CDATA[Deffi: Ясненько :) <br>Павел, вопрос немного не по теме, может знаешь где можна проконсультироватся по UML (унифицированный язык моделирования)? Я спрашивала на нескольких форумах, но именно в разделе  UML  людей совсем нет, и мой вопрос остался без ответа.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168701</guid>
        <pubDate>Thu, 15 Jan 2009 10:24:37 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168701</link>
        <description><![CDATA[Федосеев Павел: Зацикли. Если не Esc, то переход не на метку @@WaitForEsc, a к приглашению ввести число - к новой метке @@Input.<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">Main &nbsp; &nbsp;PROC &nbsp; &nbsp;FAR</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, @DATA</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ds, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; es, ax</div><div class="code_line">@@Input:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ввод числа с клавиатуры (строки)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Prompt</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div></ol></div></div></div></div>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168656</guid>
        <pubDate>Thu, 15 Jan 2009 09:53:33 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168656</link>
        <description><![CDATA[Deffi: Я к твоему файу Input_2.asm добавила вот такое:<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">@@Exit:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ожидание нажатия любой клавиши</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,01h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, 1Bh &nbsp; &nbsp; &nbsp; ; 1Bh - код клавиши Esc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Exit &nbsp;; если это не Esc, то повторить</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax,4c00h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">Main &nbsp; &nbsp;ENDP</div></ol></div></div></div></div><br>
Теперь прога закрывается после нажатия кнопки ESC, а если я хочу ввести несколько чисел, вот например ввела первое число, программа его перева и напечатала результат, а потом чтоб опять вывелось приглашение  &#39;Введите число (-32768..+32767): , как такое сделать? <br>
<br>
P.S с умножением разобралась, спасибо &#33;&#33;&#33;]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168331</guid>
        <pubDate>Wed, 14 Jan 2009 21:06:38 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168331</link>
        <description><![CDATA[Федосеев Павел: 1. Закрываться на кнопку Esc.<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">.DATA</div><div class="code_line">........................</div><div class="code_line">ExitMsg db &nbsp; &nbsp; &nbsp;&#39;Для завершения нажмите Esc&#39;, &#39;$&#39;</div><div class="code_line">..........................</div><div class="code_line">.CODE</div><div class="code_line">..........................</div><div class="code_line">@@Exit:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, ExitMsg</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ожидание нажатия клавиши Esc</div><div class="code_line">@@WaitForEsc:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,07h &nbsp; &nbsp; &nbsp; &nbsp;; ожидаем нажатие любой клавиши</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, 1Bh &nbsp; &nbsp; &nbsp; ; 1Bh - код клавиши Esc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@WaitForEsc &nbsp;; если это не Esc, то повторить</div><div class="code_line">.............................</div></ol></div></div></div></div><br>
<br>
2. Откуда умножение.<br>
Show_ax - подпрограмма для вывода на экран. Именно в ней и происходит преобразование в десятичный или в восьмеричный вид. Поэтому она вызывается в теле основной программы (Main) два раза - один раз для десятичного отображения введенного числа, другой раз для восьмеричного отображения того же числа. Там и происходит деление исходного числа на основание системы счисления (основание системы передается в п/п в регистре cx). Вот вызов для восьмеричной:<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 8</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Show_ax</div></ol></div></div></div></div><br>
Обрати внимание на закомментированную строку в начале Show_ax (mov cx, 10). Эта процедура изначально предназначалась лишь для десятичного отображения, но теперь в регистре cx можно передавать любое значение для системы счисления не превосходящее 10 (если нужно больше 10 - тогда нужно усложнять процедуру).<br>
Как ты справедливо отмечаешь, исходное число (ax) нужно делить на основание системы - так и происходит (div cx). Оператор div cx - содержимое регистровой пары dx:ax делится на cx (поэтому перед делением обнуляется dx - xor dx,dx), частное от деления помещается в ax, а остаток в dx. Т.к. делим мы на небольшие числа (в пределах 10), то dh=0, а в dl - нужный нам остаток. Чтобы не повторяться дам ссылку, где кратко объясняется работа процедуры Show_ax, только в пояснении замени число 10 на &quot;основание системы счисления&quot; <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=258712' target='_blank'>Сложение чисел</a> .<br>
<br>
Str2Num - это процедура преобразования строки в число - поэтому там и нет деления, зато есть умножение.<br>
<br>
Давай посмотрим что делает программа (с метки Main):<br>
1. Вводится строка, содержащая символы (&#39;-&#39;, &#39;0&#39;,... ,&#39;9&#39;) - это еще не число.<br>
2. Вызывается процедура преобразования строки в число Str2Num. Она из строки получает двухбайтное число Numer.<br>
3. Число Numer выводится в десятичной системе - процедура Show_ax.<br>
4. Число Numer выводится в восьмеричной системе - процедура Show_ax.<br>
5. Ожидается нажатие Esc.<br>
<br>
Если не критично (в смысле условия задания), то чтобы не путаться, можешь удалить всю процедуру Str2Num и её вызовы из программы. Само число набери в строке (Numer dw -123). Вызывая два раза Show_ax увидишь как десятичное, так и восьмеричное представление числа Numer.]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168045</guid>
        <pubDate>Wed, 14 Jan 2009 16:53:38 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2168045</link>
        <description><![CDATA[Deffi: Павел, чесно сказать уже и совесть не позволяет что-либо у тебя еще спрашивать, но может напишешь как сделать, чтоб после ввода пользователем числа экзешник не закрывался автоматически, а только когда я нажму Esc. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-14T17:48:14+00:00">14.01.09, 17:48</time></span></span><br>
И еще такой вопрос, немного неясен твой алгоритм, ведь например в математике для перевода десятичного числа в восьмиричное, его нужно последовательно делить на 8 до тех пор, пока не останется остаток, меньше или равен 7, сдесь же ты умножаешь ax*bx<br>
&quot;...Вошли в цикл.<br>
dx:ax=ax*bx=0*10=0 (т.е. dx=0 и ax=0)<br>
Записали в результат значение ax - ds:[di]=ax=0<br>
Проверяем на переполнение (результат не превышает 65535 - т.е. dx должен быть равен 0) - все в порядке.<br>
По адресу ds:[si] считываем в al символ цифры (mov al, [si]) - al=&#39;9&#39;.<br>
Проверяем, чтобы &#39;0&#39; &lt;= al &lt;= &#39;9&#39; - да, условие выполняется.<br>
Из al вычитаем число, соответствующее коду символа &#39;0&#39; - теперь al=9 (и ax=9).<br>
Складываем с результатом (по адресу ds:[di]) - ax=0+9=9.<br>
Проверяем, не было ли переполнения при сложении (число больше 65535) - нет не было..&quot;<br>
<br>
Почему умножаешь? <br>
<br>
Еще раз извини за глупые вопросы, просто хочу разобратся в алгоритме, а не тупо сдать программу написанную не мной...]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2167581</guid>
        <pubDate>Wed, 14 Jan 2009 11:02:45 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2167581</link>
        <description><![CDATA[Deffi: Ты так подробно все объясняешь, что и wikipedia нет надобности читать. <br>У нас даже преподаватели так подробно не объясняют.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2166944</guid>
        <pubDate>Tue, 13 Jan 2009 15:53:02 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2166944</link>
        <description><![CDATA[Федосеев Павел: Нет, Deffi, не просто добавляет.<br>
Обе подпрограммы работают уже с другим форматом данных. При отображении на экран действительно кажется только, что добавляется символ &quot;-&quot;. Но так и должно быть.<br>
Например, 100<sub class='tag-sub'>10</sub>=144<sub class='tag-sub'>8</sub> и -100<sub class='tag-sub'>10</sub>=-144<sub class='tag-sub'>8</sub>. Все вроде правильно. Но внутреннее представление этих чисел разное.<br>
Посмотрим пример:<br>
100<sub class='tag-sub'>10</sub>=144<sub class='tag-sub'>8</sub>=64<sub class='tag-sub'>16</sub>=0000 0000 0110 0100<sub class='tag-sub'>2</sub> - вроде понятно<br>
-100<sub class='tag-sub'>10</sub>=-144<sub class='tag-sub'>8</sub>=-64<sub class='tag-sub'>16</sub>=-0000 0000 0110 0100<sub class='tag-sub'>2</sub> - тоже понятно.<br>
Но как в пределах 16-бит найти место для обозначения отрицательных чисел?<br>
 Разработчики микросхем пошли по следующему пути. Решили, что старший бит будет означать знак минус. Так для чисел осталось 15 бит. Положительные от 0000 0000 0000 0000<sub class='tag-sub'>2</sub> до 0111 1111 1111 1111<sub class='tag-sub'>2</sub> (от 0 до 32767) и отрицательные от 1111 1111 1111 1111<sub class='tag-sub'>2</sub> до 1000 0000 0000 0000<sub class='tag-sub'>2</sub> (от -1 до -32368). Отрицательные числа решили сделать в машинном представлении такими, чтобы без дополнительных материальных (в смысле транзисторов внутри процессора) затрат организовать вычисления - т.е. чтобы -1+1=0, как при обычном сложении. Возьмем число 1=0000 0000 0000 0001<sub class='tag-sub'>2</sub>. Что нужно к нему прибавить, чтобы получился 0=0000 0000 0000 0000<sub class='tag-sub'>2</sub>? Правильно, 1111 1111 1111 1111<sub class='tag-sub'>2</sub>=-1. Заметь, что число -1=1111 1111 1111 1111<sub class='tag-sub'>2</sub>, а не 1000 0000 0000 0001. Такой формат называется &quot;дополнительный код&quot;.<br>
В дополнительном коде<br>
0<sub class='tag-sub'>10</sub>=0000 0000 0000 0000<sub class='tag-sub'>2</sub><br>
1<sub class='tag-sub'>10</sub>=0000 0000 0000 0001<sub class='tag-sub'>2</sub><br>
2<sub class='tag-sub'>10</sub>=0000 0000 0000 0010<sub class='tag-sub'>2</sub><br>
3<sub class='tag-sub'>10</sub>=0000 0000 0000 0011<sub class='tag-sub'>2</sub><br>
...........................................<br>
32767<sub class='tag-sub'>10</sub>=0111 1111 1111 1111<sub class='tag-sub'>2</sub><br>
-1<sub class='tag-sub'>10</sub>=1111 1111 1111 1111<sub class='tag-sub'>2</sub> - в дополнительном коде<br>
-2<sub class='tag-sub'>10</sub>=1111 1111 1111 1110<sub class='tag-sub'>2</sub> - в дополнительном коде<br>
-3<sub class='tag-sub'>10</sub>=1111 1111 1111 1101<sub class='tag-sub'>2</sub> - в дополнительном коде<br>
.............................................<br>
-32768<sub class='tag-sub'>10</sub>=1000 0000 0000 0000<sub class='tag-sub'>2</sub> - в дополнительном коде<br>
<br>
Первый вариант программы работал с положительными числами от 0 до 65535 (никаких отрицательных). Поэтому там символ &quot;-&quot; рассматривался как ошибочный. При вводе строки &quot;65535&quot; в переменную Number процедура Str2Num записывала число 1111 1111 1111 1111<sub class='tag-sub'>2</sub>. Подпрограмма Show_ax преобразовывала число в Number в строку &quot;65535&quot; и выводиоа на экран.<br>
<br>
Второй вариант программы работает уже форматом чисел в дополнительном коде. Поэтому пришлось изменить процедуры ввода числа и вывода числа. <br>
<br>
Проще изменения в Show_ax - проверяется знаковый бит, и если он установлен, то сразу же выводится на экран символ &quot;-&quot;, а потом инвертируется число (neg ax), т.е. было -100<sub class='tag-sub'>10</sub>=-144<sub class='tag-sub'>8</sub>=-0000 0000 0110 0100<sub class='tag-sub'>2</sub>=1111 1111 1001 1100<sub class='tag-sub'>2</sub>, а стало +100<sub class='tag-sub'>10</sub>=+144<sub class='tag-sub'>8</sub>=0000 0000 0110 0100<sub class='tag-sub'>2</sub>. А потом уже это число преобразуется в строку. Все это есть в комментариях.<br>
<br>
В Str2Num изменений побольше. Еще до начала цикла проверяется строка на сивол &quot;-&quot;. Если его нет, то преобразование почти без изменений по сравнению с первым (беззнаковым вариантом) - добавилось лишь ограничение диапазона чисел до 32767. Если же первым в строке стоит символ &quot;-&quot;, тогда перед циклом переходим к следующему символу (см. в комментариях). Потом происходит такое же преобразование строки, получаем положительное число. После преобразования еще раз проверяется первый символ в строке, если он &quot;-&quot;, тогда число приводится к дополнительному коду (neg ax).<br>
<br>
В общем, первый вариант программы работал с беззнаковыми числами, а второй со знаковыми в дополнительном коде.<br>
Если я не очень хорошо объяснил, почитай в книжках по асму про дополнительный код или в Wiki http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа).<br>
<br>
Из баловства, можешь поэкспериментировать с разными сочетаниями подпрограмм ввода/вывода. При знаковом вводе и беззнаковом выводе будут получаться необычные результаты - как на &quot;калькуляторе&quot;:<br>
вводим:   -100<br>
получаем: 65436<sub class='tag-sub'>10</sub> и 177634<sub class='tag-sub'>8</sub><br>
Вот такой хулиганский файл прилагаю]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2166563</guid>
        <pubDate>Tue, 13 Jan 2009 11:46:43 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2166563</link>
        <description><![CDATA[Deffi: Немного не поняла твоего пояснения, извини. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-13T11:52:34+00:00">13.01.09, 11:52</time></span></span><br>
Программа просто добавляет знак минуса на экран и все, и считает как положительные.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165800</guid>
        <pubDate>Mon, 12 Jan 2009 17:11:57 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165800</link>
        <description><![CDATA[Федосеев Павел: Deffi<br>
Думаю, что программа считает правильно. Ведь она не не изменяет само значение числа (переменную Number). А только в двух форматах (десятичном и восьмеричном) выводит на экран. И если это число -144<sub class='tag-sub'>8</sub> сложить с числом 144<sub class='tag-sub'>8</sub> должен получиться 0. А &quot;калькулятор&quot; производит преобразование из десятичной в восьмеричную без учета знака.<br>
Можешь даже проверить (если не лень). Измени программу - чтобы Str2Num была новая, а Show_ax - старая-беззнаковая. И увидишь такой же результат.]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165779</guid>
        <pubDate>Mon, 12 Jan 2009 16:37:01 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165779</link>
        <description><![CDATA[Deffi: Павел, тогда получается что 100 (Dec) = 144 (Oct) и -100 (Dec) = -144 (Oct) хотя если проверить на инженерном калькуляторе в Excel -100 (Dec) = 7777777634 (Oct) Так вот  :(]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165640</guid>
        <pubDate>Mon, 12 Jan 2009 13:45:00 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165640</link>
        <description><![CDATA[Федосеев Павел: Сейчас еще раз потестировал - нашел ошибку. Не вводиться число -32768.<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;js &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если результат стал отрицательным</div></ol></div></div></div></div><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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; ax, 8000h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div></ol></div></div></div></div><br>
И еще добавить проверку для случая 32768. В целом Str2Num<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">Str2Num PROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cl, ds:[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ch, ch</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;если в строке первый символ &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - перейти к следующему</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - уменьшить количество рассматриваемых символов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@Loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; cx</div><div class="code_line">@@Loop:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; ; умножаем ax на 10 ( dx:ax=ax*bx )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; игнорируем старшее слово</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; dx, 0 &nbsp; &nbsp; &nbsp;; проверяем, результат на переполнение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Error</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; al, [si] &nbsp; ; Преобразуем следующий символ в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jb &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ah, ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; ax, [di]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jc &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если сумма больше 65535</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; ax, 8000h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;@@Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si &nbsp; &nbsp; &nbsp; &nbsp; ;проверка на знак</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@Check &nbsp; &nbsp;;если должно быть положительным</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;neg &nbsp; &nbsp; ax &nbsp; &nbsp; &nbsp; &nbsp; ;если должно быть отрицательным</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp; @@StoreRes</div><div class="code_line">@@Check: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;дополнительная проверка</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; or &nbsp; &nbsp; &nbsp; ax, ax &nbsp; &nbsp; ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; js &nbsp; &nbsp; &nbsp; @@Error</div><div class="code_line">@@StoreRes: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;сохранить результат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">@@Error:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Str2Num ENDP</div></ol></div></div></div></div>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165561</guid>
        <pubDate>Mon, 12 Jan 2009 12:18:30 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165561</link>
        <description><![CDATA[Федосеев Павел: Немного помудрил... <br>
Нужно увеличить буфер ввода на один символ (&quot;-32768&quot; длиной 6 символов)<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">KeyBuf &nbsp;db &nbsp; &nbsp; &nbsp;7, 0, 7 dup(0) &nbsp; &nbsp; &nbsp;;max,len,string,CR(0dh)</div></ol></div></div></div></div><br>
<br>
Str2Num получилась такая<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">; преобразования строки в число</div><div class="code_line">; на входе:</div><div class="code_line">; ds:[si] - строка с числом</div><div class="code_line">; ds:[di] - адрес числа</div><div class="code_line">; на выходе</div><div class="code_line">; ds:[di] - число</div><div class="code_line">; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)</div><div class="code_line">Str2Num PROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cl, ds:[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ch, ch</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;если в строке первый символ &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - перейти к следующему</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - уменьшить количество рассматриваемых символов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@Loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; cx</div><div class="code_line">@@Loop:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; ; умножаем ax на 10 ( dx:ax=ax*bx )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; игнорируем старшее слово</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; dx, 0 &nbsp; &nbsp; &nbsp;; проверяем, результат на переполнение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Error</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; al, [si] &nbsp; ; Преобразуем следующий символ в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jb &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ah, ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; ax, [di]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jc &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если сумма больше 65535</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;js &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если результат стал отрицательным</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;@@Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si &nbsp; &nbsp; &nbsp; &nbsp; ;проверка на знак</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@StoreRes</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;neg &nbsp; &nbsp; ax</div><div class="code_line">@@StoreRes:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">@@Error:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Str2Num ENDP</div></ol></div></div></div></div><br>
<br>
Здесь добавились строки<br>
1) перед циклом преобразования<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;если в строке первый символ &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - перейти к следующему</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; - уменьшить количество рассматриваемых символов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@Loop</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; cx</div></ol></div></div></div></div><br>
2) после цикла преобразования<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; si &nbsp; &nbsp; &nbsp; &nbsp; ;проверка на знак</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; byte ptr [si], &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; @@StoreRes</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;neg &nbsp; &nbsp; ax</div><div class="code_line">@@StoreRes:</div></ol></div></div></div></div><br>
3) внутри цикла преобразования<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;js &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если результат стал отрицательным</div></ol></div></div></div></div><br>
4) Чтобы была возможность просмотреть первый символ, нужно в начале процедуры сохранить si, а в конце процедуры извлечь из стека (в обоих случаях завершения - правильном и ошибочном).<br>
<br>
<br>
Т.е. идея следующая. <br>
1) Если в строке символ &quot;-&quot;, то его поначалу пропускаем и получаем положительный результат. <br>
2) Потом опять проверяем исходную строку на наличие &quot;-&quot;. Если он есть, то делаем результат отрицательным (neg ax).<br>
3) Таким образом, во время выполнения преобразования временный результат все время должен быть положительным (флаг знака S - сброшен) - это и есть проверка внутри цикла.]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165495</guid>
        <pubDate>Mon, 12 Jan 2009 11:12:23 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165495</link>
        <description><![CDATA[Федосеев Павел: Для вывода отрицательных чисел нужно добавить строки в процедуру Show_ax, проверяющие знак числа. В случае отрицательного числа нужно вывести знак минус &quot;-&quot;, и преобразовать число в регистре ax.<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если число в ax отрицательное, то</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;1) напечатать &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;2) сделать ax положительным</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; &nbsp;ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jns &nbsp; &nbsp; @@Conv</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; dx, &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ah - функция вывода символа на экран</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;neg &nbsp; &nbsp; ax</div></ol></div></div></div></div><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">; выводит число в регистре AX на экран</div><div class="code_line">; входные данные:</div><div class="code_line">; cx - система счисления (не больше 10)</div><div class="code_line">; ax - число для отображения</div><div class="code_line">Show_ax PROC</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; di, di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; di - кол. цифр в числе</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если число в ax отрицательное, то</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;1) напечатать &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;;2) сделать ax положительным</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; &nbsp;ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jns &nbsp; &nbsp; @@Conv</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; dx, &#39;-&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ah - функция вывода символа на экран</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;neg &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;</div><div class="code_line">@@Conv:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; dx, dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;div &nbsp; &nbsp; cx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = num mod 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; dl, &#39;0&#39; &nbsp; &nbsp; &nbsp; &nbsp; ; перевод в символьный формат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; di</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; складываем в стэк</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; &nbsp;ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@conv</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выводим из стэка на экран</div><div class="code_line">@@Show:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = очередной символ</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ah - функция вывода символа на экран</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; повторяем пока di&#60;&#62;0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@show</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Show_ax ENDP</div></ol></div></div></div></div><br>
<br>
Для ввода, нужно добавить строки в процедуре Str2Num<br>
1) перед началом цикла преобразования проверить - первый символ равен &#39;-&#39;. Если равен, то перейти к следующему символу (inc si)<br>
2) после завершения преобразования (а пока что преобразовалось число без учета знака), ещё раз проверить самый первый символ на равенство &#39;-&#39;. Если равен, то нужно выполнить преобразование (neg ax), перед сохранением результата в памяти (mov [di], ax). Еще, желательно, перед сохранением результата выполнить проверку - если результат не соответствует знаку, то это указывает на ошибку (в два байта помещаются числа из диапазона -32768...32767 и если преобразовывать, например, число +32768, то результат будет -32768).]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165420</guid>
        <pubDate>Mon, 12 Jan 2009 09:41:06 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2165420</link>
        <description><![CDATA[Deffi: Кстати, а как переводятся отрицательные числа ?]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2159000</guid>
        <pubDate>Sat, 03 Jan 2009 23:15:44 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2159000</link>
        <description><![CDATA[miksayer: кстати<br>
<a class='tag-url' href='http://flatassembler.net/examples/basecnv.zip' target='_blank'>http://flatassembler.net/examples/basecnv.zip</a>]]></description>
        <author>miksayer</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2157783</guid>
        <pubDate>Thu, 01 Jan 2009 15:17:05 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2157783</link>
        <description><![CDATA[Deffi: Спасибо, Павел&#33; Столько набрал, я даже не ожидала :)  <br>Если возникнут еще вопросы я напишу сюда, хотя врядли после такого подробного коментария. <br><br>P.S С НОВЫМ ГОДОМ&#33; Желаю тебе крепкого здоровья, удачи, финансового благополучия, ну и чтоб все то добро, которое ты делаешь другим людям вернулось тебе в трехкратном размере :wub: &#33;]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2157169</guid>
        <pubDate>Tue, 30 Dec 2008 20:49:11 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2157169</link>
        <description><![CDATA[Федосеев Павел: <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">; преобразования строки в число</div><div class="code_line">; на входе:</div><div class="code_line">; ds:[si] - строка с числом</div><div class="code_line">; ds:[di] - адрес числа</div><div class="code_line">; на выходе</div><div class="code_line">; ds:[di] - число</div><div class="code_line">; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)</div><div class="code_line">Str2Num PROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; сохранение используемых регистров при входе в подпрограмму</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; регистр es=ds - случайно остались две строки :) - можно удалить</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cl, ds:[si] &nbsp; ; для цикла LOOP устанавливаем счетчик - т.е. сколько</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ch, ch &nbsp; &nbsp; &nbsp; &nbsp;; символов в строке нужно обработать</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; переходим к первому символу в строке (ds:si - содержит адрес)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 10 &nbsp; &nbsp; &nbsp; &nbsp;; множитель для каждой цифры</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax &nbsp; &nbsp; &nbsp; &nbsp;; начальное значение результата приравниваем к нулю</div><div class="code_line">&nbsp;</div><div class="code_line">@@Loop:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; ; умножаем ax на 10 ( dx:ax=ax*bx )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; сохраняем результат, игнорируя старшее слово</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; dx, 0 &nbsp; &nbsp; &nbsp;; проверяем, результат на переполнение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Error</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; al, [si] &nbsp; ; Преобразуем следующий символ в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;0&#39; &nbsp; &nbsp;; проверяем на то, что в al находится символ цифры от &#39;0&#39; до &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jb &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; если не символ цифры - тогда ошибка</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ah, ah &nbsp; &nbsp; ; в ax сейчас число соответствующее цифре</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; ax, [di] &nbsp; ; сложить цифру (ax) с текущим результатом</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jc &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если сумма больше 65535</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si &nbsp; &nbsp; &nbsp; &nbsp; ; перейти к адресу следующего символа цифры</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;@@Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; сохранить результат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; сбросить флаг CY - ошибки нет</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es &nbsp; &nbsp; &nbsp; &nbsp; ; восстановить регистры</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">@@Error:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax &nbsp; &nbsp; ; в случае ошибки записать результат равным нулю</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; и установить флаг переноса CY - ошибка при преобразовании строки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es &nbsp; &nbsp; &nbsp; &nbsp; ; восстановить регистры</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Str2Num ENDP</div></ol></div></div></div></div><br>
<br>
Идея примерно следующая:<br>
На входе имеется <br>
1) адрес строки в формате: длина_строки (1 байт), строка (несколько байт); <br>
2) адрес, по которому будет находиться результат (2 байта).<br>
<br>
После завершения подпрограммы<br>
1) если сброшен бит CY (переноса), то по второму адресу будет записано число, соответсвующее строке;<br>
2) если флаг CY установлен, то значит во время преобразования произошла ошибка (или результат должен был быть больше 65535, или в строке присутствовали не только цифры но и лишние символы).<br>
<br>
Давай посмотрим по шагам для строки &#39;987&#39;.<br>
При входе в п/п<br>
ds:si указывает на строку    db 3, &#39;987&#39; (si=адресу ячейки памяти с числом 3)<br>
Перед входом в цикл LOOP после всех присвоений имеем<br>
cx=3, ax=0, ds:si - равен адресу символа &#39;9&#39;, bx=10.<br>
Вошли в цикл.<br>
dx:ax=ax*bx=0*10=0 (т.е. dx=0 и ax=0)<br>
Записали в результат значение ax - ds:[di]=ax=0<br>
Проверяем на переполнение (результат не превышает 65535 - т.е. dx должен быть равен 0) - все в порядке.<br>
По адресу ds:[si] считываем в al символ цифры (mov al, [si]) - al=&#39;9&#39;.<br>
Проверяем, чтобы &#39;0&#39; &lt;= al &lt;= &#39;9&#39;  - да, условие выполняется.<br>
Из al вычитаем число, соответствующее коду символа &#39;0&#39; - теперь al=9 (и ax=9).<br>
Складываем с результатом (по адресу ds:[di]) - ax=0+9=9.<br>
Проверяем, не было ли переполнения при сложении (число больше 65535) - нет не было.<br>
Адрес указателя ds:si увеличиваем на 1 - теперь в ds:[si] адрес символа &#39;8&#39; - это для следующего прохода.<br>
Оператор loop вычитает из cx единицу и проверяет cx=0? Нет cx=cx-1=3-1=2 &lt;&gt; 0. Переход к метке @@Loop.<br>
<br>
Дальше для ускорения описания пропущу проверки.<br>
Снова проходим цикл с метки @@Loop.<br>
dx:ax=ax*bx=9*10=90.<br>
Результат (ds:[di]) приравниваем к ax=90.<br>
Считываем в al символ из адреса ds:[si] - т.е. al=&#39;8&#39;<br>
Вычитаем из al код символа &#39;0&#39; - al=8 (ax=8).<br>
Складываем с результатом (по адресу ds:di) - ax=90+8=98.<br>
Адрес указателя ds:si увеличиваем на 1 - теперь в ds:[si] адрес символа &#39;7&#39; - это для следующего прохода.<br>
Оператор loop вычитает из cx единицу и проверяет cx=0? Нет, cx=cx-1=2-1=1 &lt;&gt; 0. Переход к метке @@Loop.<br>
<br>
Снова проходим цикл с метки @@Loop.<br>
dx:ax=ax*bx=98*10=980.<br>
Результат (ds:[di]) приравниваем к ax=980.<br>
Считываем в al символ из адреса ds:[si] - т.е. al=&#39;7&#39;<br>
Вычитаем из al код символа &#39;0&#39; - al=7 (ax=7).<br>
Складываем с результатом (по адресу ds:di) - ax=980+7=987.<br>
Адрес указателя ds:si увеличиваем на 1 - теперь в ds:[si] адрес за символом &#39;7&#39; - хоть и некорректный, но это ведь последний проход цикла.<br>
Оператор loop вычитает из cx единицу и проверяет cx=0? Да, cx=cx-1=1-1=0 == 0. Переход к следующему за Loop оператору.<br>
<br>
По адресу ds:[di] записывается содержимое ax=987.<br>
Сбрасывается флаг переноса CY - нет ошибки преобразования.<br>
Восстанавливаются регистры (их содержимое теперь равно тому, что было перед входом в подпрограмму) - это можно делать, т.к. результат возвращается не в регистре, а в памяти по адресу ds:[di].<br>
<br>
Если на вход подпрограммы подать некорректные данные, то во время одной из проверок произойдет переход на метку @@Error. Тогда там обнуляется регистр ax (xor ax, ax) и значение ax (т.е. ноль) записывается в ds:[di]. А также устанавливается признак ошибки - флаг переноса CY. Потом восстанавливаются регистры.<br>
<br>
В общем, весь алгоритм напоминает схему Горнера - ( 9*10 + 8 )*10 + 7 = 987.<br>
<br>
&quot;Несколько&quot; коряво, но вроде бы понятно (надеюсь)...<br>
<br>
У-ух. Набрал... :)]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156393</guid>
        <pubDate>Mon, 29 Dec 2008 21:15:11 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156393</link>
        <description><![CDATA[Федосеев Павел: Для избавления от кракозябр, нужно текст программы на ассемблере сконвертировать из кодировки Win(1251) в кодировку DOS(866), а затем скомпилировать. Полученный exe-шник будет &quot;говорить по-русски&quot;.<br>
Перекодировку можно сделать текстовым редактором AkelPad (скачать можно по ссылке <a class='tag-url' href='http://akelpad.net.ru/akelpad/' target='_blank'>AkelPad</a> объем примерно 25 кБайт) из меню &quot;Кодировки&quot;-&quot;Сохранить в DOS-866&quot;.<br>
А результат в восьмеричной системе можно проверить в Windows-ком калькуляторе. Пункт меню &quot;Вид&quot; - Инженерный.<br>
Набрать число в десятичной системе - Dec, а потом переключиться в восьмеричную систему - Oct. Очень наглядно видно, что 64<sub class='tag-sub'>10</sub>=100<sub class='tag-sub'>8</sub>. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2008-12-29T21:39:06+00:00">29.12.08, 21:39</time></span></span><br>
Сейчас немного &quot;погулял&quot; по форуму, встретил несколько ссылок по системам счисления:<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=42165' target='_blank'>Системы счисления.</a><br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=77104&view=showall' target='_blank'>перевода чисел в другую систему счислени</a>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156282</guid>
        <pubDate>Mon, 29 Dec 2008 19:27:55 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156282</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=260801&view=findpost&p=2156082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Deffi &#064; <time class="tag-quote__quoted-time" datetime="2008-12-29T17:11:26+00:00">29.12.08, 17:11</time></span><div class='quote '>Я скачала вот этот архив, Input_D.zip (1.83 кб) открыла WinRar и у меня там один файл Input_D без разширения и все больше ничего нет.</div></div>Сама добавь расширение распакованному файлу Input_D, например ZIP, или RAR. И распакуй еще раз :) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=260801&view=findpost&p=2156082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Deffi &#064; <time class="tag-quote__quoted-time" datetime="2008-12-29T17:11:26+00:00">29.12.08, 17:11</time></span><div class='quote '>ввожу число например 64, результат в восьмеричной системе этого числа 8 (правильно я понимаю?) , а появляется в результате 100</div></div>Ну так это и есть правильный результат.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=260801&view=findpost&p=2156082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Deffi &#064; <time class="tag-quote__quoted-time" datetime="2008-12-29T17:11:26+00:00">29.12.08, 17:11</time></span><div class='quote '>В Tasm можно как-то сделать поддержку русского языка, а то у меня текст крякозяблами отображается?</div></div>В тасме нельзя :) Тебе нужно русификатор установить, для DOS-сессии.]]></description>
        <author>AndNot</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156082</guid>
        <pubDate>Mon, 29 Dec 2008 17:11:26 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2156082</link>
        <description><![CDATA[Deffi: Я скачала вот этот архив, Input_D.zip  (1.83 кб) открыла WinRar и у меня там один файл Input_D без разширения и все больше ничего нет. <br><br>В Tasm можно как-то сделать поддержку русского языка, а то у меня текст крякозяблами отображается?<br><br>И по поводу экзешника, открываю его появляется приглашения ввода числа, ввожу любое число (экзешник уже не закрывается после ввода) но результаты странные, ввожу число например 64, результат в восьмеричной системе этого числа 8 (правильно я понимаю?) , а появляется в результате 100. Я скриншот прикрепляю, посмотри пожалуйсто.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2155167</guid>
        <pubDate>Sun, 28 Dec 2008 19:29:24 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2155167</link>
        <description><![CDATA[Федосеев Павел: Сейчас еще раз проверил - в архиве два файла Input_D.asm и Input_D.exe. Input_D.asm в кодировке DOS. Input_D.exe запускается и в конце ждет нажатия. Т.е. работает. Покажи еще раз свою программу. Может быть вместо int 21h выполняется int 21 ?<br>
А какой файл в архиве без расширения? Там один exe-шник, другой asm. Сам архив открывается WinZip&#39;ом или WinRar&#39;ом.<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">.MODEL &nbsp;Small</div><div class="code_line">&nbsp;</div><div class="code_line">.DATA</div><div class="code_line">&nbsp;</div><div class="code_line">KeyBuf &nbsp;db &nbsp; &nbsp; &nbsp;6, 0, 6 dup(0) &nbsp; &nbsp; &nbsp;;max,len,string,CR(0dh)</div><div class="code_line">CR_LF &nbsp; db &nbsp; &nbsp; &nbsp;0Dh, 0Ah, &#39;$&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">Prompt &nbsp;db &nbsp; &nbsp; &nbsp;&#39;Введите число: &#39;, &#39;$&#39;</div><div class="code_line">Res10 &nbsp; db &nbsp; &nbsp; &nbsp;&#39;Введено число (десятичное &nbsp;): &#39;, &#39;$&#39;</div><div class="code_line">Res08 &nbsp; db &nbsp; &nbsp; &nbsp;&#39;Введено число (восьмеричное): &#39;, &#39;$&#39;</div><div class="code_line">Error01 db &nbsp; &nbsp; &nbsp;&#39;Ошибка ввода числа&#39;,0Dh, 0Ah, &#39;$&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">Numer &nbsp; dw &nbsp; &nbsp; &nbsp;?</div><div class="code_line">&nbsp;</div><div class="code_line">.CODE</div><div class="code_line">&nbsp;</div><div class="code_line">; выводит число в регистре AX на экран</div><div class="code_line">; входные данные:</div><div class="code_line">; cx - система счисления (не больше 10)</div><div class="code_line">; ax - число для отображения</div><div class="code_line">Show_ax PROC</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; di, di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; di - кол. цифр в числе</div><div class="code_line">@@Conv:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; dx, dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;div &nbsp; &nbsp; cx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = num mod 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; dl, &#39;0&#39; &nbsp; &nbsp; &nbsp; &nbsp; ; перевод в символьный формат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; di</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; складываем в стэк</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; &nbsp;ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@conv</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выводим из стэка на экран</div><div class="code_line">@@Show:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = очередной символ</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ah - функция вывода символа на экран</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; повторяем пока di&#60;&#62;0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@show</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Show_ax ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">; преобразования строки в число</div><div class="code_line">; на входе:</div><div class="code_line">; ds:[si] - строка с числом</div><div class="code_line">; ds:[di] - адрес числа</div><div class="code_line">; на выходе</div><div class="code_line">; ds:[di] - число</div><div class="code_line">; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)</div><div class="code_line">Str2Num PROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cl, ds:[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ch, ch</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;</div><div class="code_line">@@Loop:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; ; умножаем ax на 10 ( dx:ax=ax*bx )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; игнорируем старшее слово</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; dx, 0 &nbsp; &nbsp; &nbsp;; проверяем, результат на переполнение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Error</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; al, [si] &nbsp; ; Преобразуем следующий символ в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jb &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ah, ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; ax, [di]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jc &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp;; Если сумма больше 65535</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;@@Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">@@Error:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Str2Num ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">Main &nbsp; &nbsp;PROC &nbsp; &nbsp;FAR</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, @DATA</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ds, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; es, ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ввод числа с клавиатуры (строки)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Prompt</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 0Ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; dx, offset KeyBuf</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; перевод строки (на новую строку)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; преобразование строки в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; si, KeyBuf+1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; di, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Str2Num</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; проверка на ошибку</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnc &nbsp; &nbsp; @@NoError</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если есть ошибка ввода - напечатать сообщение об ошибке</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Error01</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp; @@Exit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если нет ошибки ввода - напечатать число</div><div class="code_line">@@NoError:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; в десятичном представлении</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Res10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Show_ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; в восьмеричном представлении</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Res08</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 8</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Show_ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выход</div><div class="code_line">@@Exit:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ожидание нажатия любой клавиши</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,01h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax,4c00h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">Main &nbsp; &nbsp;ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">.STACK &nbsp;100h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;END &nbsp; &nbsp; Main</div></ol></div></div></div></div>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154824</guid>
        <pubDate>Sun, 28 Dec 2008 10:32:36 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154824</link>
        <description><![CDATA[Deffi: Приглашение действительно появилось, а вот когда добавила в конце после метки @@Exit ввод любой клавиши - все равно экзешник закрывается при вводе числа.<br>Скачала файл Input_D.zip, а чем открыть сам файл, он у тебя там без разширения?]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154355</guid>
        <pubDate>Sat, 27 Dec 2008 17:33:51 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154355</link>
        <description><![CDATA[Федосеев Павел: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Запускаю ехе файл, черный пустой экран<br>
</div></div><br>
Чуть позже я подкорректировал исходник. Добавил &quot;приглашение&quot; - &#39;Введите число: &#39;<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">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ввод числа с клавиатуры (строки)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx, Prompt</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Скомпилила и слинковала. Запускаю ехе файл .... ввожу любое число программа закрывается и все.<br>
</div></div><br>
<br>
Добавь в конце после метки @@Exit ввод любой клавиши<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">@@Exit:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ожидание нажатия любой клавиши</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,01h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax,4c00h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">Main &nbsp; &nbsp;ENDP</div></ol></div></div></div></div><br>
Вот мой exe-шник]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154315</guid>
        <pubDate>Sat, 27 Dec 2008 15:49:58 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154315</link>
        <description><![CDATA[Deffi: Ну ладно, тогда вопрос первый как работает твоя программа? Скомпилила и слинковала. Запускаю ехе файл, черный пустой экран, ввожу любое число программа закрывается и все.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154302</guid>
        <pubDate>Sat, 27 Dec 2008 15:31:37 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154302</link>
        <description><![CDATA[Федосеев Павел: К сожалению, нет ;) . Задавай на форуме. И ведь я не один.]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154298</guid>
        <pubDate>Sat, 27 Dec 2008 15:27:16 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154298</link>
        <description><![CDATA[Deffi: Спасибо огромное Павел. У тебя есть аська, а то есть вопросы, чтоб тут не флудить.]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154245</guid>
        <pubDate>Sat, 27 Dec 2008 13:19:10 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154245</link>
        <description><![CDATA[Федосеев Павел: Заметил у себя ошибку. Если ввести число 65536, то результат будет равен 0. А должно быть сообщение об ошибке.<br>
Нужно добавить строку в процедуру Str2Num<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">&nbsp;&nbsp; &nbsp; &nbsp; add &nbsp; &nbsp; ax, [di]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; jc &nbsp; &nbsp; &nbsp;@@Error &nbsp; &nbsp; &nbsp; ; Если сумма больше 65535</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; loop &nbsp; &nbsp;@@Loop</div></ol></div></div></div></div>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154170</guid>
        <pubDate>Sat, 27 Dec 2008 11:10:00 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2154170</link>
        <description><![CDATA[Федосеев Павел: Лови, Deffi.<br>
Все за тебя делать не стал, но ввод и преобразование строки в число показал.<br>
Компилируй и линкуй:<br>
tasm /zn filename.asm<br>
tlink filename.obj<br>
<br>
По ссылке <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=258712' target='_blank'>Сложение чисел</a> посмотри. Там немного прокомментирован перевод числа в десятичное представление. Восьмеричное - почти то же самое, только основание системы - 8.<br>
<br>
Для ввода строки я использовал функцию DOS 0Ah. Она вводит в буфер следующего формата:<br>
0-й байт - максимально вводимое число символов + 1 (на символ перевода строки - CR)<br>
1-й байт - по возвращении из int 21h здесь будет длина введенной строки (без учета CR)<br>
2-й байт - начало буфера ввода, его длина равна числу в 0-м байте.<br>
<br>
Т.к. максимальное число, умещающееся в слове (двух байтах) равно 65535, то длину буфера я выбрал равной 5+1=6 байтам.<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">.MODEL &nbsp;Small</div><div class="code_line">&nbsp;</div><div class="code_line">.DATA</div><div class="code_line">&nbsp;</div><div class="code_line">KeyBuf &nbsp;db &nbsp; &nbsp; &nbsp;6, 0, 6 dup(0) &nbsp; &nbsp; &nbsp;;max,len,string,CR(0dh)</div><div class="code_line">CR_LF &nbsp; db &nbsp; &nbsp; &nbsp;0Dh, 0Ah, &#39;$&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">Prompt &nbsp;db &nbsp; &nbsp; &nbsp;&#39;Введите число: &#39;, &#39;$&#39;</div><div class="code_line">Res10 &nbsp; db &nbsp; &nbsp; &nbsp;&#39;Введено число (десятичное &nbsp;): &#39;, &#39;$&#39;</div><div class="code_line">Res08 &nbsp; db &nbsp; &nbsp; &nbsp;&#39;Введено число (восьмеричное): &#39;, &#39;$&#39;</div><div class="code_line">Error01 db &nbsp; &nbsp; &nbsp;&#39;Ошибка ввода числа&#39;,0Dh, 0Ah, &#39;$&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">Numer &nbsp; dw &nbsp; &nbsp; &nbsp;?</div><div class="code_line">&nbsp;</div><div class="code_line">.CODE</div><div class="code_line">&nbsp;</div><div class="code_line">; выводит число в регистре AX на экран</div><div class="code_line">; входные данные:</div><div class="code_line">; cx - система счисления (не больше 10)</div><div class="code_line">; ax - число для отображения</div><div class="code_line">Show_ax PROC</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; di, di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; di - кол. цифр в числе</div><div class="code_line">@@Conv:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; dx, dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;div &nbsp; &nbsp; cx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = num mod 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; dl, &#39;0&#39; &nbsp; &nbsp; &nbsp; &nbsp; ; перевод в символьный формат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; di</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; складываем в стэк</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or &nbsp; &nbsp; &nbsp;ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@conv</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выводим из стэка на экран</div><div class="code_line">@@Show:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; dl = очередной символ</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ah - функция вывода символа на экран</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dec &nbsp; &nbsp; di &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; повторяем пока di&#60;&#62;0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@show</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Show_ax ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">; преобразования строки в число</div><div class="code_line">; на входе:</div><div class="code_line">; ds:[si] - строка с числом</div><div class="code_line">; ds:[di] - адрес числа</div><div class="code_line">; на выходе</div><div class="code_line">; ds:[di] - число</div><div class="code_line">; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)</div><div class="code_line">Str2Num PROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cl, ds:[si]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ch, ch</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; bx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;</div><div class="code_line">@@Loop:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mul &nbsp; &nbsp; bx &nbsp; &nbsp; &nbsp; &nbsp; ; умножаем ax на 10 ( dx:ax=ax*bx )</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax &nbsp; ; игнорируем старшее слово</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; dx, 0 &nbsp; &nbsp; &nbsp;; проверяем, результат на переполнение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnz &nbsp; &nbsp; @@Error</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; al, [si] &nbsp; ; Преобразуем следующий символ в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jb &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al, &#39;9&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ja &nbsp; &nbsp; &nbsp;@@Error</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; al, &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ah, ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; ax, [di]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; si</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;@@Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;clc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">@@Error:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; ax, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; [di], ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; es</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ds</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">Str2Num ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">Main &nbsp; &nbsp;PROC &nbsp; &nbsp;FAR</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov ax, @DATA</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov ds, ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; es, ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; ввод числа с клавиатуры (строки)</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, Prompt</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah, 0Ah</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; dx, offset KeyBuf</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; перевод строки (на новую строку)</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; преобразование строки в число</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; si, KeyBuf+1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; di, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Str2Num</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; проверка на ошибку</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jnc &nbsp; &nbsp; @@NoError</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если есть ошибка ввода - напечатать сообщение об ошибке</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, Error01</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp; @@Exit</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; если нет ошибки ввода - напечатать число</div><div class="code_line">@@NoError:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; в десятичном представлении</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, Res10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Show_ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; в восьмеричном представлении</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, Res08</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax, Numer</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; cx, 8</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Show_ax</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;lea dx, CR_LF</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выход</div><div class="code_line">@@Exit:</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov ax,4c00h</div><div class="code_line">&nbsp;&nbsp; &nbsp;int 21h</div><div class="code_line">Main &nbsp; &nbsp;ENDP</div><div class="code_line">&nbsp;</div><div class="code_line">.STACK &nbsp;100h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;END &nbsp; &nbsp; Main</div></ol></div></div></div></div>]]></description>
        <author>Федосеев Павел</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2153726</guid>
        <pubDate>Fri, 26 Dec 2008 14:32:57 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2153726</link>
        <description><![CDATA[Deffi: Помогите пожалуйсто&#33;]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2152996</guid>
        <pubDate>Thu, 25 Dec 2008 15:17:58 +0000</pubDate>
        <title>Перевод целых чисел из десятичной в восьмиричную систему счисления</title>
        <link>https://forum.sources.ru/index.php?showtopic=260801&amp;view=findpost&amp;p=2152996</link>
        <description><![CDATA[Deffi: Здраствуйте. Нужно чтоб программа отображала на экране любое введенное целое число в восьмиричной системе счисления. <br>
Возникла проблема - не понимаю как записать, чтоб пользователь мог вводить любое число. Да и исходник не уверена что правильный. Вобщем кто разбирается подкоректируйте его пожалуйта. Буду очень благодарна&#33;<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">.MODEL Small</div><div class="code_line">.STACK 100h</div><div class="code_line">.DATA</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;String &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db &nbsp; &nbsp; &nbsp;16 dup (?),&#39;$&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; Резервируем 16 байт для строки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;StringEnd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp; $-1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; Указывает на символ &#39;$&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Number &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp; 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Str_digit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;&#39;5.479$&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Obrob_digit &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;8 dup (?),&#39;$&#39;</div><div class="code_line">; &nbsp; &nbsp; &nbsp; Drob_chast &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db &nbsp; &nbsp; &nbsp;8 dup (?),&#39;$&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Mes_1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;0dh, 0ah, &quot;Chislo 6219 v 16-y sisiteme schisleniya - &quot;, &quot;$&quot; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Mes_2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;0dh, 0ah, &quot;Chislo 6219 v 8-y sisiteme schisleniya - &quot;, &quot; $&quot; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Mes_3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;0dh, 0ah, &quot;Chislo 6219 v 2-y sisiteme schisleniya - &quot;, &quot; $&quot; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Mes_4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db &nbsp; &nbsp; &nbsp;0dh, 0ah, &quot;Chislo 0.479 v 16-y sisiteme schisleniya - &quot;, &quot; $&quot; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">.CODE</div><div class="code_line">ORG &nbsp; &nbsp; 100h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Start:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax,@data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ds,ax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; es,ax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ch,16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx,Mes_4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Razdel</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx,Obrob_digit</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; ah,09h</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lea &nbsp; &nbsp; dx,Drob_chast</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; ax,dx</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; bx,16</div><div class="code_line">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jmp &nbsp; &nbsp; Proverka_num</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Perevod</div><div class="code_line">&nbsp;</div><div class="code_line">lea &nbsp; &nbsp; dx,Mes_2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ax,Number</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp;bx,8</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; di,StringEnd-9 </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Perevod_num</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,09h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; dx,String</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h</div><div class="code_line">Perevod_num proc</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;di</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;cx </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; cx,cx</div><div class="code_line">&nbsp;</div><div class="code_line">Proverka_num:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; dx,dx </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;div &nbsp; &nbsp; bx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;ax,dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; al,&#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; al,&#39;9&#39; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jbe &nbsp;Cifra </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add &nbsp; &nbsp; al,&#39;A&#39;-(&#39;9&#39;+1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">Cifra:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stosb</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;ax,dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc &nbsp; &nbsp; cx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;test &nbsp;ax,ax </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; Proverka_num</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; cx &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; di</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">Perevod_num endp</div><div class="code_line">&nbsp;</div><div class="code_line">end Start</div></ol></div></div></div></div>]]></description>
        <author>Deffi</author>
        <category>Assembler</category>
      </item>
	
      </channel>
      </rss>
	