imho.ws |
![]() |
![]() |
![]() |
# 1 |
Banned
Регистрация: 16.10.2002
Адрес: Прага
Сообщения: 468
![]() ![]() |
АСМ и машинные коды...
Прошу не смеятся уважаемых гуру, мы - ламеры, народ плечистый
![]() Вот какой вопрос...по какому принципу сделан асм? Тоесть допустим смотришь в отладчике, int 21 = 0CD21 (или что-то вроди того, точно не помню)...если прерывание номер другое, то меняется только цифра в машинном коде...так вот вопрос асм это тот же машинный код, но сделанный под слова или нет? Мне просто тут друг доказывал, что не может такого быть и асм компилируется по какому-то сложному алгаритму, а не просто "переводится".... помогите кому не влом... Спасибо. |
![]() |
![]() |
# 2 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Nu, nachnem s togo, chto u kajdogo processora swoi ASM. Wozmem komandu wizowa preriwaniya na 80x86: Int NUMBER. Gde number: nomer preriwaniya. W twoem primere eto 21 w schesnadcaterichnoi. Wot prostoi primer multisegmentnoi ASM progi.
Assume SS: SSeg, DS: DSeg, CS: CSeg SSeg Segment Stack SData dw 1024 dup (?) SSeg EndS DSeg Segment SampleData dp 'Pofig' DSeg EndS CSeg Segment Main Proc Mov Dx, Seg DSeg Mov Ds, Dx Mov Ax, 4C00h Int 21h Main EndP CSeg EndS End Main W proge est 3 segmenta. Assembler obrabatiwaet segmenti odin za drugim i perewodit komandi w chisla. Estewstwenno proishodit prowerka chto ti pishesh, i.t.d. Naprimer Mov Es, Ds (skopirowat soderjimoe Ds w Es) rabotat na 86 processore ne budet, t.k. takoi instrukcii _normalnij_ CPU ne znaet. Poluchish oshibku. Segment SSeg - eto stack - tuda padaet informaciya o tochkah wozwrata iz procedur i funkcij i chasto stack ispolzyetsya dlya peredachi informacii mejdu procedurami ili w kachestwe wremennogo hranilischa informacii. Wtoroi segment: DSeg - tam hranyatsya wse staticheskie dannie. Tretij: CSeg - tam hranitsya wipolnyaemij kod. Chto eshe delaet Assembler - eto nakoplenie informacii o metkah. Kajdaya procedura, oboznachenie bloka dannih i prosto adresnaya metka - eto imya kotoroe obrabatiwaet linkowschik pri sbore objektnih failow w odno celoe - t.e. wipolnyaemij fail. |
![]() |
![]() |
# 3 |
Guest
Сообщения: n/a
|
По поводу сложных алгоритмов - вообще интеловцы постарались в свое время на славу: некоторые операторы могут ассемблироваться аж несколькими вариантами и означать одно и тоже.... + сюда код операции разной длины для разных комманд(и отдельно для AX/AL) + сюда адресации ( на инкрементные они зажались правда, но и обычных в принципе хватает) .....
Вобщем приятное дело... но не для написания дизассемблеров P.S. Почитай справочники (хорошие)по асму - можно найти и коды операций, и системы адресаций и прочую шнягу... блин на днях видел... понравился... названия не помню... :-( p.p.s. to Helldomain - слушай транслит - рулит!!! я наверно раза три перечитывал "schesnadcaterichnoi" пока не понял что ето такое.... :-) |
![]() |
# 8 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Izwini, no on prosche, chem dopustim algoritm kompila iz C++.
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 9 |
Guest
Сообщения: n/a
|
У комповой молодежи середины 90х была такая забава - писать проги в VC... Нет, это не то о чем вы, наверняка, подумали. VC - это Volkov Commander (там был hex-редактор). Все очень просто - без IDE, компиляторов и линкеров. Просто жмешь Shift-F4 (новый файл) вводишь имя с расш. ".com" и пофигачил.
FA EB FE - Вешает комп (в реальном режиме и под DOS). E9 FF FF FF FF - Перегружает (тоже только в реальном и, если не ошибаюсь, только для 8086). B8 01 00 CD 10 B8 01 4C CD 21 - устанавливает режим 40x25... Еще прикольные весчи, вплоть до форматирования винтов (через int 13), бикалок при нажатии клавиш (резидент на int 09) и пр... Т.е. ASM переводится по командно. А то, что Sh гнал, про буйство опкодов и адресации, так это ясен перец - CISC-архитектура это вам не RISC с 10-30 командами (кот. выполняют тоже, и даже быстрее). И не интеловцы постарались и не в свое время... Это еще до них известно было и еще до сих пор не известно что лучше _для любой_ задачи. CISC'у цисково, RISC'у - рисково, а другу в репу за такие предположения. :) |
![]() |
# 10 | |
::VIP::
Регистрация: 02.12.2001
Адрес: Hohland
Сообщения: 2 260
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
![]() |
![]() |
# 11 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Panorama, ne pomny ya chto-to ni odnogo CISC proca s registrom AX i lo-bit AL (kak Sh pisal) ot nego. Mojet nazowesh?
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 12 |
Guest
Сообщения: n/a
|
2helldomain: Нет, с пямятью у тебя все в порядке :) У каждого проца свои имена регистров. Или ты хочешь сказать, что только Intel одна CISC процы делает?
2Denver: :) :) :) А кто говорил, что писание прог в hex-редакторе - это серьёзно? :) For fun. А вот двумя байтами выбирать горячая или холодная перезагрузка нельзя (на стандартном BIOS), так как это определяется содержимым ячейки где-то в 0040:xxxx, а вот адресовать ее одним-двумя байтами тебе не удасться :) Тем более в зависимости от первого символа (там опкод, а их не так много). Да и какое это теперь имеет значение по прошествии стольких лет? :) |
![]() |
# 13 | ||
::VIP::
Регистрация: 02.12.2001
Адрес: Hohland
Сообщения: 2 260
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
|
||
![]() |
![]() |
# 14 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Panorama: konechno, ne tolko Intel, no rech wrode shla o intele - 8086 ya ne mogu nazwat processorom s arhitekturoi CISC - w srawnenii, naprimer, s vektornim blokom processora C90 ili I320 (metafreim IBM).
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 15 |
Guest
Сообщения: n/a
|
2helldomain: Хех... Но назвать архитектуру x86 RISC архитектурой, я думаю, ты бы тоже не решился :)
2Denver: Найди. Будет интересно :)... Я вот, например, ядерный взрыв несколько раз видел... и зомбей пачками душим... во сне, правда :) Говорю же, что для переключения cold/hot reboot надо в память писать - ну никак не одним-двумя байтами. Может то, что ты видел эксплуатирует какие-то ошибки (напр. эксепшен кинуть для cold boot'а, но так это под QEmm не будет работать...). Короче, действительно интересно будет взглянуть. Если найдешь - напиши. И вообще народ, я свой пост сюда сделал вовсе не чтоб показать как я крут в асме (прошло времени-то сколько, да и занимаюсь, к счастью, не им... да и не был никогда :), а чтоб показать, что да, предложения асма четко транслируются в машкод. С этим все согласны? Ну так хренли на меня набросились с IBM'овскими mainframe'мам на перевес :). |
![]() |
# 16 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Hmm...
Nazwat Intel RISC mojno. Nabor instrukcij po srawneniju s temi procami chto ya nazwal... Dostatochno melok i nezameten.
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 17 |
::VIP::
Регистрация: 02.12.2001
Адрес: Hohland
Сообщения: 2 260
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Немного не то, о чем я говорил, но тоже катит:
Пишешь в HEXе: CD 18 Будет холодная перезагузка, работает только в ДОС (оно даже скажет Press a key to reboot). А то о чем я говорил, ваще нифига не спрашивало и сразу перегружало, но кстати под QEMM паххало 100%, даже теплая перехватывалась by QEMM!).
__________________
sapienti sat. |
![]() |
![]() |
# 18 |
Guest
Сообщения: n/a
|
Э нет, helldomain. Бедный, убогий или ограниченный commandset - это не тоже самое что "сокращенный".
" Основная идея RISC-архитектуры - это тщательный подбор таких комбинаций кодов операций, которые можно было бы выполнить за один такт тактового генератора. Основной выигрыш от такого подхода - резкое упрощение аппаратной реализации ЦП и возможность значительно повысить его производительность. " - fiton.ru (навскидку из яндекса). А вот "add eax, [esi +ebx *2]" ну ни как не назовешь инструкцией RISC процессора. Тоже самое для MIPS (считаем esi==$a0, ebx==$a1, eax==$v0): sll $t1, $a1 ,1 add $t1, $t1, $a0 lw $t1, $t1 add $v0, $v0, $t1 Вот это RISC. А x86 - это CISC 100% и это известный факт. |
![]() |
# 19 |
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
add eax, [esi +ebx *2] - gi, u menya za 4 takta proletaet.
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
![]() |
![]() |
# 20 |
Guest
Сообщения: n/a
|
Да не в тактах дело, а в _упрощении_ аппаратной реализации. Приведенный add - весьма сложная инструкция (взять ebx, масштабировать его, взять esi и прибавить к предыдущему результату, передать результат в блок генерации адреса и тд), однако она поступает на конвеер как единая и конвеер сам решает какому блоку чего поручить, как сериализовать и пр - это не RISC, где по идее это должно уже быть готово - только смотри на опкод и кидай соответствующему блоку без какой-либо предобработки.
Да и с конвеерами... Да и глупо все это. То, то Intel x86 - CISC, надо бы знать. |