Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||