Подсчет байтов на языке ассемблера - PullRequest
0 голосов
/ 13 декабря 2011

Я немного запутался с тем, как переменные хранятся в сегменте данных.Нам дан этот фрагмент кода:

      .data
vala  dw  1234h
valb  db  1,2,3,4
valc  db  '1234$'
vald  db  '12'

Я создал таблицу данных смещения следующим образом:

offset  00  01  02  03  04  05  06  07  08  09  10  11
data    34  12  01  02  03  04  31  32  33  34  31  32

Я не думаю, что загружаю ее в память правильно, потому что общееколичество байт, необходимых в памяти, равно 13, а у меня здесь только 11.Может кто-нибудь прокомментировать, где я ошибся?

Есть еще один вопрос, который спрашивает, сколько байтов записывается на стандартное устройство вывода после этих инструкций:

mov  dx,offset valb    ;valb has 4 bytes
mov  ah,9              ;4 bytes is written to the output
int  21h               ;for a total of 8 bytes

Я продумываю этот сегменткода правильно?

1 Ответ

1 голос
/ 13 декабря 2011

Вы перечислили 12, а не 11. Просто посчитайте их.Для символа доллара пропущен один байт.В остальном смещения кажутся нормальными.

Кроме того, функция 9 печатает только текст, а не двоичные числа.Он не будет печатать 4 байта (1, 2, 3 и 4) из valb понятным для человека способом.Сколько именно байтов будет напечатано ... ну, это не будет печатать доллар, потому что он используется в качестве ограничителя строки (см. Документацию, кстати, все там).Таким образом, это должно быть всего 8 (4 странных символа для байтов с 1 по 4 и символов «1», «2», «3» и «4»).

...