Board.KolibriOS.org

Official KolibriOS board
It is currently Wed May 22, 2019 10:29 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 16 7 8 9 10 Next
Author Message
PostPosted: Sat Nov 29, 2014 2:28 am 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 416
У меня этот код работает. Ищи проблему в другом месте. Или выкладывай весь исходник.


Top
   
PostPosted: Sat Nov 29, 2014 2:33 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Приведенный кусок кода правильный, однако есть вероятность что в части кода, который отсутствует, что то неправильно, так что без полной портянки ответ дать не могу. Также я не вижу каким способом ты получил данные находящиеся в EAX, после чтения корневой директории. Возможно проблема как раз в этом.

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Nov 29, 2014 3:03 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Вот весь набор исходников. Процедура GetDisk из tmpdisk.asm


Attachments:
Tmpdisk.7z [19.39 KiB]
Downloaded 118 times

_________________
я лишь учусь
Top
   
PostPosted: Sat Nov 29, 2014 4:57 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Ну, так правильно - сам же затер root_pach, когда запустил процедуру convert. В результате читается дефолтный накопитель, а это в текущей системе рамдиск - как раз 75.

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
 Post subject:
PostPosted: Wed Dec 03, 2014 5:51 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
получил список устройств через Ф70.1, посмотрел в отладчике, все нормально. Допустим в eax, адрес по которому лежит имя устройства. Как вывести на доску отладки?

_________________
я лишь учусь


Top
   
PostPosted: Wed Dec 03, 2014 5:57 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
mov edx, eax
call debug_outstr


Top
   
PostPosted: Wed Dec 03, 2014 6:09 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Лучше сразу переходи на FDO. Там более удобные макросы.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
 Post subject:
PostPosted: Wed Dec 17, 2014 1:17 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
В eax лежит адрес строки с именем устройства ( получено ф70.1) Мне надо узнать, является ли первая буква имени буквой t.
Пишу:
cmp eax, 't'
jnz @f
print '1'
@@:
какието действия

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

_________________
я лишь учусь


Top
   
PostPosted: Wed Dec 17, 2014 1:39 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker
Quote:
лежит адрес строки

Code:
cmp [eax], byte 't'

Ты точно на Юрова не потратил время.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
 Post subject:
PostPosted: Sat Jan 17, 2015 11:44 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Подскажите как работает следующая инструкция:
rep movsb

_________________
я лишь учусь


Top
   
 Post subject: Re:
PostPosted: Sun Jan 18, 2015 12:20 am 
Offline
User avatar

Joined: Thu Nov 27, 2014 1:24 am
Posts: 71
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 можно не обращать особого внимания, так как обычно ими заведует ОС.

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


Top
   
PostPosted: Tue Feb 03, 2015 12:36 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)

_________________
я лишь учусь


Top
   
PostPosted: Tue Feb 03, 2015 7:31 pm 
Offline
User avatar

Joined: Mon Jul 25, 2011 6:22 pm
Posts: 93
punk_joker wrote:
Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)

Как факт, последовательно, при условие, что окна без наложения друг на друга.

_________________
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!


Top
   
PostPosted: Wed Feb 04, 2015 4:57 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Я так понял, это сетка кнопок 4*3, тогда лучше не массивом, а циклом
http://pastebin.com/7xWNLYCq
Code:
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:

писал на коленке, так что может не работать, но суть уловить можно


Top
   
 Post subject:
PostPosted: Wed Feb 04, 2015 5:08 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Спасибо. Хватит и этого.

_________________
я лишь учусь


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 16 7 8 9 10 Next

All times are UTC+03:00


Who is online

Users browsing this forum: Bing [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited