Jump to content

ASM


 Share

Recommended Posts

В ASMе я пока-что слабоват (учусь скажем так), и тут вот столкунлся с такой проблемой, не вьезжаю как такое получается! Я создаю маленькую програмку: сегменты размечаю вручную, тоесть с помощью SEGMENT... ENDS и тут то и начинается веселье!

В процесе дебагинга выяснилось, что каким то макаром адрес сегмента даных оказывается записаным в регистре сегмента стека (тоесть вместо DS в SS), либо же данные помещаются по адресу сегмента стека. Если поменять вручную содержимое DS на SS, либо сделать нехитрое копирование то все работает нормально, читает что положено из памяти.

Компилировалось это все в TASM и MASM - результат аналогичен.

Компиляция без дерективы .386

Программа просто пробная и никакой логической нагрузки не несет! :unsure:

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

Подскажите что творится, и в чем я не прав!

Link to comment
Share on other sites

Спасибо за такое большое количество ответов! :unsure:

К счастью я сам нашел решение! И оказалось оно достаточно глупым!

Оказывается директивы assume не достаточно для того чтобы "умная" система записала в регистр DS адресс сегмента данных, поэтому его то надо туда копировать вручную! (глупо получилось с учетом того, что я и сам это пробовал)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...