Visual Assembler — для программирования на языке Ассемблера

Visual Assembler — для программирования на языке Ассемблера

Категория: Компиляторы Средства разработки
Разработчик:
Обновлено: 17.05.2019
Рейтинг:
Интерфейс: Английский
Версия: 1.0.22.
Системы: Microsoft Windows 98, ME, 2000, XP, Vista, 7, 8, 8.1 (x86-x64)
Лицензия: Freeware (бесплатно)
Размер: 538 КБ

О программе

Visual Assembler – это программа, предназначенная для тех, кто программирует в MS-DOS на языке ассемблер. Данное приложение способно предотвратить ошибки у начинающих программистов, так как графический интерфейс намного приятнее командной строки.

Этот компилятор способен на все то же, что и стандартная строка MS-DOS. Только выглядит еще лучше. Кстати, отличительной чертой приложения является автоматическая компиляция. От пользователя достаточно только задать пути TASM и TLINK.

Visual Assembler скачать можно на официальном сайте. Данная программа является абсолютно бесплатной. Один нюанс: под Windows 10 утилита работает не совсем адекватно, к сожалению. На других версиях ОС проблем нет.

Системные требования

  • Операционная система: Microsoft Windows 98, ME, 2000, XP, Vista, 7, 8, 8.1 (x86-x64).

Плюсы и минусы:

Преимущества:

  • Графический интерфейс для программирования;
  • Быстрая работа даже на старых машинах;
  • Автоматическое компилирование;
  • Проверка ошибок;
  • Предельно простой интерфейс;
  • Продвинутые алгоритмы;
  • Простота использования;
  • Программа совершенно бесплатна.

Недостатки:

  • Нет русского языка в интерфейсе;
  • Плохо работает на Windows

Как использовать?

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

Данную программу даже не нужно устанавливать. Все, что требуется – просто распаковать файлы из архива в какой-нибудь каталог. После этого останется только запустить утилиту при помощи двойного клика по исполняемому файлу.

Останется только задать пути TASM и TLINK. Обратите внимание на то, что в пути не должно быть пробелов. Иначе программа работать точно не будет. После этого можно вписывать assembler команды и вплотную заниматься программированием.

Часто задаваемые вопросы:

Будет ли программа работать на Windows 10?

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

Подойдет ли она для обучения работы с командной строкой Assembler?

Да, вполне. Графический интерфейс намного привычнее для начинающих программистов, а автоматизированный процесс компиляции позволит сэкономить время.

Какой процессор нужен для программы?

Да любой. Данная утилита сможет работать даже на одноядерном процессоре с тактовой частотой 700 МГц. А современные ЦП, как правило, намного мощнее. Даже бюджетные.

Отзывы пользователей

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

Артем А.

«Чего-то эта программа никак не хочет у меня работать. Вроде и пути все правильно прописал. Никак. Может, скачать другую версию? После нескольких дней поиска проблемы понял, что скачал какую-то странную версию с левого сайта. Буду искать нормальную».

Леонид П.

«Не хочет компилировать! Код принимает нормально. А как компиляция – все. Виснет. Причем после перезагрузки компьютера запускается уже зависшей. Что-то с ней не так. Пойду искать другую визуальную оболочку для ассемблера».

Павел Д.

Скриншоты

Видео обзор

Visual Assembler

Описание СКАЧАТЬ ( 1,78 Мб) Скриншоты (2) Статистика Отзывы (33)

  • Рейтинг программы — 4.43 из 5
  • 1
  • 2
  • 3
  • 4
  • 5

Оцените программу!
4.43 из 5, всего оценок — 112
Статус программы Бесплатная
Операционка Windows XP, 98, NT 4.x, ME, 2000
Интерфейс Английский
Закачек (сегодня/всего) 2 / 61 873
Разработчик
Последнее обновление 30.08.2002 (Сообщить о новой версии)
Категории программы Компиляторы — Assembler

Borland C++ Compiler 5.5.1

Borland C++ Compiler — Компилятор языка программирования Borland C++ 5.5 Комментарии излишни

Golden Studio 4.5

Golden Studio — полноценная среда программирования, которая позволяет создавать exe программы на языке PHP с поддержкой GUI или без программирования

Bloodshed Dev-Pascal 1.9.2

Bloodshed Dev-Pascal — редактор и компилятор для написания программ на Pascal

Visual Assembler

Visual Assembler — эта программа написана для тех, кто программирует на ассемблере. Borland Tasm — транслятор сделанный для MSDOS. Т.к. начинающему программисту на

Bloodshed Dev-C++ 5 Beta 9.2 (4.9.9.2)

Bloodshed Dev-C++ — Редактор и компилятор для написания программ на C++

MinGW 0.6.2 beta 20131004-1

Бесплатная среда разработки родных приложений под Windows с открытым исходным кодом, которая включает в себя портированный GNU Compiler Collection, GNU Binutils, GNU

Отзывы о программе Visual Assembler

WhoamI про Visual Assembler [11-01-2017]

где эти файлы Tlink и Tasm . обьясните пожалуйста в асю подробно в комменты
1 | 6 | Ответить

Иван Федорович Крузенштер про Visual Assembler [08-02-2016]

Эта программа виснет и даже после перезагрузки, и после переустановки винды загружается зависшая
| | Ответить

Anonim про Visual Assembler [20-09-2014]

path tasm это путь к tasm.exe
path tlink это путь к tlink.exe
2 | | Ответить

бильбо бегенс про Visual Assembler [12-07-2013]

подскажите пожалуйста что вводить в окошки path tasm и path tlink?
| 6 | Ответить

Георг про Visual Assembler [05-06-2013]

Советуем обратить внимание

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

Основы программирования на языке ассемблера

Программируя на ассемблере, необходимо хорошо представлять, как данные размещены в памяти компьютера. Команды, исполняемые компьютером, могут быть записаны в безадресном (операнд включен в код команды), одноадресном, двухадресном и трехадресном форматах. Иными словами, с помощью адресации определяются адреса размещения операндов в памяти компьютера.

Перечислим режимы адресации, которые чаще всего используются при программировании компьютеров семейства Intel х86, а также могут быть применены на платформе MIPS. При программи-рованиии важно учитывать, что предлагаемый список доступных режимов требуется уточнять в зависимости от того, какова архитектура целевой вычислительной системы.

В непосредственном режиме адресации (immediate addressing mode) сведения, необходимые для доступа к данным, включаются в команду процессора. К примеру, если мы хотим инициализировать регистр, поместив туда ноль, разумнее всего будет не указывать адрес, откуда можно прочитать ноль, а использовать непосредственный режим адресации, указав ноль в качестве операнда команды.

Иными словами, при непосредственной адресации значение в формате байта, слова или двойного слова (машинное слово — это количество данных, которое процессор может обработать за одну операцию) передается в регистр-приемник или в память. Обычно машинное слово по длине равно размеру регистра общего назначения процессора. На рынке широкодоступны процессоры, оперирующие словами по 4 байта (х86-32, MIPS32) и по 8 байт (х86-64, MIPS64).

Непосредственный операнд может быть задан в различных системах счисления (шестнадцатеричной, двоичной, десятичной). Символы ASCII непосредственно задаются числовым кодом или буквой в кавычках.

В режиме регистровой адресации (register addressing mode) команда содержит имя регистра, в котором хранятся числа для обработки. Копия байта, слова или двойного слова из регистра-источника передается в регистр-приемник. Размерность регистров источника и приемника должна быть одинаковой.

Прямой режим адресации (direct addressing mode) подразумевает указание адреса памяти в качестве операнда команды (адрес данных в памяти образуется совокупностью значения, содержащегося в сегментном регистре, и смещения, заданного в команде). Данные пересылаются между памятью и регистром. К примеру, можно сказать: «Компьютер, загрузи, пожалуйста, в регистр данные, содержащиеся в памяти по адресу 2002.». Среагировав на наши слова, компьютер перейдет к байту номер 2002 и скопирует его содержимое в нужный регистр.

В режиме индексной адресации (indexed addressing mode) команда содержит в качестве операнда базовый адрес, а также имя индексного регистра, содержащего значение смещения от базового адреса. К примеру, если базовый адрес равен 2002, а смещение равно 4, то адрес, по которому обратится команда, будет равен 2006.

С помощью индексной адресации можно организовывать циклы, в которых происходит последовательное обращение к ячейкам памяти, имеющим адрес, находящийся с разным смещением от базового адреса (базово-индексная адресация).

Процессоры х86 поддерживают использование множителя (multiplier), записываемого в индексный регистр (индексная адресация с масштабированием). Это позволяет получать доступ к участкам памяти по байту или по машинному слову за один проход цикла, а также переходить к нужному участку памяти.

Операндами команды могут являться:

  • • данные, которые явно либо неявно задаются машинной командой и которые должны быть обработаны либо выработаны в ходе исполнения машинной команды;
  • • явная ссылка в машинной команде на такие данные;
  • • место, где находятся или должны быть помещены такие данные: позиции в оперативной, внешней, внутренней или управляющей памяти, общие и специальные регистры, флаги, поля признаков, входы и выходы управляющих сигналов.

Работа с регистрами процессора выполняется намного быстрее, чем с ячейками оперативной памяти, поэтому регистры активно используются как в программах на языке ассемблера, так и компиляторами языков высокого уровня.

Регистр — это функциональный узел, осуществляющий прием, хранение и передачу информации. Регистры состоят из группы триггеров, обычно D. По типу приема и выдачи информации различают два типа регистров:

  • • с последовательным приемом и выдачей информации — сдвиговые регистры;
  • • с параллельным приемом и выдачей информации — параллельные регистры.

Сдвиговые регистры представляют собой последовательно соединенную цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.

По назначению регистры разделяются:

  • • на аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода/вывода;
  • • флаговые — хранят признаки результатов арифметических и логических операций;
  • • общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
  • • индексные — хранят индексы исходных и целевых элементов массива;
  • • указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
  • • сегментные — хранят адреса и селекторы сегментов памяти;
  • • управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.

В табл. 8.1 показано количество регистров общего назначения в нескольких распространенных архитектурах микропроцессоров. Стоит отметить, что в некоторых архитектурах использование отдельных регистров может быть осложнено. Так, в SPARC и MIPS регистр номер ноль не сохраняет информацию и всегда считывается как 0, а в процессорах х86 с регистром ESP (указатель на стек) могут работать лишь некоторые команды.

Количество регистров общего назначения в архитектурах микропроцессоров

Программирование на языке Ассемблер

Сегодня повсюду используются такие языки высокого уровня как Бейсик, Фортран и Паскаль. Возможно, вы уже знакомы, по крайней мере, с одним языком высокого уровня. Если вы постоянно пользуетесь персональным компьютером IBM, то вы знаете, что интерпретатор Бейсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в Ассемблере из-за его эффективности и точности.

Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке Ассемблера создаст программу более компактную и быстродействующую, чем такая же программа, написанная на языке высокого уровня. Это так практически для всех небольших или средних программ. К сожалению, по мере возрастания размеров, программы на языке Ассемблера теряют часть своих преимуществ. Это происходит из-за необходимого в ассемблерной программе внимания к деталям. Как вы видите, язык Ассемблера требует от вас планирования каждого действия компьютера. В небольших программах это позволяет оптимизировать работу программы с аппаратными средствами. В больших же программах огромное количество деталей может помешать вам эффективно работать над самой программой, даже если отдельные компоненты программы окажутся очень неплохими. Безусловно, программирование на языке Ассемблера отвечает потребностям не каждой программы.

Программы на языке Ассемблера очень точны. Поскольку этот язык позволяет программисту непосредственно работать со всем аппаратным обеспечением, ассемблерная программа может делать то, что недоступно никакой другой программе. Несомненно, что в программировании устройств ввода-вывода, где требуется контроль над отдельными разрядами регистров устройства, программирование на языке Ассемблера — единственный подходящий выбор [6].

Ясно, что эффективность и точность языка Ассемблера дают определенные преимущества. Но его детализированность создает и некоторые проблемы. Когда же стоит избирать для программирования язык Ассемблера?

Конечно, вы должны пользоваться программами на языке Ассемблера, когда нет другого способа написать программу. Например, программисты фирмы IBM писали с использованием процедур Ассемблера все программы управления устройствами ввода-вывода для IBM PC. Для управления устройствами ввода-вывода и системой прерываний, потребовалась та точность языка Ассемблера, которую не может обеспечить ни один другой язык программирования. Аналогично, на языке Ассемблера в фирме IBM писались процедуры диагностики, которые должны проверять каждую деталь аппаратуры.

Язык Ассемблера необходим также и в тех случаях, когда главными являются рабочие характеристики программы. Это может быть время исполнения или конечный размер программы. Библиотека математических процедур Фортрана — пример программы, требующей хороших характеристик, как в отношении времени, так и размера. Математические процедуры являются частью любой программы на Фортране, поэтому они должны занимать как можно меньше места. Кроме того, эти процедуры управляют всеми математическими функциями в фортрановской программе и часто используются. Следовательно, они должны исполняться быстро.

Какая программа не подходит для языка Ассемблера? Конечно, вы можете написать на нем любую программу, однако с большой программой лучше работать в языке высокого уровня, таком как Бэйсик или Паскаль. Эти языки позволяют вам сосредоточиться на своей проблеме. Вам не приходится непосредственно иметь дело с тонкостями аппаратного оборудования и процессора. Языки высокого уровня позволяют вам отступить назад и за деревьями увидеть лес.

Очевидно далее, что вы нуждаетесь в соединении программ языка Ассемблера с программами языков высокого уровня. Здесь мы ограничимся программированием на языке Ассемблера для тех задач, для которых он хорошо подходит, таких как управление вводом-выводом.

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

Самыми популярными на сегодняшний день являются пакеты Turbo Assembler (TASM) фирмы Borland, Macro Assembler for Windows32 (MASM32), созданный Hutch (на основе старого MASM фирмы Microsoft), а также Flat Assembler (FASM), и Netwide Assembler (NASM), развиваемый командой NASM Development Team. Все эти ассемблеры предоставляют весьма широкие возможности для программиста. На них можно писать программы как под DOS, так и под Windows [7].

Существует также множество других видов ассемблера, число которых растет. Например: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic++ Assembler (NBASM), TMA Macro Assembler и др.

Программирование на языке Ассемблер

Лабораторная работа № 1.

По курсу «Микропроцессорные средства и системы в электроприводе»

На тему: «Программирование на языке Ассемблер».

Выполнил студент Андрианов И.А.

Задание: Поместить в память компьютера несколько различных по размеру значений, произвести с некоторыми из них операцию сложения.

Перед написанием программы составляем её алгоритм. Ниже приведена общая блок-схема линейного алгоритма, в котором команды программы выполняются одна за другой:

Запускаем в операционной системе Windows текстовый редактор и создаём новый файл с именем Lab1.asm, и записываем в него текст программы:

После сохранения текста программы в файл Lab1.asm, необходимо его преобразовать в машинный код. Для этого действия в данной работе можно использовать компилятор языка Ассемблер — фирмы Borland. Программы, входящие в компилятор, являются консольными, поэтому необходимо запустить соответствующую оболочку в операционной системе.

.MODEL SMALL ;Модель памяти .DATA ;Сегмент данных

PR2 DW 1111h ;Определение переменной PR2 размером в ;2 байта (слово)

.CODE ;Сегмент кода

ORG 100h ;Адрес начала программы main: ;Метка, обозначающая точку входа в ;программу MOV BX,OFFSET PR1 ;Помещение в BX адрес переменной A2

MOV CX,PR2 ;Помещение в CX два байта находящиеся по ;адресу 0002

ADD AL,BL ;Сложение младших байтов регистров AX и ;BX

ADD AH,CH ;Сложение старших байтов регистров AX и ;CX

MOV AX,4C00h ;Номер функции завершения программы ;(004Сh) в AX

INT 21h ;Вызов функции DOS (завершение ;программы)

PR1 DB 20h ;Определение переменной PR1 размером в 1 ;байт

END main ;Конец программы

В системе Windows консоль запускается командой “cmd” следующим образом. Нажимаем кнопку «Пуск» -> «Выполнить» -> вводим в поле слово «cmd» и подтверждаем кнопкой «ОК». Исходный текст программы в виде файла Lab1.asm, а также файлы ассемблера помещаем в папку ASM на диске С. Попасть туда из консоли можно путём набора следующей последовательности команд в консоли: cd cd c:asm Для ассемблирования нашей программы необходимо использовать файл “tasm.exe” из пакета компилятора, для этого набираем в командной строке: TASM.EXE /l Lab1.asm и нажимаем кнопку «Ввод».

В случае удачного выполнения ассемблирования нашей программы должны появиться следующие сообщения в консольном окне:

В папке ASM должны быть созданы два файла LAB1.LST и LAB1.OBJ.

Для того чтобы получить работающую программу, произведём сборку промежуточных результатов из объектного файла LAB1.OBJ, в исполняемый файл LAB1.EXE. Для этого применим компоновщик программ “TLINK.EXE”, запустив его со следующим ключом в командной строке: TLINK.EXE /t LAB1.OBJ Ключ “t” указывает компоновщику, что собранный исполняемый файл должен быть COM — типа. Если сборка произошла удачно, то на экране появятся следующие строки:

В папке ASM должен появиться файл — LAB1.COM — это и есть наша программа в машинном коде. Можно её запустить путём набора в командной строке названия программы — LAB1.COM и последующего нажатия клавиши «ENTER». программирование алгоритм ассемблер отладчик

Для пошаговой проверки правильности выполнения программы и выявления возможных ошибок, загрузим её в отладчик с помощью следующей строки: TD.EXE LAB1.COM Далее выведем на экран максимально полную информацию о выполняемом коде, о регистрах, памяти и их содержимом, нажимая последовательно в меню пункты «View» -> «CPU» -> Клавишу F5. Выполняем каждую команду клавишей F7, до тех пор, пока программа не кончится. Наблюдаем изменения, которые происходят с регистрами процессора. После выполнения последней команды сохраняем окно программы в виде рисунка:

.MODEL SMALL ;Модель памяти

.STACK 100h ;Выделение сегмента памяти под стек ;размером 256 байт

.DATA ;Сегмент данных PR1 DB 20h ;Определение переменной PR1 размером в 1 ;байт

PR2 DW 1111h ;Определение переменной PR2 размером в ;2 байта (слово)

.CODE ;Сегмент кода

main: ;Метка, обозначающая точку входа в ;программу

MOV AX,@data ;Формирование адреса сегмента данных в

MOV DS,AX ;регистре DS MOV BL,PR1 ;Помещение в BX значение переменной PR1

MOV CX,PR2 ;Помещение в CX значение переменной PR2

ADD AL,BL ;Сложение младших байтов регистров AX и ;BX

ADD AH,CH ;Сложение старших байтов регистров AX и ;CX

MOV DX,OFFSET PR2 ;Помещение в DX адрес переменной PR2

MOV AX,4C00h ;Номер функции завершения программы ;(004Сh) в AX

INT 21h ;Вызов функции DOS (завершение ;программы)

END main ;Конец программы

Составим программу, похожую на предыдущий пример, с добавлением в неё дополнительных директив, которые позволят компилятору создать программу в EXE — формате. В текстовом редакторе создаём новый файл с именем Lab12.asm, и записываем в него текст программы соответствующий своему варианту:

Основы программирования на языке ассемблера

Программируя на ассемблере, необходимо хорошо представлять, как данные размещены в памяти компьютера. Команды, исполняемые компьютером, могут быть записаны в безадресном (операнд включен в код команды), одноадресном, двухадресном и трехадресном форматах. Иными словами, с помощью адресации определяются адреса размещения операндов в памяти компьютера.

Перечислим режимы адресации, которые чаще всего используются при программировании компьютеров семейства Intel х86, а также могут быть применены на платформе MIPS. При программи-рованиии важно учитывать, что предлагаемый список доступных режимов требуется уточнять в зависимости от того, какова архитектура целевой вычислительной системы.

В непосредственном режиме адресации (immediate addressing mode) сведения, необходимые для доступа к данным, включаются в команду процессора. К примеру, если мы хотим инициализировать регистр, поместив туда ноль, разумнее всего будет не указывать адрес, откуда можно прочитать ноль, а использовать непосредственный режим адресации, указав ноль в качестве операнда команды.

Иными словами, при непосредственной адресации значение в формате байта, слова или двойного слова (машинное слово — это количество данных, которое процессор может обработать за одну операцию) передается в регистр-приемник или в память. Обычно машинное слово по длине равно размеру регистра общего назначения процессора. На рынке широкодоступны процессоры, оперирующие словами по 4 байта (х86-32, MIPS32) и по 8 байт (х86-64, MIPS64).

Непосредственный операнд может быть задан в различных системах счисления (шестнадцатеричной, двоичной, десятичной). Символы ASCII непосредственно задаются числовым кодом или буквой в кавычках.

В режиме регистровой адресации (register addressing mode) команда содержит имя регистра, в котором хранятся числа для обработки. Копия байта, слова или двойного слова из регистра-источника передается в регистр-приемник. Размерность регистров источника и приемника должна быть одинаковой.

Прямой режим адресации (direct addressing mode) подразумевает указание адреса памяти в качестве операнда команды (адрес данных в памяти образуется совокупностью значения, содержащегося в сегментном регистре, и смещения, заданного в команде). Данные пересылаются между памятью и регистром. К примеру, можно сказать: «Компьютер, загрузи, пожалуйста, в регистр данные, содержащиеся в памяти по адресу 2002.». Среагировав на наши слова, компьютер перейдет к байту номер 2002 и скопирует его содержимое в нужный регистр.

В режиме индексной адресации (indexed addressing mode) команда содержит в качестве операнда базовый адрес, а также имя индексного регистра, содержащего значение смещения от базового адреса. К примеру, если базовый адрес равен 2002, а смещение равно 4, то адрес, по которому обратится команда, будет равен 2006.

С помощью индексной адресации можно организовывать циклы, в которых происходит последовательное обращение к ячейкам памяти, имеющим адрес, находящийся с разным смещением от базового адреса (базово-индексная адресация).

Процессоры х86 поддерживают использование множителя (multiplier), записываемого в индексный регистр (индексная адресация с масштабированием). Это позволяет получать доступ к участкам памяти по байту или по машинному слову за один проход цикла, а также переходить к нужному участку памяти.

Операндами команды могут являться:

  • • данные, которые явно либо неявно задаются машинной командой и которые должны быть обработаны либо выработаны в ходе исполнения машинной команды;
  • • явная ссылка в машинной команде на такие данные;
  • • место, где находятся или должны быть помещены такие данные: позиции в оперативной, внешней, внутренней или управляющей памяти, общие и специальные регистры, флаги, поля признаков, входы и выходы управляющих сигналов.

Работа с регистрами процессора выполняется намного быстрее, чем с ячейками оперативной памяти, поэтому регистры активно используются как в программах на языке ассемблера, так и компиляторами языков высокого уровня.

Регистр — это функциональный узел, осуществляющий прием, хранение и передачу информации. Регистры состоят из группы триггеров, обычно D. По типу приема и выдачи информации различают два типа регистров:

  • • с последовательным приемом и выдачей информации — сдвиговые регистры;
  • • с параллельным приемом и выдачей информации — параллельные регистры.

Сдвиговые регистры представляют собой последовательно соединенную цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.

По назначению регистры разделяются:

  • • на аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода/вывода;
  • • флаговые — хранят признаки результатов арифметических и логических операций;
  • • общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
  • • индексные — хранят индексы исходных и целевых элементов массива;
  • • указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
  • • сегментные — хранят адреса и селекторы сегментов памяти;
  • • управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.

В табл. 8.1 показано количество регистров общего назначения в нескольких распространенных архитектурах микропроцессоров. Стоит отметить, что в некоторых архитектурах использование отдельных регистров может быть осложнено. Так, в SPARC и MIPS регистр номер ноль не сохраняет информацию и всегда считывается как 0, а в процессорах х86 с регистром ESP (указатель на стек) могут работать лишь некоторые команды.

Количество регистров общего назначения в архитектурах микропроцессоров

Программирование на языке Ассемблер

Сегодня повсюду используются такие языки высокого уровня как Бейсик, Фортран и Паскаль. Возможно, вы уже знакомы, по крайней мере, с одним языком высокого уровня. Если вы постоянно пользуетесь персональным компьютером IBM, то вы знаете, что интерпретатор Бейсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в Ассемблере из-за его эффективности и точности.

Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке Ассемблера создаст программу более компактную и быстродействующую, чем такая же программа, написанная на языке высокого уровня. Это так практически для всех небольших или средних программ. К сожалению, по мере возрастания размеров, программы на языке Ассемблера теряют часть своих преимуществ. Это происходит из-за необходимого в ассемблерной программе внимания к деталям. Как вы видите, язык Ассемблера требует от вас планирования каждого действия компьютера. В небольших программах это позволяет оптимизировать работу программы с аппаратными средствами. В больших же программах огромное количество деталей может помешать вам эффективно работать над самой программой, даже если отдельные компоненты программы окажутся очень неплохими. Безусловно, программирование на языке Ассемблера отвечает потребностям не каждой программы.

Программы на языке Ассемблера очень точны. Поскольку этот язык позволяет программисту непосредственно работать со всем аппаратным обеспечением, ассемблерная программа может делать то, что недоступно никакой другой программе. Несомненно, что в программировании устройств ввода-вывода, где требуется контроль над отдельными разрядами регистров устройства, программирование на языке Ассемблера — единственный подходящий выбор [6].

Ясно, что эффективность и точность языка Ассемблера дают определенные преимущества. Но его детализированность создает и некоторые проблемы. Когда же стоит избирать для программирования язык Ассемблера?

Конечно, вы должны пользоваться программами на языке Ассемблера, когда нет другого способа написать программу. Например, программисты фирмы IBM писали с использованием процедур Ассемблера все программы управления устройствами ввода-вывода для IBM PC. Для управления устройствами ввода-вывода и системой прерываний, потребовалась та точность языка Ассемблера, которую не может обеспечить ни один другой язык программирования. Аналогично, на языке Ассемблера в фирме IBM писались процедуры диагностики, которые должны проверять каждую деталь аппаратуры.

Язык Ассемблера необходим также и в тех случаях, когда главными являются рабочие характеристики программы. Это может быть время исполнения или конечный размер программы. Библиотека математических процедур Фортрана — пример программы, требующей хороших характеристик, как в отношении времени, так и размера. Математические процедуры являются частью любой программы на Фортране, поэтому они должны занимать как можно меньше места. Кроме того, эти процедуры управляют всеми математическими функциями в фортрановской программе и часто используются. Следовательно, они должны исполняться быстро.

Какая программа не подходит для языка Ассемблера? Конечно, вы можете написать на нем любую программу, однако с большой программой лучше работать в языке высокого уровня, таком как Бэйсик или Паскаль. Эти языки позволяют вам сосредоточиться на своей проблеме. Вам не приходится непосредственно иметь дело с тонкостями аппаратного оборудования и процессора. Языки высокого уровня позволяют вам отступить назад и за деревьями увидеть лес.

Очевидно далее, что вы нуждаетесь в соединении программ языка Ассемблера с программами языков высокого уровня. Здесь мы ограничимся программированием на языке Ассемблера для тех задач, для которых он хорошо подходит, таких как управление вводом-выводом.

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

Самыми популярными на сегодняшний день являются пакеты Turbo Assembler (TASM) фирмы Borland, Macro Assembler for Windows32 (MASM32), созданный Hutch (на основе старого MASM фирмы Microsoft), а также Flat Assembler (FASM), и Netwide Assembler (NASM), развиваемый командой NASM Development Team. Все эти ассемблеры предоставляют весьма широкие возможности для программиста. На них можно писать программы как под DOS, так и под Windows [7].

Существует также множество других видов ассемблера, число которых растет. Например: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic++ Assembler (NBASM), TMA Macro Assembler и др.

Ссылка на основную публикацию
Корзина закачек ( 0 )
Избранные ()
Категории

Windows

macOS

Android

iOS

Windows Phone