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

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 International
Serial 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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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.


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

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное