Page 9 of 10

Re: ряд вопросов по FASM

Posted: Sat Nov 29, 2014 2:28 am
by dunkaist
У меня этот код работает. Ищи проблему в другом месте. Или выкладывай весь исходник.

Re: ряд вопросов по FASM

Posted: Sat Nov 29, 2014 2:33 am
by Mario_r4
punk_joker
Приведенный кусок кода правильный, однако есть вероятность что в части кода, который отсутствует, что то неправильно, так что без полной портянки ответ дать не могу. Также я не вижу каким способом ты получил данные находящиеся в EAX, после чтения корневой директории. Возможно проблема как раз в этом.

З.Ы. Просьба в следующий раз применять тег CODE для цитируемых кусков кода, иначе форматирование сбивается и труднее воспринимать.

Re: ряд вопросов по FASM

Posted: Sat Nov 29, 2014 3:03 am
by punk_joker
Вот весь набор исходников. Процедура GetDisk из tmpdisk.asm

Re: ряд вопросов по FASM

Posted: Sat Nov 29, 2014 4:57 am
by Mario_r4
punk_joker
Ну, так правильно - сам же затер root_pach, когда запустил процедуру convert. В результате читается дефолтный накопитель, а это в текущей системе рамдиск - как раз 75.

З.Ы. В таких непонятных ситуациях полезно бывает на доску выводить еще и сам путь. Ситуация, когда одни данные затирают другие, когда они на одном общем куске памяти находятся, вполне частая вещь.

Posted: Wed Dec 03, 2014 5:51 pm
by punk_joker
получил список устройств через Ф70.1, посмотрел в отладчике, все нормально. Допустим в eax, адрес по которому лежит имя устройства. Как вывести на доску отладки?

Re: ряд вопросов по FASM

Posted: Wed Dec 03, 2014 5:57 pm
by e-andrew
mov edx, eax
call debug_outstr

Re: ряд вопросов по FASM

Posted: Wed Dec 03, 2014 6:09 pm
by Mario_r4
punk_joker
Лучше сразу переходи на FDO. Там более удобные макросы.

Posted: Wed Dec 17, 2014 1:17 am
by punk_joker
В eax лежит адрес строки с именем устройства ( получено ф70.1) Мне надо узнать, является ли первая буква имени буквой t.
Пишу:
cmp eax, 't'
jnz @f
print '1'
@@:
какието действия

но в результате выполнения ничего не выводится (т.е. 1 не печатается на доску), всегда перескакивает на метку, хотя должно быть одно совпадение.

Re: ряд вопросов по FASM

Posted: Wed Dec 17, 2014 1:39 am
by Mario_r4
punk_joker
лежит адрес строки

Code: Select all

cmp [eax], byte 't'
Ты точно на Юрова не потратил время.

Posted: Sat Jan 17, 2015 11:44 pm
by punk_joker
Подскажите как работает следующая инструкция:
rep movsb

Re:

Posted: Sun Jan 18, 2015 12:20 am
by Anton_K
punk_joker wrote:Подскажите как работает следующая инструкция:
rep movsb
Данная инструкция побайтово копирует блок памяти, который начинается с адреса ds:esi в блок памяти по адресу es:edi, размер блока находится в ecx (количество байт). Это общая суть того, для чего эта инструкция обычно используется.

Если более подробно, то сначала стоит рассмотреть, что делает команда movsb без префикса rep:

1) Берет байт по адресу ds:esi и записывает его по адресу es:edi.
2) Смотрит на флаг DF (Direction flag), если флаг установлен в 0 (инструкцией cld), то значения в регистрах esi и edi увеличиваются на 1. Если DF=1 (установить DF в 1 можно инструкцией std), то значения в esi и edi уменьшаются на 1. То есть, с помощью DF=1 можно копировать байты, начиная с конца (esi и edi в этом случае указывают на конец блоков и двигаются в сторону уменьшения адресов).

Префикс rep заставляет процессор выполнить инструкцию movsb то количество раз, которое указано в ecx (то есть образуется цикл). При каждом выполнении ecx уменьшается на 1 и цикл останавливается, когда ecx становится равен 0.

Еще есть аналогичные инструкции movsw и movsd, которые копируют по 2 и 4 байта за раз. esi и edi при этом тоже увеличиваются/уменьшаются на 2 или 4, по очевидным причинам.

С точки зрения прикладных программ на регистры ds и es можно не обращать особого внимания, так как обычно ими заведует ОС.

Данный пост может содержать неточности/неправильные формулировки, автор ответственности не несет :)
Но в целом, кажется, я описал все довольно подробно и без фактических ошибок.

Re: ряд вопросов по FASM

Posted: Tue Feb 03, 2015 12:36 am
by punk_joker
Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)

Re: ряд вопросов по FASM

Posted: Tue Feb 03, 2015 7:31 pm
by Artyom
punk_joker wrote:Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)
Как факт, последовательно, при условие, что окна без наложения друг на друга.

Re: ряд вопросов по FASM

Posted: Wed Feb 04, 2015 4:57 pm
by e-andrew
Я так понял, это сетка кнопок 4*3, тогда лучше не массивом, а циклом
http://pastebin.com/7xWNLYCq

Code: Select all

macro cmpe a, b, c {
  cmp   a, b
  je    c
}

macro cmpne a, b, c {
  cmp   a, b
  jne   c
}

  mov   eax, 8
  mov   edx, 0x10 ; номер
  mov   edi, 13 ; x
  mov   esi, 60 ; y

.loop_start:
  mcall , <edi, 32>, <esi, 16>

  inc   edx
  add   edi, 70
  cmpne edi, 293, @f  ;; if x === 13 + 70 * 4
  mov   edi, 13
  add   esi, 25
  cmpe  esi, 135, .loop_end ;; if y === 60 + 25 * 3
@@:
  jmp   .loop_start
.loop_end:
писал на коленке, так что может не работать, но суть уловить можно

Posted: Wed Feb 04, 2015 5:08 pm
by punk_joker
Спасибо. Хватит и этого.