Как правильно определить структуру? - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени! У меня возник вопрос по структурам:
.data
WORKER struc ;информация о сотруднике
    nam db 30 dup (' ')                                                     ;фамилия, имя, отчество                                                    ;пол, по умолчанию 'м' - мужской
    age db 2 dup(' ')                                                       ;возраст
WORKER ends
HelloWorld db "Hello World!", 0
SimpleWorld db "Simple World!", 0                                                                  ;array
Con DW 400
M1 DD 1,5,9   
sotr1 WORKER <'Lebedev','33'>
Con1 DW 400
sotr2 WORKER <'Svish','30'>
sotr24 WORKER <'Svish','31'>
impleWorld db "Simple World!", 0  
 
.code
start:
    invoke crt_puts, ADDR HelloWorld
    invoke crt_puts, ADDR SimpleWorld
    invoke crt_puts, ADDR Con
    invoke crt_puts, ADDR sotr2.age
    call    crt__getch
    invoke ExitProcess, 0
end start
Объявил структуру WORKER. Но мне кажется, сделал что-то неправильно. Если я пишу invoke crt_puts, ADDR sotr2, например, он выводит в консоль и sotr2, и sotr3, хотя по идее должен только sotr2. И в деббаггере в секции дата они идут слитно, без разделителя. Если пишу sotr1, то он еще и Con1 захватывает! Но! Если написать invoke crt_puts, ADDR Con или invoke crt_puts, ADDR M1, то пишет только Con или M1. Хотя между Con и M1 тоже нет никакого разделителя в секции DATA. Они идут подряд: 90 01 01 00 00 00 05 00 00 00 09 00 00 00 4c ... , где 90 01 - это 400 (Con) 01 00 00 00 05 00 00 00 09 00 00 00 - элементы массива M1 4с - это уже начинается sotr1. То есть между последним элементом массива и структурой sotr1 тоже нет никакого разделителя... Как же выводятся crt_puts выбирает до какого адреса читать из памяти?

Решение задачи: «Как правильно определить структуру?»

textual
Листинг программы
nam db 30  dub(0)

Объяснение кода листинга программы

  1. Переменная nam объявлена как DB (Data Block), что означает, что она будет хранить данные в блоке памяти. Значение переменной равно 30.
  2. Переменная dub объявлена как DB (Data Block), что означает, что она будет хранить данные в блоке памяти. Значение переменной равно 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5