я редактирую проект на ассемблере и есть строка в сегменте данных:Что означает этот оператор сборки db?
buffer1 db 80, 0, 80 dup(0)
Может кто-нибудь уточнить это, пожалуйста?
я редактирую проект на ассемблере и есть строка в сегменте данных:Что означает этот оператор сборки db?
buffer1 db 80, 0, 80 dup(0)
Может кто-нибудь уточнить это, пожалуйста?
Команда pseudo DB
выделяет память для данных и инициализирует ее заданными значениями. Вы можете указать последовательные значения, разделив их запятыми. Так DB 5
выделит один байт и установите его значение в 5
и DB 4, 3
выделит 2 байта и установите их значение на 4 и 3.
X DUP(V)
дублирует раз V X, так 2 DUP(4)
, как 4, 4
.
Объединение тех, мы получаем DB 80, 0, 80 DUP(0)
, как DB 80, 0, 0, 0, 0, ...
, который выделит 82 байт, первый инициализируется до 80, а остальные 0.
Приставка, buffer1
является буфер метка, которая позволяет обратитесь к буфере из других мест вашего кода.
Эта линия свободно равен коду C:
char buffer1[] = {
80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
};
Или, еще проще:
char buffer1[82] = { 80, 0 };
Это, вероятно, буфер используется для чтения в строка из консоли в MSDOS, int 21h с регистром AH = 0AH или старая функция c conio.h cgets(). Первый байт - это размер буфера (в данном случае 80 байт), а второй байт - это возвращаемое фактическое количество байтов, вводимых пользователем. Остальные байты - это вход пользователя. – rcgldr
дб байт данных, с.в. слово данных, и т.д. –