Ассемблер
Всем здравия, дорогие читатели, это первая статья из цикла по изучению такого языка программирования, как ассемблер. Весь цикл, кроме заключительной статьи с выводами - это перевод android приложения Assembly Guide, так что за первоисточником - туда. Итак начнём!
Введение
Что такое язык ассемблера?
Каждый персональный компьютер имеет микропроцессор, который управляет арифметической, логической и управляющей деятельностью компьютера.
Каждая семья процессоров имеет свой собственный набор инструкций для обработки различных операций, таких как получение ввода с клавиатуры, отображение информации на экране и выполнение различных других заданий. Эти инструкции называются машинным языком инструкции. Процессор понимает только инструкции машинного языка, которые являются строками состоящими из 1 и 0. Однако машинный язык слишком неясен и сложен для использования в разработке программного обеспечения. Таким образом, низкоуровневый ассемблер предназначен для определенного семейства процессоров, которое представляет различные инструкции в символьном коде и более понятной форме.
Преимущества языка ассемблера:
Понимание языка ассемблера позволяет осознать −
Основное внутреннее оборудование ПК состоит из процессора, памяти и регистров. Регистры - это компоненты процессора, содержащие данные и адреса. Для выполнения программы система копирует ее с внешнего устройства во внутреннюю память. Процессор выполняет инструкции программы.
Основная единица хранения данных компьютера - бит; она может быть включена (1) или выключена (0). Группа из девяти связанных битов составляет байт, из которых восемь битов используются для данных, а последний - для четности. В соответствии с правилом четности, количество бит, на (1) в каждом байте всегда должно быть нечетным.
Таким образом, бит четности используется, чтобы сделать число битов в байте нечетным. Если четность четная, система предполагает, что была ошибка четности (хотя и редкая), которая могла быть вызвана из-за аппаратной неисправности или электрических помех.
Процессор поддерживает следующие размеры данных
Слово: 2-байтовый элемент данных
Двойное слово: пункт 4 байта (32 бит) данные
Четверное слово: 8 байт (64 бит) элемент данных
Абзац: 16-байтовая (128-битная) область
КБ: 1024 байт
Мегабайт: 1048576 байт
Двоичная система
Каждая система счисления использует позиционную нотацию, т. е. каждая позиция, в которой записана цифра, имеет разное позиционное значение. Каждая позиция - это сила основания, которая равна 2 для двоичной системы счисления, и эти силы начинаются с 0 и заканчиваются на 1.
В следующей таблице показаны позиционные значения 8-разрядного двоичного числа, для которого заданы все биты.
Значение двоичного числа основано на наличии 1 бита и их позиционном значении. Таким образом, значение данного двоичного числа −
1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
Шестнадцатеричная Система Счисления
Шестнадцатеричная система счисления по основанию 16. Цифры в этой системе варьируются от 0 до 15. По соглашению, буквы от A до F используются для представления шестнадцатеричных цифр, соответствующих десятичным значениям от 10 до 15.
Шестнадцатеричные числа в вычислениях используются для сокращения длинных двоичных представлений. В основном шестнадцатеричная система счисления представляет двоичные данные, разделяя каждый байт пополам и выражая значение каждого полубайта. В следующей таблице приведены десятичные, двоичные и шестнадцатеричные эквиваленты −
Десятичное число двоичное представление шестнадцатеричное представление
0= 0= 0
1= 1= 1
2= 10= 2
3= 11= 3
4= 100= 4
5= 101= 5
6= 110= 6
7= 111= 7
8= 1000= 8
9= 1001= 9
10= 1010= A
11= 1011= B
12= 1100= C
13= 1101= D
14= 1110= E
15= 1111= F
Чтобы преобразовать двоичное число в его шестнадцатеричный эквивалент, разбейте его на группы по 4 последовательных группы каждая, начиная справа, и запишите эти группы над соответствующими цифрами шестнадцатеричного числа.
Пример − двоичное число 1000 1100 1101 0001 эквивалентно шестнадцатеричному-8CD1
Чтобы преобразовать шестнадцатеричное число в двоичное, просто напишите каждую шестнадцатеричную цифру в ее 4-значный двоичный эквивалент.
Пример − шестнадцатеричное число FAD8 эквивалентно двоичному - 1111 1010 1101 1000
двоичная арифметика
Следующая таблица иллюстрирует четыре простых правила для двоичного сложения −
(я) (II) и (III) и (IV в)
Один
0 1 1 1
+0 +0 +1 +1
=0 =1 =10 =11
Правила (iii) и (iv) показывают перенос 1 бита в следующее левое положение.
Образец
Десятичный Двоичный
60 00111100
+00101010 42
102 01100110
Отрицательное двоичное значение выражается в дополнительном обозначении two. Согласно этому правилу, чтобы преобразовать двоичное число в его отрицательное значение, нужно обратить его битовые значения и добавить 1.
Образец
Количество 00110101 53
Обратный бит 11001010
Добавить 1 00000001
Номер -53 11001011
Чтобы вычесть одно значение из другого, преобразуйте вычитаемое число в формат дополнения two и добавьте числа.
Образец
Вычесть 42 из 53
Количество 00110101 53
Количество 00101010 42
Обратный биты 42 11010101
Добавить 1 00000001
Количество -42 11010110
53 - 42 = 00001011 11
Переполнение последнего 1 бита теряется.
Адресация данных в памяти
Процесс, посредством которого процессор управляет выполнением инструкций, называется циклом выборки-декодирования-выполнения или циклом выполнения. Он состоит из трех последовательных шагов −
Извлечение инструкции из памяти
Расшифровка или идентификация инструкции
Выполнение инструкции
Процессор может одновременно обращаться к одному или нескольким байтам памяти. Рассмотрим шестнадцатеричное число 0725H. Для этого числа потребуется два байта памяти. Старший байт и старший байт-это 07, а младший байт-в 25.
Процессор хранит данные в последовательности обратных байтов, т. е. байт низкого порядка хранится в адресе низкой памяти, а байт высокого порядка-в адресе высокой памяти. Таким образом, если процессор перенесет значение 0725H из регистра в память, то он сначала перенесет 25 на нижний адрес памяти и 07 на следующий адрес памяти.
Введение
х: адрес памяти
Когда процессор получает числовые данные из памяти для регистрации, он снова переворачивает байты. Есть два вида адресов памяти
Абсолютный адрес - прямая ссылка на конкретное местоположение.
Адрес сегмента (или смещение) - начальный адрес сегмента памяти со значением смещения.
На этом всё, за сим я откланяюсь, введение в язык ASM закончено.
Всем здравия, дорогие читатели, это первая статья из цикла по изучению такого языка программирования, как ассемблер. Весь цикл, кроме заключительной статьи с выводами - это перевод android приложения Assembly Guide, так что за первоисточником - туда. Итак начнём!
Введение
Что такое язык ассемблера?
Каждый персональный компьютер имеет микропроцессор, который управляет арифметической, логической и управляющей деятельностью компьютера.
Каждая семья процессоров имеет свой собственный набор инструкций для обработки различных операций, таких как получение ввода с клавиатуры, отображение информации на экране и выполнение различных других заданий. Эти инструкции называются машинным языком инструкции. Процессор понимает только инструкции машинного языка, которые являются строками состоящими из 1 и 0. Однако машинный язык слишком неясен и сложен для использования в разработке программного обеспечения. Таким образом, низкоуровневый ассемблер предназначен для определенного семейства процессоров, которое представляет различные инструкции в символьном коде и более понятной форме.
Преимущества языка ассемблера:
Понимание языка ассемблера позволяет осознать −
- Как программы взаимодействуют с ОС, процессором и BIOS
- Представление данных в памяти и других внешних устройств
- Как процессор обращается к инструкции и выполняет ее
- Как инструкции получают доступ и обрабатывают данные
- Как программа обращается к внешним устройствам
- Он требует меньше памяти и времени выполнения
- Ассемблер позволяет перевести аппаратно-специфические сложные команды в более простой вид
Основное внутреннее оборудование ПК состоит из процессора, памяти и регистров. Регистры - это компоненты процессора, содержащие данные и адреса. Для выполнения программы система копирует ее с внешнего устройства во внутреннюю память. Процессор выполняет инструкции программы.
Основная единица хранения данных компьютера - бит; она может быть включена (1) или выключена (0). Группа из девяти связанных битов составляет байт, из которых восемь битов используются для данных, а последний - для четности. В соответствии с правилом четности, количество бит, на (1) в каждом байте всегда должно быть нечетным.
Таким образом, бит четности используется, чтобы сделать число битов в байте нечетным. Если четность четная, система предполагает, что была ошибка четности (хотя и редкая), которая могла быть вызвана из-за аппаратной неисправности или электрических помех.
Процессор поддерживает следующие размеры данных
Слово: 2-байтовый элемент данных
Двойное слово: пункт 4 байта (32 бит) данные
Четверное слово: 8 байт (64 бит) элемент данных
Абзац: 16-байтовая (128-битная) область
КБ: 1024 байт
Мегабайт: 1048576 байт
Двоичная система
Каждая система счисления использует позиционную нотацию, т. е. каждая позиция, в которой записана цифра, имеет разное позиционное значение. Каждая позиция - это сила основания, которая равна 2 для двоичной системы счисления, и эти силы начинаются с 0 и заканчиваются на 1.
В следующей таблице показаны позиционные значения 8-разрядного двоичного числа, для которого заданы все биты.
разрядное значение | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Позиция стоимость в виде степени с основанием | 2 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Номер бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 0 |
Значение двоичного числа основано на наличии 1 бита и их позиционном значении. Таким образом, значение данного двоичного числа −
1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
Шестнадцатеричная Система Счисления
Шестнадцатеричная система счисления по основанию 16. Цифры в этой системе варьируются от 0 до 15. По соглашению, буквы от A до F используются для представления шестнадцатеричных цифр, соответствующих десятичным значениям от 10 до 15.
Шестнадцатеричные числа в вычислениях используются для сокращения длинных двоичных представлений. В основном шестнадцатеричная система счисления представляет двоичные данные, разделяя каждый байт пополам и выражая значение каждого полубайта. В следующей таблице приведены десятичные, двоичные и шестнадцатеричные эквиваленты −
Десятичное число двоичное представление шестнадцатеричное представление
0= 0= 0
1= 1= 1
2= 10= 2
3= 11= 3
4= 100= 4
5= 101= 5
6= 110= 6
7= 111= 7
8= 1000= 8
9= 1001= 9
10= 1010= A
11= 1011= B
12= 1100= C
13= 1101= D
14= 1110= E
15= 1111= F
Чтобы преобразовать двоичное число в его шестнадцатеричный эквивалент, разбейте его на группы по 4 последовательных группы каждая, начиная справа, и запишите эти группы над соответствующими цифрами шестнадцатеричного числа.
Пример − двоичное число 1000 1100 1101 0001 эквивалентно шестнадцатеричному-8CD1
Чтобы преобразовать шестнадцатеричное число в двоичное, просто напишите каждую шестнадцатеричную цифру в ее 4-значный двоичный эквивалент.
Пример − шестнадцатеричное число FAD8 эквивалентно двоичному - 1111 1010 1101 1000
двоичная арифметика
Следующая таблица иллюстрирует четыре простых правила для двоичного сложения −
(я) (II) и (III) и (IV в)
Один
0 1 1 1
+0 +0 +1 +1
=0 =1 =10 =11
Правила (iii) и (iv) показывают перенос 1 бита в следующее левое положение.
Образец
Десятичный Двоичный
60 00111100
+00101010 42
102 01100110
Отрицательное двоичное значение выражается в дополнительном обозначении two. Согласно этому правилу, чтобы преобразовать двоичное число в его отрицательное значение, нужно обратить его битовые значения и добавить 1.
Образец
Количество 00110101 53
Обратный бит 11001010
Добавить 1 00000001
Номер -53 11001011
Чтобы вычесть одно значение из другого, преобразуйте вычитаемое число в формат дополнения two и добавьте числа.
Образец
Вычесть 42 из 53
Количество 00110101 53
Количество 00101010 42
Обратный биты 42 11010101
Добавить 1 00000001
Количество -42 11010110
53 - 42 = 00001011 11
Переполнение последнего 1 бита теряется.
Адресация данных в памяти
Процесс, посредством которого процессор управляет выполнением инструкций, называется циклом выборки-декодирования-выполнения или циклом выполнения. Он состоит из трех последовательных шагов −
Извлечение инструкции из памяти
Расшифровка или идентификация инструкции
Выполнение инструкции
Процессор может одновременно обращаться к одному или нескольким байтам памяти. Рассмотрим шестнадцатеричное число 0725H. Для этого числа потребуется два байта памяти. Старший байт и старший байт-это 07, а младший байт-в 25.
Процессор хранит данные в последовательности обратных байтов, т. е. байт низкого порядка хранится в адресе низкой памяти, а байт высокого порядка-в адресе высокой памяти. Таким образом, если процессор перенесет значение 0725H из регистра в память, то он сначала перенесет 25 на нижний адрес памяти и 07 на следующий адрес памяти.
Введение
х: адрес памяти
Когда процессор получает числовые данные из памяти для регистрации, он снова переворачивает байты. Есть два вида адресов памяти
Абсолютный адрес - прямая ссылка на конкретное местоположение.
Адрес сегмента (или смещение) - начальный адрес сегмента памяти со значением смещения.
На этом всё, за сим я откланяюсь, введение в язык ASM закончено.
Последнее редактирование: