Page 1 of 1

Несколько вопросов по FASM'у.

Posted: Wed Jul 03, 2013 9:54 pm
by Demonikss
Уважаемые разработчики, у меня есть к вам вопрос по ассемблеру Fasm. Начал изучать его и столкнулся с небольшими затруднениями по поводу синтаксиса. Почти все примеры для разбора которые удается найти в интернете, предназначены для tasm/masm... Почему именно нужно записывать имя переменной в квадратные скобки [], например команду mov ax, peremen на фасме нужно писать как mov ax, [peremen]? И еще как будет правильно записать команду mov byte ptr es:[di], cl на фасм? Я записал как mov byte [es:di], cl. Программа вроде даже скомпилилась и работает, но для успокоения души хочу разобраться. Также меня интересует обязательно ли в командах математического сопроцессора указывать тип данных, или же тип берется из определения, когда описываешь переменную? Писал в свое время на ассемблере для z80, теперь хочу научиться для x86. В перспективе есть интерес поучаствовать в написании программ для КолибриОС. Буду очень благодарен если ответите.

Re: Несколько вопросов по FASM'у.

Posted: Wed Jul 03, 2013 10:03 pm
by Mario_r4

Re: Несколько вопросов по FASM'у.

Posted: Wed Jul 03, 2013 11:14 pm
by Serge
Demonikss
Все очень просто. peremen это адрес памяти. Если мы хотим загрузить этот адрес в регистр, то пишем mov reg, peremen
если нужно загрузить значение по этому адресу, используем скобки mov reg, [peremen]
как будет правильно записать команду mov byte ptr es:[di], cl
mov [di], cl :)
es - сегмент по умолчанию для di, поэтому префикс es: лишний.
Fasm знает, что размер регистра cl 1 байт, поэтому указывать размер операнда не обязательно.

Re: Несколько вопросов по FASM'у.

Posted: Thu Jul 04, 2013 4:01 pm
by CleverMouse
Ну, насчёт "es - сегмент по умолчанию для di, поэтому префикс es: лишний." Serge несколько погорячился. Сегменты в fasm указываются внутри квадратных скобок: mov [es:di],cl.

Re: Несколько вопросов по FASM'у.

Posted: Thu Jul 04, 2013 4:41 pm
by Serge
CleverMouse
Интел так пишет. bx, si - ds. di - es. bp, sp - ss. Наверное опять обманули :( .

И правда, обманули. Не надо доверять новым мануалам.

Re: Несколько вопросов по FASM'у.

Posted: Thu Jul 04, 2013 4:56 pm
by CleverMouse
В строковых инструкциях везде es:di, в остальных di не влияет на сегмент. sp вообще не адресуется, у bp/ebp/esp умолчальный сегмент ss, да.

Re: Несколько вопросов по FASM'у.

Posted: Fri Jul 05, 2013 1:10 pm
by z525
Demonikss wrote:Уважаемые разработчики, у меня есть к вам вопрос по ассемблеру Fasm. Начал изучать его и столкнулся с небольшими затруднениями по поводу синтаксиса. Почти все примеры для разбора которые удается найти в интернете, предназначены для tasm/masm...
Цитата:
Используется Intel-синтаксис записи инструкций.

Единственное существенное отличие от формата, принятого в других ассемблерах (MASM, TASM в режиме совместимости с MASM) — значение ячейки памяти всегда записывается как [label_name], а просто label_name означает адрес (то есть порядковый номер) ячейки. Это позволяет обходиться без ключевого слова offset. Также в fasm при переопределении размера операнда вместо byte ptr пишется просто byte, вместо word ptr — word и т. д. Не позволяется использовать несколько квадратных скобок в одном операнде, таким образом вместо [bx][si] необходимо писать [bx+si]. Эти изменения синтаксиса привели к более унифицированному и лёгкому для чтения коду.

http://ru.wikipedia.org/wiki/Fasm
Demonikss wrote:Почти все примеры для разбора которые удается найти в интернете
На всякий случай:
http://asmworld.ru

Re: Несколько вопросов по FASM'у.

Posted: Sun Jul 07, 2013 6:34 pm
by Phantom-84
Serge wrote:И правда, обманули. Не надо доверять новым мануалам.
Даже если бы там это было написано, поведение проца не могло так кардинально измениться. А то что в руководствах Intel встречаются ошибки, так это да. Раздражает, когда не можешь на 100% довериться докам даже такой солидной фирмы.

Re: Несколько вопросов по FASM'у.

Posted: Sun Feb 07, 2016 3:46 pm
by Leency
У кого-то есть макрос для рисования незакрашенного прямоугольника ?