каков абсолютный адрес для переменной сегмента данных в сборке?

#assembly #x86-16 #real-mode

#сборка #x86-16 #в реальном режиме

Вопрос:

 .data

len dw 10
msg db "1234567890"

.code
....
  

Адрес для сегментов
DS = 0ACA
CS = 0AC7

Каков абсолютный адрес для строки msg?

Насколько я понимаю, эффективный адрес для сообщения сообщения равен 21 в декабре, который составляет 15 часов, затем я делаю DS: 0015, который является ACB5, но он не работает..

Доступные ответы:

 0ACA2

0ACC0

0ACC

0ACA0
  

Комментарии:

1. Чувак, прекрати публиковать здесь свои домашние вопросы. Никто не собирается делать за вас домашнее задание.

Ответ №1:

Учитывая ваши текущие предположения, вы делаете правильный расчет для линейного адреса.

(0ACAh << 4) 0015h действительно выдает линейный адрес 0000ACB5h.

Однако почему вы понимаете, что метка msg находится со смещением 21 (15h)?

Допустимо предположить, что регистр DS сегмента указывает на .data раздел, и увидеть следующий фрагмент кода

 .data
len dw 10
msg db "1234567890"
  

там, где переменная len занимает 2 байта, потому что это то, что dw делает (DefineWord) , смещение к msg будет скорее равно 2.

Если вы повторите свои вычисления, вы увидите, что правильный ответ указан в предоставленном списке…