| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Windows/Dos > TASM. Где хранятся данные? |
| Автор: Sanek123 25.5.2009, 12:43 | ||
Ребята, вот код:
Подскажите как теперь присвоить введнные числа пременным, например x,y,z и вывести результат, скажем сложения всех трех на экран? Точнее я не понимаю где все эти значения храняться в каких регистрах? |
| Автор: Mikl_ 25.5.2009, 14:40 |
| Sanek123, введеные данные для начала придется перевести из набора строк в число. Затем провести с этим числом какие-то операции, затем результат снова перевести из числа в строку и вывести эту строку на экран или в файл. У микропроцессора 8 регистров общего назначения -- поэтому данные как правило хранят в оперативной памяти |
| Автор: Sanek123 25.5.2009, 15:49 | ||
54268742841265 - а разве это не одна строка? Это набор строк? Так откуда все-таки их извлекать и куда записывать? Если они в памяти, то как к ней обратиться? |
| Автор: Akina 25.5.2009, 16:20 |
Это для тебя одна строка. Но обрабатывать ты её будешь по одному байту, каждый из которых есть однобайтовая строка. |
| Автор: turbanoff 25.5.2009, 18:15 | ||
не запутывай ты его... это одна строка. теперь на по ней пробежаться посимвольно и перевести её в число, я думаю ета тема уже поднималась, если нет загугли |
| Автор: Akina 25.5.2009, 18:18 | ||
О чём я собсно и говорю. |
| Автор: turbanoff 25.5.2009, 19:03 | ||
не самое лучшее объяснения для новичка |
| Автор: Sanek123 25.5.2009, 19:27 | ||||
Поправил немного
Таким образом я получаю строку в [bx] и уже могу вывести
Собственно вопрос, где храняться переменные - решен. Тепер знаю откуда взять и как вывести. Глупо, конечно... Ребята, а как все-таки перевести строку в число? Потому как при сложении происходит конкатенация: 23+56=2356... |
| Автор: Mikl_ 26.5.2009, 03:38 | ||
"...Так эта-ж бубль-гум!" (м/ф "Возвращение блудного попугая") У тебя есть две строки String_X='2','3' и String_Y='5','6' переводим строку в число X=(String_X[0]-'0')*10+String_X[1]-'0'=(32h-30h)*0Ah+33h-30h=17h Y=(String_Y[0]-'0')*10+String_Y[1]-'0'=(35h-30h)*0Ah+36h-30h=38h X+Y=17h+38h=4Fh Теперь обратная процедура из числа в строку 4Fh / 0Ah = 7 остаток 9 String_Result[0]=7+30h=37h='7' первый символ String_Result[1]=9+30h=39h='9' второй символ String_Result='7','9' |
| Автор: Sanek123 26.5.2009, 21:11 | ||
Можно отот фрагмент поподробнее? Желательно на ассемблере! Алгоритм мне понятен немогу записать по правилам синтаксиса асм-а. |
| Автор: Mikl_ 27.5.2009, 03:42 | ||||
|
| Автор: Sanek123 27.5.2009, 09:44 | ||||
Не надо так ругаться, ассемблер не изучал. Учу сейчас по книжкам и что непонятно у вас спрашиваю. Из твоего примера не понял откуда в buffer взялось число (которое ввели с клавы) гдето указано записать ASCII в buffer.
По правилам команды mov значение помещается в первый операнд. Или я не прав? |
| Автор: Mikl_ 27.5.2009, 11:07 | ||||
| Sanek123, читай про функцию 0Ah прерывания 21h вводит строку длиной до 254 символов, выводя эти символы на экран. Правильно интерпритируются нажатия на Backspace и Delete. Ввод символов продолжается до тех пор, пока не нажата клавиша Enter. Адрес памяти, куда будет помещена строка символов, указан в регистрах DS:DX. Для ввода 50-символьной строки надо отвести 53 байта памяти. Первый байт будет содержать число байтов отведенных для этой строки плюс 1 для символа возврата каретки. Второй байт — число реально введенных символов — это число поместит операционная система DOS как только ты нажмешь на Enter. Последний байт отводится под символ возврата каретки.
Наверное, не прав, только о чем вопрос? |
| Автор: Sanek123 27.5.2009, 21:38 | ||||
| Mikl_, премного благодарен за помощь! Только 0ah не катит, так как ввод скрыт от пользователя 08h, далее распознание символа и если это цифра - отображение 02h и запись в переменную. Плюс eax, abx, edx - 32-разрядные: они мне не нужны. Если не трудно поправьте, пожалуйста, код:
Я исходник упростил до неузнаваемости что б, как говориться, на пальцах прощупать. В @strtoint: надо умножать на 10
но что-то mul не идет. |
| Автор: Sanek123 31.5.2009, 09:57 |
| Всем спасибо за поддержку! Разобрался с мулом : mul - команда умножения. Умножает содержимое опреанда на значение содержащееся в регистре ах! я же пытался запихнуть второй опреанд mul bx, dx и он мне соответственно выдавал типа Fatal [..] Extra character on line Вот что бывает от неумения читать книжки, или от невнимательного их чтения! imul - тоже умножение только со знаком. A tab изначально объявил как строку db, потому и не шло, надо было dw. В соседнем топике участник привел пример кода, а на конкретном примере все оказалось понятно, вчастности перебор символов и перевод в число. Тема закрыта. |