Це мова збірки?


70

У дитинстві я програмував на радянському калькуляторі МК-61 . Він мав чотири робочих регістри (X, Y, Z, T) та 15 регістрів зберігання. Програма може мати 105 кроків.

Наскільки я пам'ятаю, він мав такі команди, як:

  • Зміна регістрів X та Y
  • Зсувні регістри (Z до T, Y до Z, X до Y)
  • Копія з реєстру зберігання (1..15) в X
  • Копіювати з X у регістр пам’яті (1..15)
  • Якщо X <0, перейдіть до кроку програми ##
  • Виконайте операцію (+, -, *, /), використовуючи значення X і Y і поставте результат на X

Чи встановлена ​​ця команда мовою складання? Чи було в мене основне уявлення про мови монтажу за допомогою цього пристрою?

Пристрій

Виявляється, це щось, що називається "програмування натискань на клавіші" .

Кумедний факт: подібний калькулятор (як цей, але з енергонезалежною пам'яттю) був використаний як резервне обладнання для обчислення траєкторії космічної місії в 1988 році. :-)


Приємно! - ця картина повертає спогади. У мене все ще десь є МК-52 в підвалі :)
DXM

Це схоже на радянський клон HP 65. Це може бути запрограмовано у зворотному польському позначенні за допомогою операцій, які натискають і тягнуть на стек. Оператори RPN просто записуються в пам'ять і інтерпретуються тим, що, ймовірно, еквівалентно процесору 4004. Код в 4004 ПЗУ, ймовірно, був складений з асемблера 4004, але натискання клавіш справді більше схожі на макроси електронних таблиць.
Мередіт Бідний

Відповіді:


13

Це не мова складання, це машина машини.

Мова машини - це все, що фізично щось означає для машини. Що стосується кишенькових комп'ютерів, це натискання клавіш, закодоване в цифри машини. Ви не надаєте більше інформації про цю машину Electronika MK61 , тому я наведу приклад TI-57 : мова машини використовувала номер ключа, вказаного як стовпець у десятках, так і рядок у одиницях. Так, наприклад, програма, яка б збільшила пам'ять 8, була б:

33 8  57 1 58 23

Це машина машини: це те, що безпосередньо інтерпретується машиною.

Мова складання - це читаний людиною текст:

RCL 8 
+
1
=
STO 8

Щоб перетворити цей текст у послідовність машинних кодів, вам знадобиться асемблер , який може бути програмою, або людина, яка переклала б цей текст у послідовність чисел.

Плутанина часто робиться, тому що часто є досить прямий переклад з монтажної мови на машинну мову, але це не завжди є повністю прямим перекладом: макроскладачі мають потужні макроси, які можуть зробити багато роботи в асемблері та генерувати багато інструкцій з мовної машини з однієї інструкції зі зборки. Простий переклад символічних адрес може включати зміну оп-коду інструкцій гілки (наприклад, при переході від короткої відносної адреси до довгої відносної або абсолютної адресації), тому це не завжди так прямо, як ви могли б подумати.


36

Я б сказав, що відповідь на обидві частини вашого запитання - ні: команди цього калькулятора не схожі на мову складання, а програмування цього калькулятора відрізняється від програмування мовою складання.

"Мова", за допомогою якого цей калькулятор запрограмований, є досить низьким, але він все ще являє собою абстракцію над конструкціями нижнього рівня, які не бачать вас як програміста. Я трохи здогадуюсь, але з вашого опису та з перегляду клавіатури (і порівняння її з подібними на вигляд калькуляторами Hewlett Packard або Texas Instruments кінця 1970-х та початку 1980-х років) я б сказав, що кожна програма "крок "не тільки може бути проста операція на зразок" додати "або" поміняти X & Y ", але і більш складні операції, такі як тригонометрія, експоненція, логарифми і т. д. Кожен з цих кроків, ймовірно, реалізований як внутрішня мікрокодована процедура. Цей мікрокод, ймовірно, запрограмований мовою складання, але я не думаю, що це '

Як описали інші, мова складання зазвичай знаходиться в дуже тісному (якщо не 1: 1) відповідність засобам базової машини. Я б сказав, що програмування мови складання включає такі характеристики, які, ймовірно, відсутні в програмуванні цього калькулятора.

  • Операції включають операції нижнього рівня, такі як побітові AND, АБО, XOR, зміщення; арифметику з цілочисельною чи (може бути) плаваючою точкою на різних розмірах даних (наприклад, одинична або подвійна точність); завантаження / зберігання різноманітних розмірів (байт, півслова, слово тощо).

  • Операції вищого рівня (триг, логарифми) - це зазвичай виклики підпрограми, а не інструкції. Є деякі винятки, такі як DEC VAX, який мав інструкцію щодо оцінки полінома. [Редагувати: ОП вказувало, що x87 також має триггерні функції.]

  • Розкрито схему адресації машини. Якщо адресний простір сегментовано, вам потрібно завантажити базовий адресу в регістр, а потім код адреси або дані щодо цього регістра. Навіть маючи плоский адресний простір, ви знаєте адреси та арифметику адрес. Зазвичай асемблери дозволяють програмістам використовувати мітки для позначення адрес. Але якщо адреса знаходиться в іншому сегменті, можливо, вам доведеться завантажити реєстр сегментів, перш ніж ви зможете потрапити на нього.

  • Вирівнюється вирівнювання пам'яті. Наприклад, на багатьох машинах 4-байтне слово можна завантажувати з або зберігати лише на адреси, кратні 4 байтам.

  • Представлення даних піддається. Зазвичай асемблери надають певний спосіб вказати числові дані в шістнадцяткових, вісімкових, десяткових, плаваючих точках та періодично символьних даних.

  • Піддається впливу спеціалізації реєстрів. Деякі архітектури дозволяють операції з цілими чи адресними адресами в деяких регістрах, але плаваюча точка лише в інших, або дозволяють адресувати лише відносно певних регістрів. Іноді існують спеціалізовані регістри, такі як регістри з бітами стану або стану, які не можна використовувати для адреси або арифметики.

  • Отримані умови підпрограми виклику. Аргументи та значення повернення можуть передаватися в регістри, або висуватися та вискакуватися зі стека. (Цей стек зазвичай є областю пам'яті, адресованої спеціальним регістром вказівника стека, а не фіксованим набором, як XYZ та T.)

  • Можливо, вам доведеться знати, як взаємодіяти з ОС, а якщо такої немає, як працювати з апаратними засобами низького рівня. З ОС вам доведеться завантажувати аргументи в регістри (або стек) і потрапляти в ядро. Без ОС вам, ймовірно, доведеться мати справу з перебоями та таймерами.

Мій спогад про складання програмування полягає в тому, що це дуже, дуже болісно. Я думаю, що програмування цього калькулятора порівняно легко та цікаво. (Вибачте.)


1
1) Ну, це має якусь - то операцію побітового AND, OR, XOR, NOT - сині символи , , і ИНВ(що означає INV) на клавіатурі. 2) Я думав, що синус, косинус тощо - це інструкції відповідно до цієї посилання ref.x86asm.net/coder32.html для процесорів x86. Але, звичайно, я згоден з вами, що складальник набагато складніший.
дефлот

Якщо ви хочете отримати відповідь для цієї операції з набору інструкцій VMS - deathrow.vistech.net/… . Деякі інші цікаві шматочки можна знайти на esolangs.org/wiki/…

25

Так, це, безумовно, звучить для мене мовою складання.

Важко сказати , є чи не то, що на насправді є збірка тільки з опису, так як визначення - це мова , чиї команди відображення 1: 1 з машинним кодом своєї цільової платформи - важко визначити без знання самого машинного коду, але це схоже на те, як працює ASM на інших платформах.


11

Це, безумовно, має близьку схожість з мовою складання, але я хочу стверджувати, що це не так, як це є насправді.

Мовою складання операції в основному відображають вказівки CPU від 1 до 1 для процесора. Є деякі винятки, такі як макроси та псевдооперації (як, скажімо, інструкція CLEAR, яка дійсно XOR реєструє себе); Справжня суть полягає в тому, що програма складання точно визначає інструкції CPU, які потрібно сформувати. (Це принципова відмінність між мовою складання та мовою вищого рівня, як C; в останньому програми задають поведінку ).

Калькулятор , безсумнівно , має процесор в ньому, але я сумніваюся , що окремі інструкції процесора відносяться до X, Y, Z і T «регістри», або виконувати операції на високому рівні , як xyі sin(або ПРГ, що б це значить!).

Натомість я впевнений, що багато або більшість видимих ​​операцій виконуються як виклики підпрограми. І для кожної виконаної операції повинно бути значна кількість додаткових робіт, виконаних для відображення результату.

Ви можете бачити видимі операції як мову складання віртуальної машини високого рівня, але ця віртуальна машина реалізована через щось на зразок інтерпретатора, що працює на реальному процесорі.

Я б сказав, що відповідь на другу частину вашого питання:

Чи було в мене основне уявлення про збірних мовах за допомогою цього пристрою?

так.


1
У наших полях немає AX, BX, CX і DX, а також - мови монтажу дозволені символічним перекладом. Я погоджуюся, що функції високого рівня, безумовно, - це не складання, але зауважую, що те, що він перераховував, не включало їх. Хоча я думаю, що це навряд чи це мова про збірку (все повинно бути встановленої довжини, щоб працював режим адресації) жодна з перерахованих команд не виходить за рамки асемблера на ПК.
Лорен Печтел

2
"якщо X <0, тоді перейдіть до кроку програми ##" - це проста інструкція зі збирання BMI (гілка, якщо мінус).
mouviciel

1
@mouviciel І навіть якщо платформа безпосередньо не підтримує щось на зразок BMIприкладу, IF ... THEN ...як правило, читають як дві інструкції: спочатку порівняння ( x < 0в даному випадку), потім дія, заснована на результаті цього порівняння (швидше за все, стрибок під час роботи мовою складання). В Intel 8086 щось на кшталт (припустимо x, в AX) CMP AX, 0 JNL After_IfThen_Block. (JNL будує стрибати, якщо не менше; мовою вищого рівня це читатиметься як щось на зразок if not (x < 0) then goto After_IfThen_Block, що те саме if (x >= 0) then {code until there}.)
CVn

1
ПРГ(PRG - програмування) - це лише мета-клавіша для переходу в режим програмування, а не деяка функція.
Олег Вікторович Волков

1
@mouviciel: Я скептично налаштований, що "якщо X <0, то перейдіть до кроку програми ##" насправді реалізується як одна інструкція щодо апаратного процесора. Я припускаю, що програма, введена на калькулятор, не зберігається як послідовність інструкцій CPU; скоріше, він зберігається як послідовність інструкцій вищого рівня, що інтерпретуються програмою мікропрограмного забезпечення. Я ніколи не працював з цим калькулятором, але використовував HP-48; видимий користувачем набір інструкцій сильно відрізняється від набору процесора Saturn, який він використовує.
Кіт Томпсон

9

Це правильно, розміщений фрагмент коду схожий на мову складання . Належне перетворення цього коду визначало б версію.

Редагувати: вона має певну мову для цього пристрою, але це не збірка.

Це також схоже на калькулятор, виготовлений СРСР. Він працює на закруглених батареях / шнурі?


3
Правильно, його виробляли в радянській Україні з середини 80-х. У мене є в 1991 році. Він має слоти для 3 батарейок АА і адаптер на 220 В.
дефліт

1
Це справді ностальгія для мене. Я пам’ятаю цю марку "Електроніка" :)
Е.Л. Юсубов

3

Я б стверджував, що ви ближче до гібридного мови асемблерної бази, але це дійсно залежить від базового процесора та архітектури. Не потрібно мати прямий доступ до пам'яті, якщо у вас немає справжньої оперативної пам’яті. Операції з плаваючою комою також не потребують присутності без ФПУ.

Я думаю, що простий тест був би операцією додавання числа з плаваючою комою та цілим числом. Більшість мов програмування вищого рівня приймають ADD 2.5, 7 та повертають 9.5. Мови складання, однак, відрізнятимуться результатами на основі виклику інструкції та залежно від поданого базового числа у двійковій формі. Більшість мов складання вимагає використання іншої інструкції на основі використання операцій з плаваючою точкою та цілими числами. Винятком з цього може бути якийсь формат з фіксованою точкою.


Він може просто розглядати всі числа як плаваючі та вважати одним із аргументів 7.0.
Олег Вікторович Волков

@ Олег В.Волков, можливо, однак тоді вам потрібно лише вибрати два числа з плаваючою комою, сума яких не має справжнього представлення. Також ви можете полювати за помилками скасування у відніманні.
Пітер Сміт

3

Класичні калькулятори зворотної польської нотації (RPN) були класичними. Ні, хоча позначення реєстру здаються мовою складання, це не було. Розрахунки проводили шляхом перекладу з алгебраїчного формату на стек. Використовувані числа були висунуті в стек, і операції виконувались на останньому складеному ряду проти останнього значення.

Ви можете "повернути" стек для переміщення значень, оскільки відображене значення було членом стека. Результати можуть бути замінені або складені в міру необхідності для виконання майже складного обчислення. Якщо ви розумієте апаратну техніку стека та мову складання, цей калькулятор був тривіальним для вивчення, оскільки його парадигма була найбільш схожа.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.