ряд вопросов по FASM
-
У меня этот код работает. Ищи проблему в другом месте. Или выкладывай весь исходник.
punk_joker
Приведенный кусок кода правильный, однако есть вероятность что в части кода, который отсутствует, что то неправильно, так что без полной портянки ответ дать не могу. Также я не вижу каким способом ты получил данные находящиеся в EAX, после чтения корневой директории. Возможно проблема как раз в этом.
З.Ы. Просьба в следующий раз применять тег CODE для цитируемых кусков кода, иначе форматирование сбивается и труднее воспринимать.
Приведенный кусок кода правильный, однако есть вероятность что в части кода, который отсутствует, что то неправильно, так что без полной портянки ответ дать не могу. Также я не вижу каким способом ты получил данные находящиеся в EAX, после чтения корневой директории. Возможно проблема как раз в этом.
З.Ы. Просьба в следующий раз применять тег CODE для цитируемых кусков кода, иначе форматирование сбивается и труднее воспринимать.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Вот весь набор исходников. Процедура GetDisk из tmpdisk.asm
- Attachments
-
-
Tmpdisk.7z (19.39 KiB)Downloaded 384 times
-
to infinity and beyond
punk_joker
Ну, так правильно - сам же затер root_pach, когда запустил процедуру convert. В результате читается дефолтный накопитель, а это в текущей системе рамдиск - как раз 75.
З.Ы. В таких непонятных ситуациях полезно бывает на доску выводить еще и сам путь. Ситуация, когда одни данные затирают другие, когда они на одном общем куске памяти находятся, вполне частая вещь.
Ну, так правильно - сам же затер root_pach, когда запустил процедуру convert. В результате читается дефолтный накопитель, а это в текущей системе рамдиск - как раз 75.
З.Ы. В таких непонятных ситуациях полезно бывает на доску выводить еще и сам путь. Ситуация, когда одни данные затирают другие, когда они на одном общем куске памяти находятся, вполне частая вещь.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
получил список устройств через Ф70.1, посмотрел в отладчике, все нормально. Допустим в eax, адрес по которому лежит имя устройства. Как вывести на доску отладки?
to infinity and beyond
mov edx, eax
call debug_outstr
call debug_outstr
punk_joker
Лучше сразу переходи на FDO. Там более удобные макросы.
Лучше сразу переходи на FDO. Там более удобные макросы.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
В eax лежит адрес строки с именем устройства ( получено ф70.1) Мне надо узнать, является ли первая буква имени буквой t.
Пишу:
cmp eax, 't'
jnz @f
print '1'
@@:
какието действия
но в результате выполнения ничего не выводится (т.е. 1 не печатается на доску), всегда перескакивает на метку, хотя должно быть одно совпадение.
Пишу:
cmp eax, 't'
jnz @f
print '1'
@@:
какието действия
но в результате выполнения ничего не выводится (т.е. 1 не печатается на доску), всегда перескакивает на метку, хотя должно быть одно совпадение.
to infinity and beyond
punk_joker
Ты точно на Юрова не потратил время.
лежит адрес строки
Code: Select all
cmp [eax], byte 't'
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Подскажите как работает следующая инструкция:
rep movsb
rep movsb
to infinity and beyond
Данная инструкция побайтово копирует блок памяти, который начинается с адреса ds:esi в блок памяти по адресу es:edi, размер блока находится в ecx (количество байт). Это общая суть того, для чего эта инструкция обычно используется.punk_joker wrote:Подскажите как работает следующая инструкция:
rep movsb
Если более подробно, то сначала стоит рассмотреть, что делает команда 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 можно не обращать особого внимания, так как обычно ими заведует ОС.
Данный пост может содержать неточности/неправильные формулировки, автор ответственности не несет
Но в целом, кажется, я описал все довольно подробно и без фактических ошибок.
Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)
to infinity and beyond
Как факт, последовательно, при условие, что окна без наложения друг на друга.punk_joker wrote:Имеется массив координат кнопок по х и у
pos_x db 13, 13, 13, 83
pos_y db 60, 85, 110, 60
(кнопок на самом деле 12)
Размеры скажем 60 по х, 20 по у
так вот, как првильней всего будет их создать?
)
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Я так понял, это сетка кнопок 4*3, тогда лучше не массивом, а циклом
http://pastebin.com/7xWNLYCq
писал на коленке, так что может не работать, но суть уловить можно
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:
Спасибо. Хватит и этого.
to infinity and beyond
Who is online
Users browsing this forum: No registered users and 2 guests