Подсчет байтов языка ассемблера

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

      .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

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


person raphnguyen    schedule 13.12.2011    source источник


Ответы (1)


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

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

person Alexey Frunze    schedule 13.12.2011
comment
Спасибо, я тоже всегда забываю считать знак доллара. - person raphnguyen; 13.12.2011