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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 608
от 05.08.2003, 11:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3849
Отправлено ответов: 11316
Активность: 293.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 124.76
URL: Методы оптимизации работы ПК
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.31
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 127.19
URL: Эхоконференция по вирмейкингу
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.06
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 111.63
[Подробней >>]
Eugene
Статус: Профессиональный
Общий рейтинг: 106.79
URL: мощный файловый архив
[Подробней >>]
 
Евгений Иванов
Статус: Опытный
Общий рейтинг: 144.14
URL: Super Assembler Software
Телефон: +7 905 6601206
[Подробней >>]
dimka
Статус: Начальный
Общий рейтинг: 135.48
[Подробней >>]
WerWolf
Статус: Начальный
Общий рейтинг: 119.23
[Подробней >>]
 
_vt
Статус: Профессиональный
Общий рейтинг: 120.28
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 121.32
URL: мой сайт
[Подробней >>]
getoff
Статус: Начальный
Общий рейтинг: 114
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.82
URL: Программирование
[Подробней >>]
Hangatyr
Статус: Опытный
Общий рейтинг: 114.01
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 3826. Я по поводу вопроса 3818. Я имел в виду как поиздеваться над машиной средствами ассемблера?... (ответов: 3)
Вопрос № 3827. Здраствуйте Здраствуйте На самом деле очень интересно !!!!!! Но я хочу понять шестнадцатеричную ... (ответов: 8)
Вопрос № 3828. Здравствуйте,друзья!Подскажите плиз.Что значит стековая команда push,xxxx где xxxx какое либо число.... (ответов: 12)
Вопрос № 3829. Приветствую, Эксперты. Простите за возможный off-topic... -> Можно ли где-нибудь в и-нете достать к... (ответов: 2)

Вопросов: 4, ответов: 25


 Вопрос № 3826

Я по поводу вопроса 3818. Я имел в виду как поиздеваться над машиной средствами ассемблера?



Вопрос отправлен: 31.07.2003, 16:21
Отправитель: Torvic

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Добрый день, Torvic!
Берешь учебник по ассемблеру и давай его... Шарашить..
Ну ладно. Кроме шуток: если интересуют методы убиения, то исследуйте исходники различных вирусов. Мой любимый CIH (он же "Чернобыль") можно скачать по адресу:
http://kalaidjian.narod.ru/vir/cih.rar
Список остальных вирусов, которые можно скачать с моего сайта, смотрите в архиве рассылки (2 письма-2 части списка)

Ответ отправлен: 31.07.2003, 18:50
Отправитель: Tigran K. Kalaidjian


Отвечает Ayl

Здравствуйте, Torvic!
А на кой ляд это тебе надо. Пытаюсь рассуждать логично. Собственную машину убивать вряд ли захочешь. Значит - чужую. То есть, либо просто хочешь убить, либо пишешь вирус. Ну а на это я скажу - извини, друг! Справляйся сам.

Ответ отправлен: 31.07.2003, 16:39
Отправитель: Ayl


Отвечает Maverick

Приветствую Вас, Torvic!
О есть масса способов, перешей биос, поменяй пароль в биосе, затри FAT и MBR, напиши вирус, который это все реализовывает.
Можно просто с помощью дрели и пасатижев.


Ответ отправлен: 03.08.2003, 11:13
Отправитель: Maverick


 Вопрос № 3827

Здраствуйте
Здраствуйте
На самом деле очень интересно !!!!!!
Но я хочу понять шестнадцатеричную систему как это так я хочу понять так как не поняв это элементарную штуку мне будет сложно дальше учится 1*16=16 а у вас 1 х 16 = 10; т.д.
10 х 16 = 100;
100 х 16 = 1000 и т.д. чтоб понять это прочитывал но не могу понять
заранее спасибо



Вопрос отправлен: 31.07.2003, 18:27
Отправитель: Makc

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, Makc!
10*16 не равно 100, а равно A0 :) и так далее... :)
все просто. Вместо 10 чисел у тебя 16. 16 в 10-ой равно 10 в 16-ой. 17 равно 11, 18 равно 12... 31 равно 1F, а 32 равно 20 и так далее, 256 будет равно 100

Ответ отправлен: 01.08.2003, 08:11
Отправитель: vitya


Отвечает Ayl

Здравствуйте, Makc!
Брр... Что-то у тебя не то. В 10-й с.с.:
1*16=16, 10*16=160, 100*16=1600.
В 16-й с.с.:
1*16h=16h, 10h*16h=160h, 100h*16h=1600h.
Давай разбираться, что тебе не ясно.
1. 10-я с.с. - это позиционная система с основанием 10
2. 16-я с.с. - это позиционная система с основанием 16
Что такое позиционная с.с.? Это такая система, при которой величина каждой цифры зависит от ее положения в числе. Это положение называют разрядом. Как это выглядит? А вот так.
Число в любой позиционной с.с. с основанием N записывается следующим образом:
D = A(p)A(p-1)...A(2)A(1)A(0), где A(i) - цифры данной системы от 0 до N-1 (если не хватает цифр, то обычно используют буквы латинского алфавита по порядку, т.е. A = 10, B = 11, ..., Z = 35).
Вес цифры в i-м разряде (i=0..p) равен N^i. Т.е. в десятичной с.с. данное число представляет собой следующий многочлен:
D(10)=A(p)*N^p+A(p-1)*N^(p-1)+ ... +A(2)*N^2+A(1)*N+A(0)
Обратный перевод из 10-й с.с. (D) в с.с. с основанием N:
1. Делим с остатком число D на N: D=D1*N+A(0)
2. Делим D1 на N с остатком: D1=D2*N+A(1)
3. Продолжаем тем же способом, пока Dp не станет меньше N:
Dp=A(p)
В результате получаем число в с.с. с основанием N:
D = A(p)A(p-1)...A(2)A(1)A(0).


Ответ отправлен: 31.07.2003, 18:46
Отправитель: Ayl


Отвечает Dark_Lord

Приветствую Вас, Makc!
Ну, во-первых, не 1*16=10, а 01h*10h=10h, так как ты неправильно записал первый пример, то второй получился в двойне неправильный, так как
10 *16 =0A0h=160
10h*16 =100h=256
10h*16h=160h=352
, где "h" после числа обозначает, что число находится в 16-ричной системе. Поэтому, то что ты написал неправильно!

Ответ отправлен: 01.08.2003, 18:31
Отправитель: Dark_Lord


Отвечает Eugene

Приветствую Вас, Makc!
Естественно, трудно понять, если рассматриваешь либо неполные данные, либо ошибочные. Как тебе уже рассказали, 16-чная - это позиционная система счисления. Например 123h при переводе в обычную 10-чную будет равно 3*16^0 + 2*16^1 + 1*16^2 = 3*1 + 2*16 + 1*256 = 291. Чтобы лучше понять эту систему надо начать с 2-чной системы. А то, что ты привёл в качестве примера не содержит жизненно важной информации. При правильном написании это выглядит так:
1 x 16 = 10h
10h x 16 = 100h
100h x 16 = 1000h
Там, где стоит буква h, там 16-чные числа, где не стоит, там 10-чные.
Так как 16 = 10h, то:
1 x 10h = 10h
10h x 10h = 100h
100h x 10h = 1000h

Ответ отправлен: 01.08.2003, 10:06
Отправитель: Eugene


Отвечает Maverick

Приветствую Вас, Makc!
Так "цифр" то тоже 16
1
1+1=2(2)
.....
8+1=9(9)
9+1=A(10)
A+1=B(11)
B+1=C(12)
C+1=D(13)
D+1=E(14)
E+1=F(15)
F+1=10(16)
1 х 16 = 10
(dec) (dec) (hex)
Ну и что не понятно? Ты же пользуешся 12ричной сиситемой... это механические часы.

Ответ отправлен: 03.08.2003, 11:13
Отправитель: Maverick


Отвечает Евгений Иванов

Добрый день, Makc!
16d = 10h !
10h * 16h = 160h
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F


Ответ отправлен: 01.08.2003, 01:30
Отправитель: Евгений Иванов


Отвечает dimka

Добрый день, Makc!
Смотри:



десят шестнад

Приложение:

Ответ отправлен: 01.08.2003, 11:37
Отправитель: dimka


Отвечает WerWolf

Здравствуйте, Makc!
Значит так Makc, ты немного не правильно написал....
Давай разберём всё по порядку...
В нашей системе счисления 10 цифр... 0,1,2 ... 9. Так.
В шеснадцатиричной - 16, так?? 10 цифр... а где взять ещё 6 цифр, на их замену мы ставим символы латинского алфавита т.е. A,B,C,D,E,F. Значит теперь у нас есть все 16 цифр.
Тепереь смотри как мы считаем в нашей системе счисления, 1+1=2, 2+1=3.... 9+1=10 - десять так, а если 10 заменить на A, то получим 9+1=A, И продолжая аналогию A+1=B, B+1=C, C+1=D, D+1=E, E+1=F, F+1=????
Вернёмся к нашим предкам, у них было 10 пальцев (как и у нас в прочем) так вот когда пальци на руках кончались считали пальци на нагах, отсюда вывод что максимум мы можем посчитать 20 предметов, а если счиатать так, считаем пальци на руках как толко насчитали 10 то загибаем один на ноге в признак того что один десяток мы уже посчитали, если ещё насчитали десять предметов то загибаем ещё один палец на ноге, пусть к примеру мы считали 27 предметов, это значит что у нас загнуто два пальца на ноге и семь на руке.. т.е. два десятка и пять едениц... А теперь представь инопланетянина у которого 8 пальцев на кажлой руке и ему надо посчитать 27 предметов он один раз загнул 16 пальчцев на руках, потом загнул 27-16=11 пальцев на руке т.е. у него 1 шеснадцатка(у нас ьбы была десятка) и 11 едениц, так как одинадцать мы заменили на B, то у него получиться чило 1B.
Теперь к простой математике... число 123 - означает что у нас одна сотня, два десятка и одна тройка.. Теперь этоже число в шеснадцатеричной системе 7B - это означает что у нас 7 шеснадцаток и 11 едениц... Т.е. 123 = 100*3 + 2*10 + 3, с другой стороны 7B = 16*7 + B = 16*7 + 11 = 123. Всё просто....
Вспомни чему тебя учили гдето во втором или может в третьем класе, заставляя раскладывать числа на сотни и десятки, а возможно даже и на тысячи... Вот от сбда и получаеться что 1 * 16 (десятичное) = 10 - шеснадцатиричное, Главное понять что в десятичной 10 - это десять, а в шеснадцатиричной 10 - это шеснадцать...
Я старался рассказать по понятней, но не знаю точно как это у меня получилось...


Ответ отправлен: 01.08.2003, 11:40
Отправитель: WerWolf


 Вопрос № 3828

Здравствуйте,друзья!Подскажите плиз.Что значит
стековая команда push,xxxx где xxxx какое либо число.
Если втолкнуть в стек xxxx то какой в этом смысл.
Yury



Вопрос отправлен: 31.07.2003, 20:22
Отправитель: Yury

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Доброе время суток, Yury!
В этом такой же смысл, как и во вталкивании в стек чего-либо другого :-)
Эта команда появилась на процессорах 80186 и является очень полезной. К примеру, вы хотите обратиться к сегменту памяти 0B800h:0000h. Без этой команды это выглядит так:
mov ax, 0b800h
mov es, ax
и выполняется долго - не один такт, а также задействует дополнительный регистр. Теперь проще:
push 0b800h
pop es
Гораздо быстрее, красивше, никаких дополнительных регистров!...:-))

---===*** E-Man 1.4: I really need in 1.5... Help me!!!***===---


Ответ отправлен: 01.08.2003, 10:06
Отправитель: _vt


Отвечает vitya

Здравствуйте, Yury!
например передача константы в функцию по значению...

Ответ отправлен: 01.08.2003, 08:36
Отправитель: vitya


Отвечает Broken Sword

Добрый день, Yury!
смысл в том чтобы потом командой pop xxxx его оттуда достать. Если ты в нематериальном смысле спорсил (ну типа в чем смысл push, все равно все умрем) то тогда действительно не знаю что сказать...

Ответ отправлен: 31.07.2003, 21:04
Отправитель: Broken Sword


Отвечает Dark_Lord

Приветствую Вас, Yury!
Во-первых чтоб загрузить сегментный регистр можно использовать либо другой регистр либо стек, тоесть чтоб загрузить в es 0A000h нужно слелать следующее:
push 0A000h
pop es
Во-вторых, для нередачи параметров процедуре Windows, всякие флаги или просто значения!

Ответ отправлен: 01.08.2003, 18:34
Отправитель: Dark_Lord


Отвечает Maverick

Доброе время суток, Yury!
Просто ты его от туда всегда можешь взять :) Это очень быстро и занимает мало байт.
Так же можно пропихнуть значение в сегментный регистр.
Вместо:
mov ax,0m800h
mov es,ax
Можно так:
push 0b800h
pop es
В винде же, параметры функциям передаются через стек.


Ответ отправлен: 03.08.2003, 11:13
Отправитель: Maverick


Отвечает getoff

Доброе время суток, Yury!
push xxxx - поместить в сек число хххх;
если поместить число в стек оно там будет находиться (ЛОГИКА!)
в принципе стек очень полезная вещь...из-за организации памяти FIFO (first in first out) в некоторых алгоритмах вещь незаменмая (например разбор мат выражений). В языках высокого уровня приходиться самому его организовывать - САКС. В ассемблере он есть всегда. Через него передаються параметры в подпрограммы и обратно. Смысл в том что в вершине стека будет лежать ваше число и все......НО потом его можно выпихнуть в адрессный регистр (напрямую низя)

Ответ отправлен: 31.07.2003, 23:34
Отправитель: getoff


Отвечает Tigran K. Kalaidjian

Приветствую Вас, Yury!
Смысл в том, что можно не использовать часть регистров для хранения промежуточных данных. Если у нас есть есть данные и нам надо их сохранить их до поры, до времени, то запихнем их в стек:
push ax
а когда они нам понадобится вновь - вытолкнем в нужный регистр, например:
pop cx
А вообще советую почитать книгу О.Калашникова "Ассемблер? Это просто!" - там все подробно описано.
Если какие-либо вопросы остались, пишите на kalaidjian@pochtamt.ru

Ответ отправлен: 31.07.2003, 23:36
Отправитель: Tigran K. Kalaidjian


Отвечает Евгений Иванов

Здравствуйте, Yury!
1. ret делаешь и переходишь на этот адрес.
2. занести в сегментный регистр сегмент.
3. передать параметр подпрограмме.
4. да много ли чего ещё?!



Ответ отправлен: 01.08.2003, 01:30
Отправитель: Евгений Иванов


Отвечает Bob Johnson

Здравствуйте, Yury!
> то значит стековая команда push,xxxx
Помещение числа в стек с последующим декрементированием указателя.
> Если втолкнуть в стек xxxx то какой в этом смысл
Это может быть адрес возврата, параметр или просто число, которое сохраняется туда временно. Также таким способом можно заполнять данные в памяти (может применятся при защите от отладки) и т.д.

* EMan1.5: ---===*** The hell we've created ourselves ***===---


Ответ отправлен: 01.08.2003, 10:49
Отправитель: Bob Johnson


Отвечает Ayl

Доброе время суток, Yury!
push imm16 (imm32 для 32-хразрядных программ) - записывает в стек указанное значение. Используется на процессорах, начиная с 80186. TASM (и другие компиляторы, по-моему, тоже) при использовании набора команд 8086 (без указания директивы .186 и подобных) генерирует специальный код (ок. 10 байт), который эмулирует это действие.
Для чего используется? Чаще всего, чтобы поместить в сегментный регистр значение, не используя других регистров. В линейке x86 нет команды mov sreg, imm16, только mov sreg, reg16. Но зато есть команда pop sreg.
Соответственно, чтобы, например, загрузить в ES сегмент видеопамяти в текстовом режиме, можно использовать следующую последовательность:
push 0b800h
pop es
Мало того, что этот код не использует других регистров, так он еще и на 1 байт меньше, чем такой:
mov ax, 0b800h
mov es, ax
за счет того, что pop es занимает 1 байт, а mov sreg, reg16 - два.
Еще вариант - выполнение дальнего перехода по фиксированному адресу. Например, чтобы под ДОС выполнить перезагрузку, можно написать так:
push 0f000h
push 0fff0h
retf
Правда, это можно сделать и с помощью такой последовательности:
db 0eah ; код команды JMP FAR
dw 0fff0h ; смещение точки перехода
dw 0f000h ; сегмент точки перехода


Ответ отправлен: 01.08.2003, 11:08
Отправитель: Ayl


Отвечает dimka

Добрый день, Yury!
......
push xxxх
pop es
.....вместо:
mov ax,xxxx
mov es,ax
...
По-моему красивее ....

Ответ отправлен: 01.08.2003, 11:24
Отправитель: dimka


Отвечает WerWolf

Здравствуйте, Yury!
Хмм... интересный вопрос... Ну вообще к примеру все параметры передаваемые в процедуру в основном передаються через стек. А вообще стек используеться для временног хранения переменных. И к примеру ты не сможешь в регистр es занести непосредственное значение, зато можно воспользоваться командами:
push xxxx
pop es
Если ты не видишь в этом смысла то почитай литерературу про использование стека, там должно быть всё нормально описано....

Ответ отправлен: 01.08.2003, 11:40
Отправитель: WerWolf


 Вопрос № 3829

Приветствую, Эксперты.
Простите за возможный off-topic...
-> Можно ли где-нибудь в и-нете достать книжку Мэта Питрека "Системное програмирование в windows 95", либо что-то другое по теме, желательно на русском ( Рихтер есть :)
Спасибо!



Вопрос отправлен: 01.08.2003, 08:26
Отправитель: shade

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, shade!
http://dore.on.ru/library/pietrekbook.pdf - если не устарела...

---===*** E-Man 1.4: I really need in 1.5... Help me!!!***===---


Ответ отправлен: 01.08.2003, 10:06
Отправитель: _vt


Отвечает Hangatyr

Добрый день, shade!
Matt Pietrek. "Windows 95 System programming secrets":
http://cs.mipt.ru/docs/comp/eng/os/win32/win95_sys_progr_secr/main.pdf
А вот насчет русского не знаю - меня и английский вполне устраивает.


Ответ отправлен: 01.08.2003, 09:36
Отправитель: Hangatyr



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (36)
C / C++ (24)
Perl (3)
Builder / Delphi (19)
Pascal (23)
Basic / VBA (13)
Java / JavaScript (11)
PHP (9)
Криптография (9)
WinAPI (14)
Пользователю
Windows 95/98/Me (49)
Windows NT/2000/XP (54)
"Железо" (42)
Поиск информации (28)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (11)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (7)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное