В настоящее время я изучаю сборку, и я использую ассемблер a86, Oracle VM VirtualBox. Мне интересно, почему мы объявляем или помещаем переменные таким образом (после команды перехода)? Если я объявляю или переставляю переменные перед командой перехода, программа станет ошибкой. Есть ли какие-либо объяснения позади такой структуры? Спасибо.Монтажная переменная, где поставить?
seg1 segment
org 100h
jump start
; variables here (comment)
start:
mov ah, 4ch
int 21h
seg1 ends
Если поместить переменные перед прыжком они будут выполнены в виде кода, и это не то, что вы хотите сделать, как правило. Таким образом, вы можете перепрыгнуть через них, или вы можете разместить их ниже кода, который выходит из вашей программы (после int 21h/ah = 4ch). В других моделях памяти вы можете разместить данные в разных сегментах, что позволит вам разделить данные и код. С org 100h я понимаю, что вы создаете программы .COM, где данные и код находятся в одном сегменте. –
Что произойдет, если объявление переменной выполняется как код? – Andre
Процессор будет декодировать переменные как инструкции (он не знает разницы между байтами, которые составляют переменные и байты, составляющие код, - все они являются байтами). В лучшем случае ничего (маловероятно) произойдет; худший случай сбоя и сжигания (более чем вероятно), поскольку данные могут создавать незаконные инструкции или заставлять программу зависать; или вызвать ошибку процессора. Это зависит от переменных. –