Суббота, 02.08.2025, 14:25

ASSEMBLER В ДЕЛЕ

Настроение
Загрузка файлов
Наш опрос
Какой язык лучше?
Всего ответов: 209
Меню сайта
Форма входа
Поиск
Полезные ссылки
  • Днивники чайника
  • Видеоуроки асма
  • Большой справочник
  • [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: JMIX  
    =хBITх=
    JMIXДата: Вторник, 26.10.2010, 23:49 | Сообщение # 1
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Если с чего начинать, то с элементарных вещей. Что такое бит и байт(byte)? Скажите что это размер любимой игрухи на компе или музыки в мобильном. Точно! Вы правы по сути. А ещё существуют килобайты(Kbyte), мегабайты(Mbyte), гигабайты(Gbyte), терабайты(Tbyte) и т.д. Но ещё всё это числа. Программисты называют числа битами. Число 1 это бит (при счете от нуля) или двоичное 001; число 2 это тоже бит или двоичное 010 и число 4 тоже или двоичное 100. (точнее от 3 до 4) Где 3=011b, а 4=100b. Короче бит=2 в степени n. В байте 8 бит, а в килобайте их 8192 или 1024 байт... И всех это устраивает, потому что так считать проще. И комп по сути- большое хранилище одних только чисел и одновременно огромный калькулятор. А из всего массива бит состоит ВСЁ, что вы видите на мониторе и слышите из колонок или наушников.

    Я тут только что глупость сказал какую то получается. Значит игры, музыка и даже лыба в аське- это всё числа. (!) Как такое возможно? Ничего фантастического тут нет. Я вам сейчас докажу. Существуют таблицы кодов для разных случаев: кодируются символы алфавита, значки типо запятой и точки, кодируются цвета в картинке на рабочем столе и даже музыка. Не придется изучить эти кодировки, чтобы на равных общаться с компьютером. Считайте их некими словарями для перевода или иностранным алфавитом, мы обратимя к таблицам только когда понадобится добавлять данные к уже написанным программам. Программа сама по себе не имеет звука, вида или запаха. Всё дело в данных. Их то и кодируют:
     
    JMIXДата: Среда, 27.10.2010, 00:05 | Сообщение # 2
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Вот такая шахматная таблица получается, где каждая клетка пронумерована (опкод) и имеет собственный значок (символ). Хочешь написать "hello", пиши так: 104 101 108 108 111.
     
    JMIXДата: Среда, 27.10.2010, 00:15 | Сообщение # 3
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Таблица маленько корявая. smile Некоторых символов нет, а другие заменяемы на русские буквы например.
    Это с 128 по 175 и с 224 по 241. Ну уж какую нашел в интернети.
     
    JMIXДата: Среда, 03.11.2010, 22:44 | Сообщение # 4
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline

    Эта лучше) Она используется в Операционной Системе дос. ОСь smile И называется не по нашему ASCII OEM ("аски оем")
    Программировать на асме всегда лучше начинать с дос. В Виндовс (или просто форточки) я пока не лезу.
    Прикрепления: ASCII.txt (5.6 Kb)
     
    JMIXДата: Среда, 03.11.2010, 23:06 | Сообщение # 5
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Ну это просто надо запомнить как и уметь переводить числа в разные системы счисления. Об системах уже много сказано. Да в любых статьях по асму и учебниках с этого начинают. Хотя бы почитайте "дневники чайника". Ссылка в левом нижнем углу не зря висит. Лучшего пока не написано. cool Это сугубо моё мнение.

    Хоть я и не пишу всю эту математику, но переводы чисел в bin,dec и hex- это основы. И читать дальше форум стоит только когда сможете по памяти(письменно) перевести любое число во все три состояния.

     
    JMIXДата: Четверг, 04.11.2010, 00:04 | Сообщение # 6
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Главную всё таки проблему будут доставать не данные, с их переводом всё ясно как и с их применением. А вот как например данные из таблицы вывести на экран и в постоянную память записать, когда станет ясно, что ты написал программу и она работает? Для этого существует код. И этот код(всё что не данные) тоже из чисел, правдо таблиц для него не существует как для данных. Тут всё куда сложнее! Настолько, что ни один нормальный человек не разберётся. По крайней мере так было вначале, когда не существовало других языков и был только ассемблер. И программисты тогда были другие... И солнце светило ярче... biggrin Впрочем я тогда ещё не жил наверно. Факт в том, что в ту эпоху код от данных нельзя было отличить. Поскольку то и другое - всего лишь числа. Придумали знаешь что??? Взять отдельные группы команд(чисел) и обозвать их на три (или более) буквы. В результате программа перестала выглядеть как на первой картинке (из нулей и единиц), а приобрела такой вид, когда стала наконец походить на язык, а не на бред сумасшедшего ученого:
    mov EAX,12345678

    Кто хочет знать что белая строка значит, для чего она в ассемблере создана?
    Выше типичная команда ассемблера mov. Она копирует в регистор EAX данные, а именно число "12345678".
    Регистр- это некоторая ячейка памяти. (что-то вроде переменной)
    Чтобы не оставалось вопросов намекну, что эта память процессора. wink Самой главной части в вашем компьютере. И программист с помощью mov уже может вежливо попросить процессор посчитать для него как на калькуляторе.

     
    JMIXДата: Суббота, 01.01.2011, 15:28 | Сообщение # 7
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    С детства нам знакомы операции (+ - * /). Всё это можно выполнить и с регистрами:
    ___________________________________________________
    Inc - это команда, которая увеличивает значение на 1 (INCrement - инкремент)
    dec - команда, которая уменьшает значение на 1 (DECrement - декремент)
    add - прибавляет к первому регистру второй через запятую (add ah,al), при этом изменится только ah (или вот так add ah,003)
    sub - отнимает от первого регистра второй (sub eax,edx), при этом изменится только eax, в edx останится то же значение, которое было (ещё пример sub eax,000000015h)
    mul - умножает eax на регистр, результат записывается в eax
    div - От англ. слова division - деление. Делит eax на регистр, а вот результат записывается по разному (смотря на что делить):
    AX /делитель8bit частное AL, остаток AH
    DX_AX /делитель16bit частное AX, остаток DX
    EDX_EAX/делитель32bit частное EAX, остаток EDX
     
    JMIXДата: Понедельник, 03.01.2011, 19:48 | Сообщение # 8
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline

    Я написал вот этот код для тренировки, чтобы запомнить команды операций.
    100h: даю регистру DX значение 8;
    103h: DX+2=10d(в десятичной) или 0Ah(в шестнадцатеричной системе);
    106h: DX-4=6;
    109h: AX получает значение из DX, то есть 6 в обоих регистрах;
    Я уже писал, что любой регистр сначала имеет значение 0.
    10Bh: хочу AX умножить на 5;
    Только умножать можно числа, которые в регистрах, а не просто так. Поэтому я перенес 0006 в AX, а 5 в DX.
    10Eh: умножаю AX на DX;
    Теперь AX=001Dh или 30d.
    110h: хочу поделить AX на 3;
    Аналогично умножению.
    113h: делю AX на DX
    В результате AX=000Ah(в шестнадцатеричной) или 10d(в десятичной).
     
    JMIXДата: Понедельник, 03.01.2011, 19:58 | Сообщение # 9
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    Вместо DX и AX почти везде можно было использовать меньшие по размеру DL и AL. Разница небольшая.

    Чтобы проследить, что программка правильная, я использовал отладчик CodeView. О нем напишу в теме про прерывания. Отладчик- самый полезный инструмент программиста. Он дает асемблерщику много информации о изменениях в программе во время её работы. То есть после каждой выполненной команды. В той же теме вы узнаете как вывести результат данных вычислений на экран(консоль). Я решил всё же не выделять для CodeView отдельной темы. Существует много отладчиков, чтобы для каждого делать отдельную тему. Но я склоняюсь к этому, потому что больше попросту не знаю smile . В смысле не знаю больше отладчиков для "досовских" программ формата com.

     
    JMIXДата: Воскресенье, 09.01.2011, 15:31 | Сообщение # 10
    Глава Сайта
    Группа: Администраторы
    Сообщений: 67
    Репутация: 10
    Статус: Offline
    mov al,03 ;это коментарий
    mul al ;возвести 03 в квадрат = 09
    inc al ;09 + 01 = 0Ah
    mov dl,05 ;dl = 05
    div dx ;000Ah / 0005 тогда al=02 ah=00
    mov dl,00 ;обнуляю EDX
    dec al
    dec al ;обнуляю EAX
    int 20h ;конец кода

    Ещё одна простая программка. В первом примере не хватало конца кода int 20h.

     
    • Страница 1 из 1
    • 1
    Поиск: