В ASMе я пока-что слабоват (учусь скажем так), и тут вот столкунлся с такой проблемой, не вьезжаю как такое получается! Я создаю маленькую програмку: сегменты размечаю вручную, тоесть с помощью SEGMENT... ENDS и тут то и начинается веселье!
В процесе дебагинга выяснилось, что каким то макаром адрес сегмента даных оказывается записаным в регистре сегмента стека (тоесть вместо DS в SS), либо же данные помещаются по адресу сегмента стека. Если поменять вручную содержимое DS на SS, либо сделать нехитрое копирование то все работает нормально, читает что положено из памяти.
Компилировалось это все в TASM и MASM - результат аналогичен.
Компиляция без дерективы .386
Программа просто пробная и никакой логической нагрузки не несет!
assume cs:_code
_data segment
string db "This is a string"
alist db 10h, 20h, 30h
_data ends
_code segment 'code'
main:
assume ds:_data
;mov ax,data -----вот это помогает------
;mov ds,ax
mov bx,offset alist
mov dl,[bx]
inc bx
mov dl, [bx]
inc bx
mov dl,[bx]
mov ax, 4c00h
int 21h
_code ends
end main
Подскажите что творится, и в чем я не прав!