2016-04-21 9 views
1

Я прочитал Kip Irvine x86 сборник и у вас есть два вопроса.Недостаток определения массива?

1) Каков смысл этого определения:

array2 WORD 5 DUP(3 DUP(?)) 

2) В чем разница между

myArray BYTE 10,20,30,40,50, 
      60,70,80,90,100 

и

myArray BYTE 10,20,30,40,50 
     BYTE 60,70,80,90,100 

в этом определении массива?

+0

Что он производит при сборке, а затем разобрать его? –

ответ

2

1) Как мы знаем, DUP означает Duplicate. И в этом утверждении вы создаете массив байтов длиной 15. Это работает так, вы просите ассемблера дать вам 5 из них (3 (?)). И (3 (?)) Означает 3 неизвестных значения.

Это может быть лучше объяснить с помощью этого примера -

array DB 5 DUP(3 DUP('a'), 2 DUP('b')) 

Здесь массив будет иметь длину 25 (5 * (3 + 2)). И это будет инициализирован как -

aaabbaaabbaaabbaaabbaaabb

который в основном aaabb 5 раз. Короче говоря, вы создали собственный дубликат с разными значениями, которые повторяются.

2) Это в основном то, как вы сокращаете код в соответствии с вашими визуальными потребностями. Это может быть одна строка. Допустим, у вас есть массив, содержащий около 20 номеров. Так что легче разбить их на 3-4 линии.

Так код, как это -

INVENTORY DW 0 
      DW 0 
      DW 0 
      DW 0 

также может быть записана в виде -

INVENTORY DW 0 , 0 , 0 , 0 
+0

в вопросе 2 в первом случае одна запятая больше, чем второй случай. Не важно? – user3661613

+0

Задается запятая, потому что мы вручную ввели значение «60». Так что в принципе, даже если вторая строка была рядом с первой, это было бы то же самое. – SanVed

+0

@SanVed "Что в основном aaabb 4 раза" Не должно быть ** 5 ** раз? –

2
array2 WORD 5 DUP(3 DUP(?)) 

Это создает массив из 5 * 3 слов, поэтому 30 байт в итоге. Ни один из этих байтов не получит определенное значение, потому что ? Заполнитель означает, что ассемблер назначает пространство, но не инициализирует содержимое.


myArray BYTE 10,20,30,40,50, 
      60,70,80,90,100 
... 
myArray BYTE 10,20,30,40,50 
     BYTE 60,70,80,90,100 

Оба эти инициализатора списки объявить тот же массив. В первом случае, однако, список был , а не, прерванный переходом на другую линию, благодаря добавленной запятой. Это становится важным при использовании операторов LENGTHOF и SIZEOF. В первом случае LENGTHOF и SIZEOF дают 10, но во втором случае они будут давать только 5.