Как правильно определить структуру? - Assembler
Формулировка задачи:
Доброго всем времени! У меня возник вопрос по структурам:
Объявил структуру 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 выбирает до какого адреса читать из памяти?
.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
Решение задачи: «Как правильно определить структуру?»
textual
Листинг программы
nam db 30 dub(0)
Объяснение кода листинга программы
- Переменная
nam
объявлена как DB (Data Block), что означает, что она будет хранить данные в блоке памяти. Значение переменной равно 30. - Переменная
dub
объявлена как DB (Data Block), что означает, что она будет хранить данные в блоке памяти. Значение переменной равно 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д