Калькулятор, блокнот и программирование
Не секрет что каждый из нас хоть раз открывал com или exe файлы блокнотом, видел письмена подобные этим:
В целях приподнятия завесы тайны странного наречия и написана эта статья.
Сразу стоит отметить, что символы, приведенные выше, по большей части, не несут смысловой нагрузки в своем начертании. Они являются визуальной формой числового представления. В свою очередь, числовое представление является операционным кодом машинного языка, и хранителем сакрального смысла этих тайных знаков.
Практика
Перейдем к более детальному изучению. Для этого нам понадобится книга написанная в недрах корпорации intel (intel 80386 Programmer’s Reference Manual). Где детально рассказывается о формате инструкций процессора.
Обычно первой программой на любом языке программирования является вывод сообщения «Hello World!». Чтож… Не будем отступать от классики и приступим.
На первом этапе, нам придется опустится как можно ближе к опкодам и написать программу на языке Ассемблера
Теперь, имея на руках готовую программу, можно перейти к этапу трансляции.
Трансляция
org 100h
Это просто смещение и код для него не генерируется. Будем использовать 100h для будущего расчета адресов.
mov ah,9h — заносим в регистр ah число 9h.
Переведем в машинные коды. Открываем второй том интеловской книги на странице с инструкцией mov. И видим…
| Opcode | Instruction | Clocks | Description |
| 88 /r | MOV r/m8,r8 | 2/2 | Move byte register to r/m byte |
| 89 /r | MOV r/m16,r16 | 2/2 | Move word register to r/m word |
| 89 /r | MOV r/m32,r32 | 2/2 | Move dword register to r/m dword |
| 8A /r | MOV r8,r/m8 | 2/4 | Move r/m byte to byte register |
| 8B /r | MOV r16,r/m16 | 2/4 | Move r/m word to word register |
| 8B /r | MOV r32,r/m32 | 2/4 | Move r/m dword to dword register |
| 8C /r | MOV r/m16,Sreg | 2/2 | Move segment register to r/m word |
| 8D /r | MOV Sreg,r/m16 | 2/5,pm=18/19 | Move r/m word to segment register |
| A0 | MOV AL,moffs8 | 4 | Move byte at (seg:offset) to AL |
| A1 | MOV AX,moffs16 | 4 | Move word at (seg:offset) to AX |
| A1 | MOV EAX,moffs32 | 4 | Move dword at (seg:offset) to EAX |
| A2 | MOV moffs8,AL | 2 | Move AL to (seg:offset) |
| A3 | MOV moffs16,AX | 2 | Move AX to (seg:offset) |
| A3 | MOV moffs32,EAX | 2 | Move EAX to (seg:offset) |
| B0 + rb | MOV reg8,imm8 | 2 | Move immediate byte to register |
| B8 + rw | MOV reg16,imm16 | 2 | Move immediate word to register |
| B8 + rd | MOV reg32,imm32 | 2 | Move immediate dword to register |
| C6 | MOV r/m8,imm8 | 2/2 | Move immediate byte to r/m byte |
| C7 | MOV r/m16,imm16 | 2/2 | Move immediate word to r/m word |
| C7 | MOV r/m32,imm32 | 2/2 | Move immediate dword to r/m dword |
Как же выбрать из всего этого множества необходимую команду? Регистр ah является байтным регистром. Плюс нам необходимо занести в регистр число 9. Поэтому выбираем опкод для MOV reg8, imm8, это B0+rb, где rb номер регистра, который можно взять из следующей таблицы.
| rb | rb | rd | |
| 0 | AL | AX | EAX |
| 1 | CL | CX | ECX |
| 2 | DL | DX | EDX |
| 3 | BL | BX | EBX |
| 4 | AH | SP | ESP |
| 5 | CH | BP | EBP |
| 6 | DH | SI | ESI |
| 7 | BH | DI | EDI |
Номер регистра ah равен 4. Отсюда B0+4=B4. Число, которое будет занесено в регистр, пишется следом за опкодом инструкции. Таким образом, mov ah, 9h превращается в B4, 9 (запятая поставлена лишь для визуального отделения чисел).
Следующая инструкция mov dx, message . В регистр dx заносим адрес строки message. Пока рассчитать его мы не можем, поэтому поставим временную заглушку. Пользуясь двумя приведенными выше таблицами, получаем опкод для mov dx — BA,100, где 100 является временной мерой.
Теперь транслируем int 21h и int 20h , из приведенной ниже таблицы можно получить нужные опкоды — это CD,21 и CD,20.
| Opcode | Instruction | Clocks | Description |
| CD ib | INT imm8 | 37 | Interrupt numbered by immediatebyte |
| CD ib | INT imm8 | pm=59 | Interrupt—Protected Mode, same privilege |
| CD ib | INT imm8 | pm=99 | Interrupt—Protected Mode, moreprivilege |
| CD ib | INT imm8 | pm=119 | Interrupt—from V86 mode to PL 0 |
| CD ib | INT imm8 | ts | Interrupt—Protected Mode, via task |
Запишем полученную программу: B4, 09, BA, 100, CD, 21, CD, 20 .
Вернемся к нашей заглушке потому, как нам все еще необходимо рассчитать адрес нашей строки для вывода. Теперь это сделать достаточно просто. Посчитаем все пары цифр по порядку. Их девять (число 100h не входит в один байт. Поэтому требуется два). Таким образом, адрес строки будет равен 100h+9h=109h. Заменяем 100h на 109h. Число 109h, по понятным причинам, не может быть помещено в один байт, поэтому понадобиться двухбайтовое значение 09,01 таким образом, получаем следующую программу: B4, 09, BA, 09, 01, CD, 21, CD, 20.
Кодинг
Для простоты кодирования приведем числа к десятичной системе счисления (для оправдания заголовка, на калькуляторе)
180, 9, 186, 9, 1, 205, 33, 205, 32 .
Вооружаемся блокнотом и вставляем нужные ASCII символы.
Не забываем ввести в конце Hello World!$ .
Все что осталось это сохранить наш файл с расширением com и запустить.
Как подружить Блокнот с Калькулятором Windows, чтобы облегчить расчёты?
Как подружить Блокнот с Калькулятором Windows, чтобы облегчить расчёты?

Меня периодически просят помочь сделать те или иные расчёты, необходимые для постройки самоделок, описанных на сайте. Попытался найти нормальный мануал по калькулятору Windows, чтобы можно было его добавить к соответствующим статьям, но как всегда ничего не нашёл. То ли его вообще не существует, то ли я не умею искать.
Самые интересные ролики на Youtube
Единственным вменяемым учебником, который удалось отыскать, был самоучитель «Работа с калькулятором» В. В. Пупышева. Правда, в этом хелпе автор описал только «Стандартный» (Standard) калькулятор и не затронул «Инженерный» (Science). А между тем, именно в Инженерном калькуляторе имеется возможность вводить данные в текстовом виде.
О чём речь?
Дело в том, что при вводе в калькулятор длинных дробных чисел, очень легко допустить ошибку, которую, к тому же, ещё и сложно обнаружить, так как в окошке ввода можно увидеть только последнее введённое число, не говоря уже о произведённых операциях.
Есть масса мудрёных калькуляторов, которые позволяют видеть одновременно все вводимые числа и действия, произведённые над ними. Но, иногда кажется, что проще написать новую программу-калькулятор, чем изучить одну из существующих.
В то же время, в ОС Windows уже имеется простой, интуитивно понятный калькулятор, единственным недостатком которого является отсутствие внятного туториала.
В общем, чтобы устранить этот пробел, решил показать на примерах, как можно выполнять простые расчёты на Windows-овском Инженерном калькуляторе, путём прямого ввода текста из текстового редактора.
На картинке показано, как переключить калькулятор из режима «Стандартный» в режим «Инженерный».
Пример 1.
Предположим, нам нужно сделать следующее вычисление для расчёта мощности силового трансформатора:
P = 1,5 * 6,25² / 1,69 =
Набираем в Блокноте:
Количество и расположение пробелов роли не играет. Но, знак «=» необходим.
Копируем эту строчку в буфер обмена Windows (Ctrl+C) и вставляем в окно Инженерного калькулятора (Ctrl+V).
Получаем ответ: ≈34,671
Ответ можно скопировать обратно в Блокнот.

Откуда взялся знак «@»?
Если кликнуть по любой клавише калькулятора правой кнопкой мыши, то можно узнать какая клавиша быстрого доступа соответствует тои или иной кнопке калькулятора.
В данном случае, кнопке калькулятора «x^2» (квадрат числа) соответствует клавиатурная клавиша «@».
Пример 2.
1007*50 / 50*422,8 –50 –1007 =
Калькулятор «знает», что деление и умножение нужно производить перед сложением и вычитанием, поэтому, если знак «/», это дробная черта, а не знак деления, то нужно добавить скобки, чтобы калькулятор это понял.
Копируем эту строчку из Блокнота в окно Инженерного калькулятора Windows:
1007*50 / (50*422,8 –50 –1007) =
Получаем ответ: ≈2,507
Пример 3.
Вычисление корня произвольной степени:
9 √1953125 =
Набираем в Блокноте:
1953125 y9r =
Где, «y», это кнопка «x^y», а «r», это кнопка «1/x». То есть, возводим в дробную степень.
Или набираем в Блокноте:
1953125 iy9 =
Где «i». это чекбокс «Inv», , а «y», это кнопка «x^y». То есть, вместо возведения в степень производим извлечение корня
Копируем строчку из Блокнота в окно ввода Калькулятора.
В обоих случаях получаем ответ: =5
Порядок записи подобных выражений в текстовом редакторе соответствует порядку набора с использованием кнопок калькулятора. Только вместо названий кнопок, в текстовый редактор нужно вводить соответствующие им названия горячих клавиш.
Нашли ошибку в тексте?
Выделите ошибочный текст мышкой и нажмите Ctrl + Enter
Спасибо за помощь!
Комментарии (45)
Страниц: « 1 2 3 4 [5] Показать все
Павел, в последних версиях Windows калькулятор совсем испортился. Я перешёл на портативный Калькулятор-блокнот [46.92 Кб]. Понимает переменные и умеет решать уравнения. При этом весь хелп поместился в десяток фраз. То есть, разобраться со всеми функциями можно за одну минуту. Качайте отсюда>>>
Успехов в вычислениях!
портативный Калькулятор-блокнот
Не понимает ,123 (только 0,123)
не понимает *enter, приходится вводить ^2
фри-софт, он такой.
Zong, кроме необходимости вводить 0, я других недостатков не вижу. Главное что он понимает переменные, что обычно на первом месте в любых вычислениях.
Не могу спорить, у всех разные потребности, но вот я попробовал перейти с calc и в 1м же вычислении 2 раза споткнулся. То есть идея классная, но есть и досадные мелочи. Даже в вин-калькуляторе есть горячие клавиши для квадрата и куба, а тут — увы. Для быстрых вычислений встроенный зачастую удобнее.
Zong, Калькулятору блокноту не нужны клавиши. Там в настройках их можно отключить и тогда окно ввода растягивается как вам удобно. Все формулы можно набирать в любом текстовом редакторе с помощью клавиатуры ПК, а потом просто копировать в окно калькулятора. Там ещё есть очень удобная функция, калькулятор показывает в какой строке и в каком по счёту месту совершена ошибка ввода.
А для быстрых вычислений, согласен, удобнее самый калькулятор Windows. К тому же он быстрее загружается.
Как сделать калькулятор в блокноте
Для того, чтобы создать сайт в блокноте, можно воспользоваться штатным блокнотом Windows. Но, лучше для создания сайта, воспользоваться бесплатными блокнотами Notepad2 или Notepad++

- src — обязательный параметр, в котором указывается адрес изображения (вместо URL_ИЗОБРАЖЕНИЯ необходимо прописать адрес, где хранится Ваше изображение).
Примечание:- Если изображение находится в одной папке с Вашей html-страницей, то достаточно написать название изображения, иначе нужно прописывать либо абсолютный или относительный URL;
- Не забудьте указать расширение изображения. Например, .jpg, .gif, .jpeg.
Не секрет что каждый из нас хоть раз открывал com или exe файлы блокнотом, видел письмена подобные этим:

Opcode Instruction Clocks Description 88 /r MOV r/m8,r8 2/2 Move byte register to r/m byte 89 /r MOV r/m16,r16 2/2 Move word register to r/m word 89 /r MOV r/m32,r32 2/2 Move dword register to r/m dword 8A /r MOV r8,r/m8 2/4 Move r/m byte to byte register 8B /r MOV r16,r/m16 2/4 Move r/m word to word register 8B /r MOV r32,r/m32 2/4 Move r/m dword to dword register 8C /r MOV r/m16,Sreg 2/2 Move segment register to r/m word 8D /r MOV Sreg,r/m16 2/5,pm=18/19 Move r/m word to segment register A0 MOV AL,moffs8 4 Move byte at (seg:offset) to AL A1 MOV AX,moffs16 4 Move word at (seg:offset) to AX A1 MOV EAX,moffs32 4 Move dword at (seg:offset) to EAX A2 MOV moffs8,AL 2 Move AL to (seg:offset) A3 MOV moffs16,AX 2 Move AX to (seg:offset) A3 MOV moffs32,EAX 2 Move EAX to (seg:offset) B0 + rb MOV reg8,imm8 2 Move immediate byte to register B8 + rw MOV reg16,imm16 2 Move immediate word to register B8 + rd MOV reg32,imm32 2 Move immediate dword to register C6 MOV r/m8,imm8 2/2 Move immediate byte to r/m byte C7 MOV r/m16,imm16 2/2 Move immediate word to r/m word C7 MOV r/m32,imm32 2/2 Move immediate dword to r/m dword rb rb rd 0 AL AX EAX 1 CL CX ECX 2 DL DX EDX 3 BL BX EBX 4 AH SP ESP 5 CH BP EBP 6 DH SI ESI 7 BH DI EDI Opcode Instruction Clocks Description CD ib INT imm8 37 Interrupt numbered by immediatebyte CD ib INT imm8 pm=59 Interrupt—Protected Mode, same privilege CD ib INT imm8 pm=99 Interrupt—Protected Mode, moreprivilege CD ib INT imm8 pm=119 Interrupt—from V86 mode to PL 0 CD ib INT imm8 ts Interrupt—Protected Mode, via task Для простоты кодирования приведем числа к десятичной системе счисления (для оправдания заголовка, на калькуляторе)
180, 9, 186, 9, 1, 205, 33, 205, 32 .
Вооружаемся блокнотом и вставляем нужные ASCII символы.
Не забываем ввести в конце Hello World!$ .
Все что осталось это сохранить наш файл с расширением com и запустить.Стильный кнопочный html калькулятор. Дек 7 2016
Иногда на своём сайте хочется, а иногда даже требуется разместить обычный кнопочный html калькулятор. В этой статье я покажу как создать обычный стильный кнопочный калькулятор с помощью HTML, CSS и JavaScript.
Создаём два файла: index.html и style.css.
Также я создала два фоновых рисунка, один для фона панели калькулятора, другой для фона кнопок. Вы можете этого не делать, а просто обозначить цвет фона панели и кнопок.
В коде файла index.html наш калькулятор будет выглядеть в виде таблицы, заключённой в форму. В качестве значения атрибута OnClick тегов input будет прописан код JavaScript, который делает html калькулятор рабочим.
В файле style.css пишем стили для html калькулятора.
В итоге должен получиться вот такой стильный кнопочный html калькулятор:

Конечно это — не инженерный калькулятор, но для расчёта простых арифметических действий вполне удобен.