- •7. Функциональная и структурная организация эвм. Определения архитектуры эвм по гост 15971-90 и стандарту iso/iec 2382/1-93.
- •12. Концепция машины с хранимой памятью. Вклад Джона фон Неймана в развитие архитектуры эвм. Принципы фон-неймановской концепции и их характеристика.
- •19. Перевод чисел из одной системы счисления.
- •20. Представление целых чисел в эвм.
- •21. Прямой, обратный и дополнительный коды. Алгоритм получения обратного и дополнительного кодов.
- •22. Использование различных систем счисления при организации взаимодействия человека и эвм. Проблемы и перспективы улучшения интерфейса человека и эвм.
- •35. Арифметические схемы. Сумматоры. Полусумматор. Полный сумматор. Арифметико-логическое устройство.
- •36. Устройства памяти эвм. Триггеры. Классификация. Rs-триггер. D-триггер.
- •37. Устройства памяти эвм. Триггеры. Классификация. Т-триггер. Универсальный jk-триггер.
- •38. Семь уровней компьютерных систем и их характеристика. Сущность системного подхода к изучению принципов работы компьютера.
- •47. Организация узла регистра общего назначения (рон). Одноканальный и двухканальный доступ.
- •48. Полусумматор и полный сумматор. Схемная реализация. Таблица истинности. Принципы создания 8-разрядного сумматора.
- •50. Тракт данных. Основные элементы тракта данных и их предназначение.
- •51. Регистры тракта данных, название и предназначение.
- •55. Шины тракта данных. Классификация шин по назначению. Принципы работы шин тракта данных. Примеры шин, используемых в современных компьютерах. Параметры шин.
- •62. Язык ассемблера и его роль в программном обеспечении эвм. Шестнадцатеричная и двоичная системы счисления в ассемблере.
- •63. Регистры процессора 8086 – 80816. Регистры данных, регистры –указатели, сегментные регистры.
- •64. Команды в ассемблере: загрузка, сложение, вычитание, inc, dec. Привести примеры.
62. Язык ассемблера и его роль в программном обеспечении эвм. Шестнадцатеричная и двоичная системы счисления в ассемблере.
1.1. Что нужно для работы с ассемблером
Прежде всего вам потребуется ассемблер. Здесь самое время сказать, что язык программирования, которым мы собираемся заниматься, называется «язык ассемблера» (assembly language). Ассемблер - это программа, которая переводит текст с языка, понятного человеку, в язык, понятный процессору, то есть говорят, что она переводит язык ассемблера в машинный код. Однако сначала в повседневной речи, а затем и в литературе слово «ассемблер» стало также и названием самого языка программирования. Понятно, что, когда говорят «программа на ассемблере», имеют в виду язык, а когда говорят «макроассемблер версии 6.13», имеют в виду программу. Вместе с ассемблером обязательно должна быть еще одна программа -компоновщик (linker), которая и создает исполнимые файлы из одного или нескольких объектных модулей, полученных после запуска ассемблера. Помимо этого, для разных целей могут потребоваться дополнительные вспомогательные программы -компиляторы ресурсов, расширители DOS и тому подобное (см. табл. 1)
Трудно говорить о том, продукция какой из трех компаний (Borland, Microsoft или Watcom) однозначно лучше. С точки зрения удобства компиляции TASM лучше подходит для создания 16-битных программ для DOS, WASM - для 32-битных программ для DOS, MASM - для Windows. С точки зрения удобства программирования развитость языковых средств растет в ряду WASM - MASM -TASM. Все примеры программ в этой книге построены так, что можно использовать любой из этих компиляторов.
Представление данных в компьютерах
Для того чтобы освоить программирование на ассемблере, следует познакомиться с двоичными и шестнадцатеричными числами. Иногда в тексте программы можно обойтись и обычными десятичными числами, но без понимания того, как на самом деле хранятся данные в памяти компьютера, очень трудно использовать логические и битовые операции, упакованные форматы данных и многое другое.
Двоичная система счисления
Практически все существующие сейчас компьютерные системы, включая Intel, используют для вычислений двоичную систему счисления. В их электрических цепях напряжение может принимать два значения, и эти значения назвали нулем и единицей. Двоичная система счисления как раз и использует только эти две цифры, а вместо степеней десяти, как в обычной десятичной системе, здесь применяют степени двойки. Чтобы перевести двоичное число в десятичное, надо сложить двойки в степенях, соответствующих позициям, где в двоичном стоят единицы.
Например:
10010111Ь=1*27+0*26+0*25+1*24+0*23+1*22+1*21+1*20=128+16+4+2+1 = 151
Для перевода десятичного числа в двоичное можно, например, разделить его на 2, записывая остаток справа налево (см. табл. 2).
Чтобы отличать двоичные числа от десятичных, в ассемблерных программах в конце каждого двоичного числа ставят букву b.
1.2.3. Шестнадцатеричная система счисления
Главное неудобство двоичной системы счисления — это размеры чисел, с которыми приходится обращаться. На практике с двоичными числами работают, только если необходимо следить за значениями отдельных битов, а когда размеры переменных превышают хотя бы четыре бита, используется шестнадцатеричная система. Она хороша тем, что компактнее десятичной, и тем, что перевод в двоичную систему и обратно происходит очень легко. В шестнадцатеричной системе используется 16 «цифр» (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е, F), и номер позиции цифры в числе соответствует степени, в которую надо возвести число 16, следовательно:
96h = 9*16 + 6 = 150
Перевод в двоичную систему и обратно осуществляется крайне просто - вместо каждой шестнадцатеричной цифры подставляют соответствующее четырехзначное двоичное число:
9h = 1001b, 6h = 0110b, 96h = 10010110b
В ассемблерных программах при записи чисел, начинающихся с А, В, С, D, Е,
F, в начале приписывается цифра 0, чтобы не перепутать такое число с названием
переменной или другим идентификатором. После шестнадцатеричных чисел ставится буква h (см. табл. 3).
