Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 752
от 21.07.2004, 19:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5627 Отправлено ответов: 15241 Активность: 270.8 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Стас Статус: Опытный Общий рейтинг: 126.21 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.43 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.3 [Подробней >>] |
Tigran K. Kalaidjian Статус: Профессиональный Общий рейтинг: 193 URL: Оптимизация ПК [Подробней >>] |
Dragoon Статус: Доверительный Общий рейтинг: 107.86 [Подробней >>] |
bocha Статус: Опытный Общий рейтинг: 133.12 [Подробней >>] |
Горячев Игорь Статус: Начальный Общий рейтинг: 112.67 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 136.63 URL: Программирование [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.56 [Подробней >>] |
PavPS Статус: Начальный Общий рейтинг: 117.85 [Подробней >>] |
flasher Статус: Доверительный Общий рейтинг: 105.51 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5600. Привет. Я начинающий. Только взялся за первый урок и вот такая ошибка в таком примере: CSEG segment ... (ответов: 4)
Вопрос № 5601. Здравствуйте, уважаемые эксперты! Подкинте алгоритмик рисования линии на Ассемблере, ну типо алгорит... (ответов: 5)
Вопрос № 5602. Привет всем! У меня 2 вопроса. 1)Как удалить саму себя?(я так понял нет такой функции, типа: DeleteM... (ответов: 5)
Вопрос № 5603. Здравствуйте, уважаемые эксперты! Программа должна читать данные из com-порта и выводить их на экран... (ответов: 1)
Вопрос № 5604. Доброе время суток! У меня возник вопрос слудающего содержания. Как вызвать BSOD ("синий экран ... (ответов: 1)
Вопрос № 5605. Решил изучать асм. Вот как и все, наверное, начал с регистров. Только плохо понял. Объяснить пожалуй... (ответов: 5)
Вопрос № 5606. Здравствуйте, уважаемые Эксперты. Не могли бы вы мне сказать, как можно послать на аську сообщение..... (ответов: 3)
Вопрос № 5607. Доброго дня ув.Экспкрты.. Вопросик такой… Как можно программно отправить сообщение на ICQ (корп)? Ка... (ответов: 1)
Вопросов: 8, ответов: 25
Вопрос № 5600 |
Привет. Я начинающий. Только взялся за первый урок и вот такая ошибка в таком примере:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
1. На masm
Assembling: 1.asm
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/z2
"1.obj"
"1.exe"
NUL
LINK : warning LNK4044: unrecognized option "z2"; ignored
1.obj : warning LNK4033: converting object format from OMF to COFF
1.obj : fatal error LNK1190: invalid fixup found, type 0x0001
2. На tasm:
TASM Assembler. Version 3.2 September, 2001.
Copyright (C) 2001 Squak Valley Software
tasm: pass 1 complete.
1.asm line 0001: Label not found: (CSEG)
1.asm line 0001: label value misalligned. (CSEG)
1.asm line 0001: unrecognized instruction. (CSEG)
1.asm line 0002: Label not found: (org)
1.asm line 0002: label value misalligned. (org)
1.asm line 0002: unrecognized directive. (org)
1.asm line 0006: unrecognized instruction. (MOV)
1.asm line 0007: unrecognized instruction. (MOV)
1.asm line 0008: unrecognized instruction. (INT)
1.asm line 0010: unrecognized instruction. (INT)
1.asm line 0012: Label not found: (Message)
1.asm line 0012: label value misalligned. (Message)
1.asm line 0012: unrecognized instruction. (Message)
1.asm line 0014: Label not found: (CSEG)
1.asm line 0014: label value misalligned. (CSEG)
1.asm line 0014: unrecognized instruction. (CSEG)
1.asm line 0015: Label not found: (end)
1.asm line 0015: label value misalligned. (end)
1.asm line 0015: unrecognized instruction. (end)
line 0015: No END directive before EOF.
Объясните пожалуйста.
Вопрос отправлен: 15.07.2004, 02:10
Отправитель: Ян
[Следующий вопрос >>] [Список вопросов]
Отвечает Стас
Доброе время суток, Ян!
У тебя вероятно "старый" MASM и "новый" LINK (судя по сообщению). С "родным" компилится без проблем:
c:>ml /AT l.asm
Assembling: l.asm
Microsoft (R) Segmented-Executable Linker Version 5.13
Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
Object Modules [.OBJ]: l.obj/t
Run File [l.com]: "l.com"
List File [NUL.MAP]: NUL
Libraries [.LIB]:
Definitions File [NUL.DEF]: ;
==========================================================
Что касается TASMа - то же самое - он такой "древний" что требует "правильного" написания пограммы. А "правильно" это так: если первый символ строки не пробел значит это метка.
Соответсвенно все твои команды вопринимаются как метки причем неправильные. TASM 4.1 уже компилит без проблем.
Ответ отправлен: 16.07.2004, 00:24
Отправитель: Стас
Отвечает Евгений Иванов
Здравствуйте, Ян!
в TASM-е нужно писать сначала директиву, потом параметры.
Что правильно, нежели у других.
Бывай.
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 16.07.2004, 11:30
Отправитель: Евгений Иванов
Отвечает _vt
Приветствую Вас, Ян!
1) Скачай более старую версию link.exe, которая умеет создавать com-файлы. Например, у меня при вызове ml /AT hello.asm происходит следующее:
Assembling: hello.asm
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
Object Modules [.obj]: hello.obj /t
Run File [hello.com]: "hello.com"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
2)
> TASM Assembler. Version 3.2 September, 2001. Copyright (C) 2001 Squak Valley Software
Какой-то странный у тебя TASM! Вообще-то, должно быть так:
Turbo Assembler Version 5.0r Copyright (c)
1988, 1996 Borland InternationalSerial No: Tester:
Assembling file: hello.ASM
Error messages: None
Warning messages: None
Passes: 1
Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 15.07.2004, 20:51
Отправитель: _vt
Отвечает Tigran K. Kalaidjian
Приветствую Вас, Ян!
У меня TASM не выдаёт ошибок. Обновите компилятор и линкер к нему родной поставьте.
Ответ отправлен: 16.07.2004, 21:20
Отправитель: Tigran K. Kalaidjian
Вопрос № 5601 |
Здравствуйте, уважаемые эксперты!
Подкинте алгоритмик рисования линии
на Ассемблере, ну типо алгоритма Брэзенхама.
Заранее благодарен!!!
Вопрос отправлен: 15.07.2004, 21:37
Отправитель: Vitaliy (Lytonin@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Dragoon
Здравствуйте, Vitaliy!
Есть в книге Р.Уилтона "Видеосистемы персональных компьютеров"
Ответ отправлен: 17.07.2004, 12:04
Отправитель: Dragoon
Отвечает bocha
Доброе время суток, Vitaliy!
Берешь тот самый алгоритм Брэзенхама, и каждую его строку переводишь в инструкции асма, алгоритм не зависит от используемого языка программирования. Вот когда возникнет конкретный вопрос по реализации этого алгоритма, тогда и задавай его, а исходник в любом поисковике найти можно.
Приложение:
Ответ отправлен: 16.07.2004, 04:51
Отправитель: bocha
Отвечает Евгений Иванов
Доброе время суток, Vitaliy!
;IN->w[KX],w[KY]-первая точка; CX,DX-вторая точка; b[INK]-цвет;
proc Line ;=l1 =======================================
pusha
mov bx,101h
mov ax,cx
sub ax,wptr [bp+KX-dat]
jnc m10l1
mov bh,-1
neg ax
m10l1:
mov cx,ax
push dx
mov dx,3CEh
mov ax,205h
out dx,ax
pop ax
sub ax,wptr [bp+KY-dat]
jnc m20l1
mov bl,-1
neg ax
m20l1:
mov dx,ax
line_all:
mov wptr [bp+Zip1-dat],bx
cmp cx,dx
jnc m25l1
mov di,cx
sub bh,bh
jmp m30l1
m25l1:
or cx,cx
jz m90l1
mov di,dx
mov dx,cx
sub bl,bl
m30l1:
mov si,dx
mov ax,dx
shr ax,1
m33l1:
add ax,di
jc m35l1
cmp ax,si
jc m37l1
m35l1:
sub ax,si
mov cx,ax
push cx dx
mov cx,wptr [bp+Zip1-dat]
jmp m40l1
m37l1:
mov cx,ax
push cx dx bx
pop cx
m40l1:
movsx dx,cl
movsx cx,ch
add dx,wptr [bp+KY-dat]
add cx,wptr [bp+KX-dat]
mov wptr [bp+KX-dat],cx
mov wptr [bp+KY-dat],dx
push bx ;Рисуем точку
mov bx,cx
shr bx,3
imul ax,dx,Xmax/8
add bx,ax
mov al,[es:bx]
mov dx,3CEh
and cl,7
mov ax,8008h
shr ah,cl
out dx,ax
mov cl,bptr [bp+INK-dat]
mov [es:bx],cl
pop bx ;
pop dx cx
mov ax,cx
dec dx
jnz m33l1
m90l1:
mov dx,3CEh
mov ax,0FF08h
out dx,ax
jcxz $+2
mov ax,5
out dx,ax
popa
ret
endp
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 16.07.2004, 11:31
Отправитель: Евгений Иванов
Отвечает Tigran K. Kalaidjian
Здравствуйте, Vitaliy!
Hаиболее общий метод изобpажения линий включает использование алгоpитма Бpезенхама. Хотя основой в нем слyжит также отношение междy pасстояниями по кооpдинатам X и Y, в данном слyчае не тpебyется выполнять деление или вычисление чисел с плавающей точкой. Вместо этого, отношение междy значениями кооpдинат X и Y пpедставляется косвенным обpазом чеpез сеpии сложений и вычитаний. Основной идеей алгоpитма Бpезенхама, является pегистpация сpедних значений погpешностей междy идеальным положением каждой точки и той позицией на экpане дисплея, в котоpой она действительно отобpажается. Погpешность междy идеальным и действительным положением точки возникает ввидy огpаниченных возможностей технических сpедств. Фактически не сyществyет дисплеев с бесконечно большой pазpешающей способностью, и, следовательно, действительное положение каждой точки на линии тpебyет наилyчшей аппpоксимации. В каждой итеpации цикла вычеpчивания линии вызываются две пеpеменные xerr и yerr, котоpые yвеличиваются в зависимости от изменения величин кооpдинат X и Y соответственно. Когда значение погpешности достигает опpеделенного значения, оно вновь yстанавливается в исходное положение, а соответствyющий счетчик кооpдинат yвеличивается. Этот пpоцесс пpодолжается до тех поp, пока линия не бyдет полностью вычеpчена. Фyнкция line(), пpиведенная ниже, pеализyет этот метод. Перевод на ассемблер не доставляет труда, но несколько усложняет понимание.
Фyнкция mempoint() выполняет отобpажение точки на экpане теpминала – она описывается отдельно.
Приложение:
Ответ отправлен: 16.07.2004, 09:59
Отправитель: Tigran K. Kalaidjian
Отвечает Горячев Игорь
Доброе время суток, Vitaliy!
А чем тебя не устраивают кривые Безье, реализованные в WinAPI?
В общем виде кривые Безье описываются так (параметрическое описание с параметром t):
x = Px(t) = сумма по i от 0 до m следующих слагаемых:
число сочетаний из m по i умноженное на t в степени i умноженное на (1-t) в степени m-i умноженное на Xi (Xi - координата точек-ориентиров. Именно точками-ориентирами надо баловаться, чтоб получить сложную кривую)
y вычисляется аналогично, заменяя везде x на y
Надеюсь, все понятно :)
Геометрический алгоритм для кривой Безье:
Этот алгоритм позволяет вычислить координаты (x,y) точки кривой по параметру t.
1. Каждая сторона контура многоугольника, проходящего по точкам-ориентирам, делиться пропорционально значению t
2. Точки деления соединяются отрезками прямых и образуют новый многоугольник. Количество узлов нового многоугольника на единицу меньше, чем в предыдущем.
3. Стороны нового контура снова делятся пропорционально t, И так далее. Это продолжаеться до тех пор, пока не будет получена единственная точка деления. Эта точка и будет точкой кривой.
Да, 0<=t<=1
Удачи!
Ответ отправлен: 16.07.2004, 23:10
Отправитель: Горячев Игорь
Вопрос № 5602 |
Привет всем!
У меня 2 вопроса.
1)Как удалить саму себя?(я так понял нет такой функции, типа: DeleteMe :})
2)Как замутить определённое действие в обределённый день?
вот что я делаю:
.data
data db '1607',0
date db 'ddMM',0
gf dd ?
.code
push sizeof gf
push offset gf
push offset date
push 00h
push 00h
push 00h
call GetDateFormatA ;получаю дату
;сравниваю
mov edi,offset data
push edi
or ecx,-1
xor eax,eax
repnz scasb
mov esi,offset gf
pop edi
repz cmpsb
ja _G0
je _G0
на первый взгляд, вроде номано, но если data db '1607',0 поменять на data db '1508',0 - серавно будет выполнять действие _G0. Как разрешить эту проблему?
Благодарю заранее.
p.s.Tigran K. Kalaidjian, барев земляк ;)
Вопрос отправлен: 16.07.2004, 15:41
Отправитель: Flashik
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Добрый день, Flashik!
1. По теме есть хорошая статья в MSDN, написанная с умеренной долей юмора. В общем, наилучшый вариант - это использование bat-файлов. Только бат файл может беспрепятственно удалить себя (а также все, что нужно). Т.е. твоя программа создает бат файл и настраивает его на удаление этой программы, а после - самого себя.
Под 9х еще есть возможность выгрузить процесс с помощью FreeLibrary, после чего удалить (код при этом должен находиться в независимом участке памяти).
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 20.07.2004, 12:39
Отправитель: Bob Johnson
Отвечает Ayl
Здравствуйте, Flashik!
2. Вариантов 2. Первый - считать разницу между двумя датами и выполнять, если она равна 0 (долго и неудобно). Второй - изменить формат дат для сравнения. Например, поменять месяц и день. В таком формате даты будут упорядочены в течении одного года и 15 августа будет по-любому больше 16 июля. А в тво текущий алгоритм будет работать только в пределах одного месяца, т.к. при сравнении 15 августа (1508) и 16 июля (1607) будет обнаружено, что 6 > 5, т.е. 16 > 15, т.е. 1608 > 1507 (что правильно в числах), т.е. 16 июля > 15 августа (что неправильно). При обратном же порядке записи 8 > 7, т.е. 0815 > 0716 (что правильно в числах), т.е. 15 августа > 16 июля (что также правильно). Можно еще добавить год, тогда можно сравнивать любые даты.
Ответ отправлен: 19.07.2004, 13:47
Отправитель: Ayl
Отвечает Стас
Приветствую Вас, Flashik!
Держи. Но учти, что работает только под XP.
В 98 GetDateFormatA дату не возвращает.
Приложение:
Ответ отправлен: 18.07.2004, 23:58
Отправитель: Стас
Отвечает _vt
Добрый день, Flashik!
1) Запущенную под Windows программу саму из себя удалить нельзя.
2) Если уж ты пишешь под Винды на ассемблере, что само по себе неверно, то и продолжай использовать системные функции - в частности, для сравнения строк подойдет strcmp из msvcrt.dll. ИМХО, ошибаешься в алгоритме где-то.
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 19.07.2004, 05:05
Отправитель: _vt
Отвечает Tigran K. Kalaidjian
Barev Flashik, jan!
Ты еще не застал того момента, когда здесь 3-е haerey-экспертов по ассемблеру было!
1. Смотря откуда. В ДОС можно из памяти - забить всё nop'ами, с диска стандартными методами (если не ошибаюсь, функция 41h прерывания 21h). Под виндами - никак.
2. Поменяй формат даты на MMdd (ещё лучше ввести год) - ведь по-твоему 1601>1502, хотя по смыслу должно было быть наоборот: 16.01<15.02
P.S. напиши что-нибудь о себе на мой mail: kalaidjian@pochtamt.ru Я скоро уезжаю, но, думаю, смогу ответить.
Ответ отправлен: 19.07.2004, 22:03
Отправитель: Tigran K. Kalaidjian
Вопрос № 5603 |
Здравствуйте, уважаемые эксперты! Программа должна читать данные из com-порта и выводить их на экран и сохранять в файл. Не могли бы вы посмотреть, правильно ли она работает, а то мне нечего повесить на это порт. Буду признательна, если дадите какие-нибудь комментарии и рекомендации. Спасибо.
Приложение:
Вопрос отправлен: 16.07.2004, 16:58
Отправитель: volk
[Следующий вопрос >>] [Список вопросов]
Отвечает Стас
Доброе время суток, volk!
Ты сам запускал свою прогу? Дебаггил?
1) Если программа COM (на что указывает org 100h), то почему у тебя разные сегменты CS и DS? Если же EXE то зачем org 100h? У меня вместо сообщений белиберда.
(Привел к COM виду.)
2) Зашел в others, вывел сообщение и проверяешь AL. А чему равен AL? Откуда там что либо возьмется? Сначала положи...
(Исправил)
Дошел до проверки паритета, хорошо, положили в chet число, а дальше что? Вышел из проги...
(Исправил).
В skorost, так, косметика.
Еще, для COM порта (как и для котроллера прерываний) нужно разрешить перывания по приему.
(Исправил).
В open почему lea dx,path; add dx,2, а не lea dx,path+2?
Строка введеная через func 0ah int 21h заканчивается кодом 13(0dh), неужели ты думашь, что имя файла может содержать этот код?
(исправлено)
3) Ты открываешь файл для записи функцией 3d01h Int21h, а если его не существует? Нужно создавать 3ch int21h.
4) На конец файла лучше прыгнуть до прерываний. (перенес в процедуру OPEN)
Вообще не рекомендую делать файловые операции во время прерывания. Пиши в буффер, записывай потом.
(набросал на скорую руку)
5) Чтобы вывести один символ. Используй ah=2 int21h или, еще лучше, int29h.
(Исравлено).
Вообщем теперь работает. Проверено.
Ты хотел рекомендаций? Пожалуйста:
Возьми дебаггер в ручки и отладь все, что можно (кроме получения байта от COM порта, раз нет возможности).
Если не секрет зачем тебе все это?
Приложение:
Ответ отправлен: 18.07.2004, 17:48
Отправитель: Стас
Вопрос № 5604 |
Доброе время суток!
У меня возник вопрос слудающего содержания. Как вызвать BSOD ("синий экран смерти") в Windows 2000/XP? Следующий пародоксальный вопрос - как вывести компьютер из вызванного состояния например через 2 минуты? Можно "эмулировать" (т.е. подсунуть картинку с "экраном смерти"), но хотелось бы ПОЛНОЦЕННЫЙ BSOD. Если ответа на второй вопрос не находиться, то просто помогите с кодом для MASM | NASM для вызова экрана.
Заранее спасибо!
Вопрос отправлен: 17.07.2004, 10:40
Отправитель: ALx
[Следующий вопрос >>] [Список вопросов]
Отвечает _vt
Здравствуйте, ALx!
BSOD можно вызвать нажатием или эмуляцией нажатия Ctrl+Scroll Lock, если значение DWORD-ключа HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters - CrashOnCtrlScroll равно 1.
Вывести из BSOD систему можно только перезагрузкой.
Твой код на MASM должен внести указанный мной параметр в реестр, и только после перезагрузки системы можно будет вызвать BSOD.
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 19.07.2004, 05:11
Отправитель: _vt
Вопрос № 5605 |
Решил изучать асм.
Вот как и все, наверное, начал с регистров.
Только плохо понял.
Объяснить пожалуйста следущее
регистры
операнды
для чего служат
EAX
EBX
ECX
EDX
AX
BX
CX
DX
ESI
EDI
EBP
ESP
и др
сегменты
селекторы
DS
ES
GS
FS
и др
стек
адресацию
объясните чтоб и щкольнику было понятно, заранее благодарю
Вопрос отправлен: 17.07.2004, 16:26
Отправитель: Gift (Gift@udmlink.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает PavPS
Здравствуйте, Gift!
Постараюсь - как школьнику(1-й класс)!
Если будешь писать под винду, то с регистрами гараздо проше - ипользуй как хочешь. Под дос они чуть-чуть более специализированы, но на этом я останавливаться не будем.
Так вот, если представить, что Ты на каком-то языке пишешь прогу, и тебе нужно пару-тройку переменных, то ессно Ты их описываешь как-то. А в ASM - халява! Тут уже есть заранее определенные (ну или описаные) переменные. Эти переменные регистры. Если дальше проводить аналогию с переменными, то они глобальные.
Из перечисленых Тобой регистров, с префиксом "E" это 32-х битные (тип unsignet long).
Без префикса - 16-и битные.
Связь EAX и AX: EAX:=(16 бит)+(16 бит), где вторые 16 бит - это его младшая часть AX. Так же аналогично и с другими.
Вообще регистры бывают,грубо говоря, служебного назначения и общего.
Так например, EIP - указывает на следующую комманду. Изменив его на определенную величину мы, соотв-но, переместимся к другой комманде. После выполнения команды его проц сам авт-ки увеличивает.
ESP - указатель на вершину стека. Он показывает адрес, который будет использоваться каммандами push и pop. А стек, по-детски говоря, это стопка торелок. При закладывании нового элемента, он соотв-но кладется вверх стопки. При вытаскивании - берется сверху. Так например, если в стопке 10 тарелок, то чтобы достать самую нижнюю, Тебе надо снять первые 9 (чтобы не разбить) а потом 10-ю. Так вот он работает.
На остальные вопросы и многое другое Тебе более грамотно ответит ряд великолепных статей Broken Sword-а
http://www.wasm.ru/publist.php?list=24
Ответ отправлен: 17.07.2004, 17:15
Отправитель: PavPS
Отвечает Горячев Игорь
Добрый день, Gift!
Если это все объяснять, то целая книга получиться.
Попробуй книгу В. И. Юрова. И экспертам геммора меньше и тебе пользы больше :)
Ответ отправлен: 17.07.2004, 23:34
Отправитель: Горячев Игорь
Отвечает Tigran K. Kalaidjian
Приветствую Вас, Gift!
Почитай FAQ: http://kalaidjian.narod.ru/rusfaq.rar
Там будут книги и всё, что нужно.
Из справки Эдуарда Титова:
Регистр - это определенный участок памяти внутри самого процессора, от 8-ми до 32-х бит длиной, который используется для промежуточного хранения информации, обрабатываемой процессором. Некоторые регистры содержат только определенную информацию.
Регистры общего назначения - EAX, EBX, ECX, EDX. Они 32-х битные и делятся еще на две части, нижние из которых AX, BX, CD, DX - 16-ти битные, и деляется еще на два 8-ми битных регистра. Так, АХ делится на AH и AL, DX на DH и DL и т.д. Буква "Н" означает верхний регистр.
Так, AH и AL каждый по одному байту, АХ - 2 байта (или word - слово), ЕАХ - 4 байта (или dword - двойное слово). Эти регистры используются для операций с данными, такими, как сравнение, математические операции или запись данных в память.
Регистр СХ чаще всего используется как счетчик в циклах.
АН в DOS программах используется как определитель, какой сервис будет использоваться при вызове INT.
Регистры сегментов - это CS, DS, ES, FS, GS, SS. Эти регистры 16-ти битные, и содержат в себе первую половину адреса "оффсет:сегмент".
CS - сегмент кода (страница памяти) исполняемой в данный момент программы.
DS - сегмент (страница) данных исполняемой программы, т.е. константы, строковые ссылки и т.д.
SS - сегмент стека исполняемой программы.
ES, FS, GS - дополнительные сегменты, и могут не использоваться программой.
Регистры оффсета - EIP, ESP, EBP, ESI, EDI. Эти регистры 32-х битные, нижняя половина которых доступна как регистры IP, SP, BP, SI, DI.
EIP - указатель команд, и содержит оффсет (величину смещения относительно начала программы) на линию кода, которая будет исполняться следующей. То есть полный адрес на следующую исполняемую линию кода будет CS:ЕIP.
Регистр ESP указывает на адрес вершины стека (адрес, куда будет заноситься следующая переменная командой PUSH).
Регистр ЕВР содержит адрес, начиная с которого в стек вносится или забирается информация (или "глубина" стека). Параметры функций имеют положительный сдвиг относительно ЕВР, локальные переменные - отрицательный сдвиг, а полный адрес этого участка памяти будет SS:EBP.
Регистр ESI - адрес источника, и содержит адрес начала блока информации для операции "переместить блок" (полный адрес DS:SI), а регистр EDI- адрес назначения в этой операции (полный адрес ES:EDI).
Регистры управления - CR0, CR1, CR2, CR3. Эти 32-х битные регистры устанавливают режим работы процессора (нормальный, защищенный и т.д.), постраничное распределение памяти и т.д. Они доступны только для программ в первом кольце памяти (Kernel, например). Трогать их не следует.
Регистры дебаггера - DR0, DR1, DR2, DR3, DR4, DR5, DR6, DR7. Первые четыре регистра содержат адреса на точки прерывания, остальные устанавливают, что должно произойти при достижении точки прерывания.
Контрольные регистры - TR6, TR7. Используются для контроля постраничной системы распределения памяти операционной системой. Нужны только если вы собираетесь написать свою ОС.
Ответ отправлен: 17.07.2004, 18:16
Отправитель: Tigran K. Kalaidjian
Отвечает bocha
Здравствуйте, Gift!
Вам сперва необходимо почитать какой-нибуть учебник, и если по мере его изучения что-то становится непонятным, задавать вопрос. А этот вопрос тянет на несколько глав учебника(кто же в рассылке столько печатать будет). И нужно правильно формулировать вопрос, предварительно хорошенько обдумав его. Возьмем твой пример:
1.для чего служит eax
2.для чего служит ax
уже из одного этого разделения вопроса(регистр-то один) видно, что ты вообще не читал никакой литературы по предмету изучения, либо не обдумывал его когда задавал вопрос. Зная, что это один и тот же регистр, сам собой напрашивается вопрос: а дело случайно не в размере операндов и разрядности сегментов? Далше можно посмотреть опять же учебник, и вопрос возможно решится сам собой. Учись прежде всего работать с литературой, которая имеется под рукой.
Ответ отправлен: 18.07.2004, 04:47
Отправитель: bocha
Отвечает _vt
Доброе время суток, Gift!
Для этого есть книжки. Задавай вопросы по непонятным местам, а не по системе в целом! ;-)
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 19.07.2004, 05:11
Отправитель: _vt
Вопрос № 5606 |
Здравствуйте, уважаемые Эксперты.
Не могли бы вы мне сказать, как можно послать на аську сообщение...? через апи или длл....
может ф-ции какие нить есть?
или может можно длл-эшку аськину потягать?
А может у кого и исходники есть... :)
Заранее спасибо...
Вопрос отправлен: 17.07.2004, 18:08
Отправитель: pAcU (pacu@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает flasher
Здравствуйте, pAcU!
на fasm'е в инете были исходники..., но у вы урл не помню... :(
Ответ отправлен: 17.07.2004, 19:43
Отправитель: flasher
Отвечает Евгений Иванов
http://icq2000cc.hobi.ru/page1.html
:)
Удачи!
* EMan: -=- Любовь всегда неразделённая... =-=
Ответ отправлен: 18.07.2004, 15:40
Отправитель: Евгений Иванов
Отвечает Tigran K. Kalaidjian
Приветствую Вас, pAcU!
см. 5606
Ответ отправлен: 18.07.2004, 20:32
Отправитель: Tigran K. Kalaidjian
Вопрос № 5607 |
Доброго дня ув.Экспкрты..
Вопросик такой…
Как можно программно отправить сообщение на
ICQ (корп)?
Какой используется протокол?
Формат пакета и т.д.
Буду признателен за пример или исходник..
Заранее Спасибо.
Вопрос отправлен: 17.07.2004, 19:28
Отправитель: pAcU (pacu@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Tigran K. Kalaidjian
Здравствуйте, pAcU!
1. Библиотека на http://softsearch.ru/programs/30-276-icq-socket-zhivoe-obschenie-po-protokolu-icq-download.shtml
2. А есть еще возможность работать с шлюзами, типа ********@pager.icq.com - но я не знаю, работает ли это сейчас.
Ответ отправлен: 18.07.2004, 20:32
Отправитель: Tigran K. Kalaidjian
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (24) C / C++ (11) Perl (4) Builder / Delphi (14) Pascal (23) Basic / VBA (8) Java / JavaScript (5) PHP (13) Криптография (8) WinAPI (11) Радиоэлектроника (9) |
Пользователю Windows 95/98/Me (41) Windows NT/2000/XP (52) "Железо" (38) Поиск информации (14) |
Администратору Windows NT/2000/XP (29) Linux / Unix (16) |
Юристу Гражданское право (9) Семейное право (7) Трудовое право (8) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Адрес подписки |
Отписаться |
В избранное | ||