Предупреждение: я никогда в жизни не писал ассемблер для 8086, но вот что я из него делаю.
MOV AX,@DATA
— это первая строка кода, которая запускается. Я считаю, что @DATA — это переменная, которая содержит значение местоположения в памяти, где находится сегмент данных. Он перемещает ячейку памяти @DATA в регистр AX (16-битный регистр). Здесь следует отметить одну вещь: @ перед словом ДАННЫЕ. Я считаю, что это связано с тем, что @DATA оценивается в процессе связывания и будет заменено его фактическим значением. Обратите внимание, что в других примерах нет символа @ впереди, потому что они изначально ссылаются на фактическую ячейку памяти.
Затем MOV DS,AX
установит это место в памяти как переменную DS
, которая является стандартной переменной (или регистром в данном случае) для сборки 8086. Он всегда должен указывать на расположение вашего хранилища, где вы хотите хранить значения (куча, если вы знакомы с терминологией C++).
Регистр AX — это просто временный заполнитель, который вы можете загружать значениями и выполнять команды выполнения.
MOVE AH, ??H
Во-первых, AH относится к старшей стороне регистра AX. Братом этого будет AL, который относится к «младшей» стороне регистра AX. Это используется, когда вы хотите выполнять команды с 8 битами вместо 16 бит. Вторая часть этого, ??H, как вы его называете, - это значение, которое вы хотите сохранить в регистре AH. H в конце означает «шестнадцатеричный». Итак, если у вас есть 00H, это будет означать ноль (в шестнадцатеричном формате). Если вы введете FFH, это будет то же самое, что 255 в десятичной системе счисления.
Вернемся к вашему первоначальному вопросу «Когда будет выполняться код в сегменте данных в этом коде?» -- Я полагаю, вы спрашиваете, когда будет выполнен СЕГМЕНТ ДАННЫХ. Обычно это не должно выполняться, потому что предполагается хранить данные (переменные) для использования в вашем СЕГМЕНТЕ КОДА. Я считаю, что в некоторых операционных системах вы можете обойти это и просто ПЕРЕЙТИ или ВЕТВИТЬСЯ к этому разделу кода и рассматривать его как обычный СЕГМЕНТ КОДА. Иногда именно так работают переполнения стека, переполнения кучи (взломы) и т. д.
person
Joe Phillips
schedule
16.03.2011