Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
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
Отписаться

В избранное