Как сделать калькулятор в блокноте

от admin

Калькулятор, блокнот и программирование

Не секрет что каждый из нас хоть раз открывал 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!$ .
image
Все что осталось это сохранить наш файл с расширением 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 файлы блокнотом, видел письмена подобные этим:
    image

    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!$ .
    image
    Все что осталось это сохранить наш файл с расширением com и запустить.

    Стильный кнопочный html калькулятор. Дек 7 2016

    Иногда на своём сайте хочется, а иногда даже требуется разместить обычный кнопочный html калькулятор. В этой статье я покажу как создать обычный стильный кнопочный калькулятор с помощью HTML, CSS и JavaScript.

    Создаём два файла: index.html и style.css.

    Также я создала два фоновых рисунка, один для фона панели калькулятора, другой для фона кнопок. Вы можете этого не делать, а просто обозначить цвет фона панели и кнопок.

    В коде файла index.html наш калькулятор будет выглядеть в виде таблицы, заключённой в форму. В качестве значения атрибута OnClick тегов input будет прописан код JavaScript, который делает html калькулятор рабочим.

    В файле style.css пишем стили для html калькулятора.

    В итоге должен получиться вот такой стильный кнопочный html калькулятор:

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

Похожие статьи