Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 779
от 11.11.2004, 04:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5973 Отправлено ответов: 15920 Активность: 266.5 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Dark_Lord Статус: Профессиональный Общий рейтинг: 109.08 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 132.14 URL: Super Assembler Software Телефон: НСС +7 920 2972610 [Подробней >>] |
Василевский Александр Статус: Опытный Общий рейтинг: 115.56 [Подробней >>] |
Evils_Interrupt Статус: Доверительный Общий рейтинг: 123.21 [Подробней >>] |
Стас Статус: Профессиональный Общий рейтинг: 122.96 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.45 [Подробней >>] |
DSota Статус: Доверительный Общий рейтинг: 121.05 [Подробней >>] |
andre Статус: Опытный Общий рейтинг: 134.26 URL: мой сайт правда старый не обновлял давно надо бы заняться да руки не доходя Телефон: 972544517423 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5950. Я выделил участок в памяти (GlobalAlloc) и записал туда строку заканчивающуюся нулевым байтом. Как мне теперь узнать размер этой строки в байтах? (Естесвенно у меня есть указатель на участок - memoryOffset)... (ответов: 5)
Вопрос № 5951. Эксперты. Как пользоваться переменными(см. программу) и что делать когда все регистры общего назначения заняты. Выскажите замечания по программе. Спасибо.... (ответов: 3)
Вопрос № 5952. Здравстуйте Все! У меня вопрос по SoftISE.Открываю оным программу,переписываю с дампа памяти побайтовую последовательнось и открыв в FARе через поиск ищу переписанную последовательность(хочу поменять условный переход),а такого сочитание символов нет.... (ответов: 2)
Вопрос № 5953. Допустим в регистре AX содержится результат арифметических операций (например число 2384 - целочисленное). Как вывести его на экран? Я знаю что нужно каждую цифру увеличить на 30h. Но как это сделеть на практике? Приведите листинг (если можно :-))... (ответов: 5)
Вопрос № 5954. Здравствуйте! Где бы найти ключик к Горыныч Проф. 2.0? На http://crackspider.net и некоторых других - нету. Плиз.... (ответов: 1)
Вопрос № 5955. Здравствуйте, здесь исходник, который патчит 10 байт файла. А как сделать, чтобы можно было пропатчить подряд любое заданное кол-во байт? Дайте пожалуйста исходники. И если можете, то и на memory patcher(патчит файл в памяти). ... (ответов: 3)
Вопрос № 5956. Здравствуйте, уважаемые эксперты! Ответьте, пожалуйста на вопрос: как создать массив в памяти и работать с ним?... (ответов: 2)
Вопрос № 5957. Доброе время суток уважаемые профессионалы. На кнопку Game порта подаем прямоугольные импульсы Напишите программу для определения периода или частоты этих импульсов с выводом на экран монитора. Частота импульсов от 100 до 5000Гц. Спасибо.... (ответов: 3)
Вопрос № 5958. Хотел бы изучить ассемблер для программирования микроконтроллеров PIC. Имеется ли для этого специальная разновидность ассемблера или же надо браться за изучения ассемблера, представленного в Вашей рассылке? Спасибо.... (ответов: 3)
Вопросов: 9, ответов: 27
Вопрос № 5950 |
Я выделил участок в памяти (GlobalAlloc) и записал туда строку заканчивающуюся нулевым байтом. Как мне теперь узнать размер этой строки в байтах? (Естесвенно у меня есть указатель на участок - memoryOffset)
Вопрос отправлен: 02.11.2004, 19:36
Отправитель: UsAr
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Здравствуйте, UsAr!
Либо используй lstrlenA(offset), либо напиши сам функцию проверки длинны строки. Вот тебе пример такой функции:
CheckStringLength proc
mov eax,[esp+04h]
dec eax
loop_1:
inc eax
cmp byte ptr [eax],0
jnz loop_1
sub eax,[esp+04h]
ret 4
CheckStringLength endp
Ответ отправлен: 03.11.2004, 16:59
Отправитель: Dark_Lord
Отвечает Евгений Иванов
Приветствую Вас, UsAr!
lstrlen
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 06.11.2004, 17:58
Отправитель: Евгений Иванов
Отвечает Василевский Александр
Добрый день, UsAr!
Можете сами подсчитать (пишу по памяти):
MOV ESI, memoryOffset;
MOV ECX, __block__size__; размер выделенного блока
XOR AL, AL; искомый байт
REPNE SCASB; ищем нулевой байт
MOV EAX, __block_size__;
SUB EAX, ECX; в EAX - размер строки
либо использовать функцию lstrlen (lstrlenA или lstrlenW). Она определена в библиотеке Kernel32.DLL. Её единственный параметр - адрес строки.
Ответ отправлен: 03.11.2004, 09:41
Отправитель: Василевский Александр
Отвечает Evils_Interrupt
Добрый день, UsAr!
во блин ты вопрос задал! А по считать слабо.
Итак делаешь цикл каждый байт cmp на 0! Если да то выход, ежели нет inc count в конце цикла count и содержит искомый размер строки!
Ответ отправлен: 03.11.2004, 08:22
Отправитель: Evils_Interrupt
Отвечает Стас
Доброе время суток, UsAr!
lea di,адрес начала строки
mov cx,длина буффера
cld
xor al,al
repnz scasb
теперь в di - адрес конца строки, а её длину можно найти так (DI-адрес начала строки) или (CX-длина буффера).
Ответ отправлен: 02.11.2004, 21:44
Отправитель: Стас
Вопрос № 5951 |
Эксперты. Как пользоваться переменными(см. программу) и что делать когда все регистры общего назначения заняты. Выскажите замечания по программе. Спасибо.
Приложение:
Вопрос отправлен: 02.11.2004, 22:33
Отправитель: Oleg_S
[Следующий вопрос >>] [Список вопросов]
Отвечает Стас
Здравствуйте, Oleg_S!
1) Совсем не зачем отделять $ от текста, т.е.:
вместо msg_04 db " ","$", лучьше написать msg_04 db " $"
2) После "Source matrix 5x5:$" нужен перевод строки с пробелами (msg_03).
3) Лишние (по два раза, до и в цикле) обнуление SI.
4) Вообще ты ошибся в следующем: элемент 1(BX),3(SI) это тот же элемент, что и 3(BX),1(SI)!!! Т.к. (((BX=1)+(SI=3)=4) == ((BX=3)+(SI=1)=4)). Надеюсь ты понял что я хотел сказать?
Т.е. Обращайся либо по одному регистру, который последовательно примет значения от 0 до 24, либо (если хочешь сохранить X,Y) перемножай BX на количество элементов таблицы - mas[bx*5][si].
5) Вывод числа на экран в зачаточном состоянии, нужно доделать. А то выводит: 8,9,:,;< ну и так далее.
6) Забыл mov ah,9 перед mov dx,offset msg_04; int 21h
7) Ну и наконец если нехватает регистров заPUSH ненужный в данный момент, например так:
push ax
mov al,byte pt r mas[bx][si]
add sum,al
pop ax
хотя ax у тебя ничего такого и не содержит меняй скоко хочешь.
И вообще регистры это быстрая память, отсюда вывод - если не ватает регистров - используй память, чем она хуже?
Может еще что есть, пока хватит.
Ответ отправлен: 03.11.2004, 03:16
Отправитель: Стас
Отвечает Евгений Иванов
Здравствуйте, Oleg_S!
add sum, mas[bx][si];error!!!!!!!!!!!!!!!!!!
замени на:
mov ax, mas[bx][si]
add sum, ax
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 06.11.2004, 17:59
Отправитель: Евгений Иванов
Отвечает _vt
Здравствуйте, Oleg_S!
> что делать когда все регистры общего назначения заняты
Использовать стек, или выделять блоки памяти функциями ОС. Ну а в коде твоей программы слишком много ошибок, чтобы что-то подсказать! ;-)
* Origin : I′d like to change the world, but I have no source code
Ответ отправлен: 06.11.2004, 17:49
Отправитель: _vt
Вопрос № 5952 |
Здравстуйте Все!
У меня вопрос по SoftISE.Открываю оным программу,переписываю с дампа памяти побайтовую последовательнось и открыв в FARе через поиск ищу переписанную последовательность(хочу поменять условный переход),а такого сочитание символов нет.Я уже перепрововал три редактора кода-реультат тот же.Подскажите пожалуйста как таки мне найти искомую последовательнось?
Заранее спасибо.
Вопрос отправлен: 03.11.2004, 22:58
Отправитель: Sasha (botsman71@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает DSota
Здравствуйте, Sasha!
Скорее всего программа самораспаковывающаяся, и данная последовательность
хранится в файле в сжатом виде. То есть программа сжата, а потом в памяти
перед запуском распаковывается. Нужно сначала ее распаковать (например с
помощью PkLite), а уже потом смотреть.
Еще программа может быть защищена от изменений.
Ответ отправлен: 04.11.2004, 09:44
Отправитель: DSota
Отвечает Evils_Interrupt
Доброе время суток, Sasha!
Посмотри в секции кода(в файле) какие параметры. сделай такими какими делает компилятор(к примеру С++) и посмотри где будет ошибка. НЕ исключено, что у тебя самомодифицирующийся код
Ответ отправлен: 04.11.2004, 08:36
Отправитель: Evils_Interrupt
Вопрос № 5953 |
Допустим в регистре AX содержится результат арифметических операций (например число 2384 - целочисленное). Как вывести его на экран? Я знаю что нужно каждую цифру увеличить на 30h. Но как это сделеть на практике? Приведите листинг (если можно :-))
Вопрос отправлен: 04.11.2004, 00:07
Отправитель: Khanc
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Здравствуйте, Khanc!
читай Rusfaq Калайджана.
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 06.11.2004, 18:01
Отправитель: Евгений Иванов
Отвечает Evils_Interrupt
Здравствуйте, Khanc!
hex db '0123456789abcdef'
mov ebx,offset hex
mov al, число которое нужно перевести
xlat
переход к другому
Ответ отправлен: 04.11.2004, 08:42
Отправитель: Evils_Interrupt
Отвечает andre
Приветствую Вас, Khanc!
скажем что ты хочешь вывести содержимое только ах
тогда
Приложение:
Ответ отправлен: 04.11.2004, 10:57
Отправитель: andre
Отвечает Стас
Вообще в таких случаях, просто отвечают - читай рассылку.
Приложение:
Ответ отправлен: 04.11.2004, 14:45
Отправитель: Стас
Отвечает DSota
Доброе время суток, Khanc!
Пока число не кончится, делить его на 10 и выводить результат.
Приложение:
Ответ отправлен: 05.11.2004, 19:46
Отправитель: DSota
Вопрос № 5954 |
Здравствуйте! Где бы найти ключик к Горыныч Проф. 2.0? На http://crackspider.net и некоторых других - нету. Плиз.
Вопрос отправлен: 04.11.2004, 00:14
Отправитель: klim (bolt5@land.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает andre
Здравствуйте, klim!
www.crack.am
Ответ отправлен: 04.11.2004, 10:58
Отправитель: andre
Вопрос № 5955 |
Здравствуйте, здесь исходник, который патчит 10 байт файла. А как сделать,
чтобы можно было пропатчить подряд любое заданное кол-во байт?
Дайте пожалуйста исходники. И если можете, то и на memory patcher(патчит файл в памяти).
Приложение:
Вопрос отправлен: 05.11.2004, 07:59
Отправитель: monrus (monrus@bk.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, monrus!
делай цикл и вперёд!
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 06.11.2004, 18:03
Отправитель: Евгений Иванов
Отвечает DSota
Приветствую Вас, monrus!
1. В регистр CX записывается длина данных для записи в файл, которая вычисляется ниже (см. программу). Т. к. размер данных вычисляеться по адресу, то строка "Patchlen"
должна обязательно стоять сразу после "String". в противном случае будут записаны все данные, стоящие между этими двумя строками.
2. Это делаеться простым копированием из одного участка памяти в другое (см. программу).
Приложение:
Ответ отправлен: 05.11.2004, 10:24
Отправитель: DSota
Отвечает Стас
Здравствуйте, monrus!
>пропатчить подряд любое заданное кол-во байт
mov dx,offset String
mov cx,0ah ;<<<<<<<<<<<<Здесь 10 байт
int 21h
Место с которого нужно протатчить здесь:
mov ax,4200h
mov bx,handle
mov cx,0000h ;<<<<
mov dx,0001h ;<<<< CX:DX=1 сейчас
int 21h
Если ты в такой простенькой проге разобраться не хочешь...
А в памяти патчить будет значительно сложнее.
Ответ отправлен: 05.11.2004, 13:52
Отправитель: Стас
Вопрос № 5956 |
Здравствуйте, уважаемые эксперты! Ответьте, пожалуйста на вопрос: как создать массив в памяти и работать с ним?
Вопрос отправлен: 05.11.2004, 08:23
Отправитель: unc
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Доброе время суток, unc!
выделяй место под требуемое количество байтов ;)
и работай.
например:
Call GlobalAlloc, GPTR, 7*4 ;окно-объект
or eax, eax
jz @@exit_err
mov [@@Win], eax
mov eax, [@@NumSrc] ;массив о соответствии контролей и окон
push eax
shl eax, 3
add eax, 4
Call GlobalAlloc, GPTR, eax
or eax, eax
pop ecx
jz @@exit_err
xchg esi, eax
mov [esi], ecx
push edi
mov edi, [@@Win]
mov eax, esi
stosd
mov eax, [@@qWin]
stosd
mov eax, [@@arrMixers]
stosd
mov eax, [@@NumMixer]
stosd
mov eax, [@@record]
stosd
pop edi
add esi, 4
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 06.11.2004, 18:04
Отправитель: Евгений Иванов
Отвечает DSota
Приветствую Вас, unc!
1. Массив в памяти создаеться командой дублирования. Например:
massiv db 100 dup (01,02)
Число в скобках повоториться 100 раз, т.е. в памяти создадутся данные: 01,02,01,02,01,02,01,02,01,02,...
2. Работать с ним можно по адресу элемента, но адрес элемента массива придется вычислять самому.
например, получить регистр AX пятый элемент предыдущего массива (его размер 2 байта):
mov bx,2 ;размер массива
mov ax,5 ;номер элемента
mul ax ;получиние адреса элемента
mov ax,word ptr massiv[bx]; в АХ - нужный элемент
Ответ отправлен: 05.11.2004, 10:05
Отправитель: DSota
Вопрос № 5957 |
Доброе время суток уважаемые профессионалы.
На кнопку Game порта подаем прямоугольные импульсы
Напишите программу для определения
периода или частоты этих импульсов с выводом на экран
монитора. Частота импульсов от 100 до 5000Гц.
Спасибо.
Вопрос отправлен: 06.11.2004, 20:56
Отправитель: Лев
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, Лев!
Напишем. а что дальше?
ты чему-то научишься, думаешь?!
ха.
вряд ли...
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 07.11.2004, 19:43
Отправитель: Евгений Иванов
Отвечает _vt
Добрый день, Лев!
====
PORT 0200-020F - Game port reserved I/O address space
0200-0207 - Game port, eight identical addresses on some boards
0201 R- read joystick position and status (see #P0542)
0201 -W fire joystick-s four one-shots
0201 RW gameport on mc-soundmachine, mc 03-04/1992: Adlib-compatible,
Covox "voice master" & "speech thing" compatible soundcard.
(enabled if bit1=1 in PORT 038Fh. Because it is disabled on
power-on, it cannot be found by BIOS) (see PORT 0388h-038Fh)
Bitfields for joystick position and status:
Bit(s) Description (Table P0542)
7 status B joystick button 2 / D paddle button
6 status B joystick button 1 / C paddle button
5 status A joystick button 2 / B paddle button
4 status A joystick button 1 / A paddle button
3 B joystick Y coordinate / D paddle coordinate
2 B joystick X coordinate / C paddle coordinate< br> 1 A joystick Y coordinate / B paddle coordinate
0 A joystick X coordinate / A paddle coordinate
====
Здесь есть всё, чтобы самостоятельно написать программу. Вот и займись, а я тебе подскажу, если нужна будет помощь.
* Origin : I′d like to change the world, but I have no source code
Ответ отправлен: 07.11.2004, 14:25
Отправитель: _vt
Отвечает andre
Здравствуйте, Лев!
не плохо загнул я думаю учи асм братишка
Ответ отправлен: 06.11.2004, 23:09
Отправитель: andre
Вопрос № 5958 |
Хотел бы изучить ассемблер для программирования микроконтроллеров PIC. Имеется ли для этого специальная разновидность ассемблера или же надо браться за изучения ассемблера, представленного в Вашей рассылке?
Спасибо.
Вопрос отправлен: 07.11.2004, 04:26
Отправитель: Яков
[Следующий вопрос >>] [Список вопросов]
Отвечает andre
Здравствуйте, Яков!
естественно это своеобразный асм инфу по нему можешь найти на www.microchip.ru
www.gaw.ru
успеха
Ответ отправлен: 07.11.2004, 09:53
Отправитель: andre
Отвечает _vt
Добрый день, Яков!
Принцип работы ассемблера на любом процессоре, будь то x86-based, или т.н. PIC-контроллер - одинаков. Различается система команд процессора. Если ты будешь уметь писать программы на ассемблере под 80х86 процессор, поймешь основные принципы - будет легко выучить любой другой ассемблер.
* Origin : I′d like to change the world, but I have no source code
Ответ отправлен: 07.11.2004, 13:30
Отправитель: _vt
Отвечает Евгений Иванов
Здравствуйте, Яков!
скачивай книги и программы с сайта www.microchip.ru/
* EMan: -=- И легко перо, да на крышу не закинешь. =-=
Ответ отправлен: 08.11.2004, 18:47
Отправитель: Евгений Иванов
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (24) C / C++ (16) Perl (6) Builder / Delphi (14) Pascal (18) Basic / VBA (8) Java / JavaScript (6) PHP (16) Криптография (6) WinAPI (17) Радиоэлектроника (12) |
Пользователю Windows 95/98/Me (40) Windows NT/2000/XP (61) "Железо" (39) Поиск информации (20) |
Администратору Windows NT/2000/XP (37) Linux / Unix (17) |
Юристу Гражданское право (8) Семейное право (5) Трудовое право (7) КоАП (5) |
Отправить вопрос всем экспертам выбранной рассылки.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.faq |
Отписаться |
В избранное | ||