L1 - это обычно / вероятно метка , , связанная с одним конкретным адресом в памяти. Программист определяет различные метки для своего удобства, и такие метки используются для символического представления определенного места в памяти (L1 - паршивое имя; метки обычно указывают на основную цель местоположения: скажем, PingCounter, ErrorMessage, Login и тому подобное).
Метка для 1 байта статического хранилища - это то, как компилятор C может реализовать char L1;
в глобальном масштабе.
В синтаксисе NASM mov edi, L1
будет собираться в форму mov eax, imm32
mov
, т. Е. Адрес метки станет 32-битным непосредственным в машинном коде. (Ассемблер не знает окончательное числовое значение, но компоновщик знает.) Помните, что в синтаксисе MASM это будет загрузка, и вам потребуется mov edi, OFFSET L1
, чтобы сразу получить адрес метки.
Но mov al, [L1]
будет собираться в другую инструкцию с 32-битным адресом, встроенным в машинный код в качестве адреса, на который нужно разыменовать. Эта инструкция загружает 1 байт с адреса L1 и помещает его в AL.
На языке ассемблера этот режим косвенной адресации обозначается квадратными скобками исходного или целевого операнда данной инструкции. (Но не оба: x86 поддерживает не более одного явного операнда памяти на инструкцию.)
mov al, [L1]
использует адрес, сохраненный в L1, для определения местоположения в памяти и считывает 1 байт (= 8 бит = размер регистра AL) в этом месте и загружает его в регистр AL.
mov [L1], al
Делает это в обратном порядке. то есть, в частности, прочитайте адрес, сохраненный в L1, используйте этот адрес, чтобы найти конкретное место в памяти и сохранить там содержимое регистра AL.
При условии, что вы понимаете, что следующая информация является неполной и несколько устаревшей в отношении новых процессоров семейства x86, этот учебник по архитектуре 8086 , вероятно, очень полезен для Начните с языка ассемблера для семейства x86.
Преимущество, начиная с этой «древности ЦП» (все еще используемой на самом деле), состоит в том, что все фундаментальные концепции существуют, не обремененные новыми наборами регистров, причудливыми режимами адресации, режимами работы и другими понятиями. Большие размеры, функции и режимы новых ЦП просто вводят комбинаторный набор опций, все (большинство?) Из них полезны по-своему, но, по сути, не имеют значения для инициации.