IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   АСМ и машинные коды... (http://www.imho.ws/showthread.php?t=13294)

CYD 17.10.2002 08:49

АСМ и машинные коды...
 
Прошу не смеятся уважаемых гуру, мы - ламеры, народ плечистый :))

Вот какой вопрос...по какому принципу сделан асм? Тоесть допустим смотришь в отладчике, int 21 = 0CD21 (или что-то вроди того, точно не помню)...если прерывание номер другое, то меняется только цифра в машинном коде...так вот вопрос асм это тот же машинный код, но сделанный под слова или нет?
Мне просто тут друг доказывал, что не может такого быть и асм компилируется по какому-то сложному алгаритму, а не просто "переводится"....

помогите кому не влом...
Спасибо.

helldomain 17.10.2002 13:37

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.

Sh 17.10.2002 22:18

По поводу сложных алгоритмов - вообще интеловцы постарались в свое время на славу: некоторые операторы могут ассемблироваться аж несколькими вариантами и означать одно и тоже.... + сюда код операции разной длины для разных комманд(и отдельно для AX/AL) + сюда адресации ( на инкрементные они зажались правда, но и обычных в принципе хватает) .....
Вобщем приятное дело... но не для написания дизассемблеров
P.S. Почитай справочники (хорошие)по асму - можно найти и коды операций, и системы адресаций и прочую шнягу... блин на днях видел... понравился... названия не помню... :-(

p.p.s. to Helldomain - слушай транслит - рулит!!!
я наверно раза три перечитывал "schesnadcaterichnoi" пока не понял что ето такое.... :-)

CYD 18.10.2002 00:10

Вот загрузили-то!:)
Я всего навсего хотел узнать в машинном коде те же команды, что и в асме, только записанные цифрами?
Тоесть если выучить "асм в цифрах" это и будет машинный код?

helldomain 18.10.2002 01:58

CYD: Da.
Sh: Translit wsegda rulil ;-))).

Mickey 28.10.2002 21:50

На самом деле надо обратить внимание на слово МАКРО в дополнении с словом ассемблер.
Например,
db 20 dup('?') # или что-то вроде этого
разворачивается ассемблером в 20 вызовов db.

аналогично и многие другие макрофишки. :idea:

ARTi 28.10.2002 22:23

Короче, по жизни асм - словесное выражение машинных кодов. А все остальное - навороты (метки, мат. выражения, макросы), чтобы легче было жить.
Из-за всех этих наворотов и получается, что алгоритм компиляции не такой уж и простой...

helldomain 28.10.2002 23:51

Izwini, no on prosche, chem dopustim algoritm kompila iz C++.

Panorama 05.11.2002 08:22

У комповой молодежи середины 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'у - рисково, а другу в репу за такие предположения. :)

denver 05.11.2002 08:54

Цитата:

Как писал Panorama
FA EB FE - Вешает комп (в реальном режиме и под DOS).
E9 FF FF FF FF - Перегружает (тоже только в реальном и, если не ошибаюсь, только для 8086)

Вешать комп это не серьезно, а вот перезагрузку видел я лаконичнее - в 2 байтах (обидно тока не запомнил каких), причем холодная и теплая в зависимости от первого символа.

helldomain 05.11.2002 16:34

Panorama, ne pomny ya chto-to ni odnogo CISC proca s registrom AX i lo-bit AL (kak Sh pisal) ot nego. Mojet nazowesh?

Panorama 05.11.2002 21:34

2helldomain: Нет, с пямятью у тебя все в порядке :) У каждого проца свои имена регистров. Или ты хочешь сказать, что только Intel одна CISC процы делает?

2Denver: :) :) :) А кто говорил, что писание прог в hex-редакторе - это серьёзно? :) For fun. А вот двумя байтами выбирать горячая или холодная перезагрузка нельзя (на стандартном BIOS), так как это определяется содержимым ячейки где-то в 0040:xxxx, а вот адресовать ее одним-двумя байтами тебе не удасться :) Тем более в зависимости от первого символа (там опкод, а их не так много).

Да и какое это теперь имеет значение по прошествии стольких лет? :)

denver 06.11.2002 04:16

Цитата:

Как писал Panorama
а вот адресовать ее одним-двумя байтами тебе не удасться :)
Я в асме не силен, но говорю же что видел! Даже пробовал - работало.

Цитата:

Как писал Panorama
Да и какое это теперь имеет значение по прошествии стольких лет? :)
Мне и сейчас бывает надо перезагрузить комп автоматом по окончании выполнения батничка (например досстарт.бат который у меня файлы реестра реставрирует!)

helldomain 06.11.2002 23:07

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).

Panorama 07.11.2002 01:16

2helldomain: Хех... Но назвать архитектуру x86 RISC архитектурой, я думаю, ты бы тоже не решился :)

2Denver: Найди. Будет интересно :)... Я вот, например, ядерный взрыв несколько раз видел... и зомбей пачками душим... во сне, правда :) Говорю же, что для переключения cold/hot reboot надо в память писать - ну никак не одним-двумя байтами. Может то, что ты видел эксплуатирует какие-то ошибки (напр. эксепшен кинуть для cold boot'а, но так это под QEmm не будет работать...). Короче, действительно интересно будет взглянуть. Если найдешь - напиши.

И вообще народ, я свой пост сюда сделал вовсе не чтоб показать как я крут в асме (прошло времени-то сколько, да и занимаюсь, к счастью, не им... да и не был никогда :), а чтоб показать, что да, предложения асма четко транслируются в машкод. С этим все согласны? Ну так хренли на меня набросились с IBM'овскими mainframe'мам на перевес :).

helldomain 07.11.2002 11:48

Hmm...
Nazwat Intel RISC mojno. Nabor instrukcij po srawneniju s temi procami chto ya nazwal... Dostatochno melok i nezameten.

denver 07.11.2002 16:55

Немного не то, о чем я говорил, но тоже катит:
Пишешь в HEXе: CD 18
Будет холодная перезагузка, работает только в ДОС (оно даже скажет Press a key to reboot). А то о чем я говорил, ваще нифига не спрашивало и сразу перегружало, но кстати под QEMM паххало 100%, даже теплая перехватывалась by QEMM!).

Panorama 07.11.2002 19:19

Э нет, 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% и это известный факт.

helldomain 08.11.2002 01:07

add eax, [esi +ebx *2] - gi, u menya za 4 takta proletaet.

Panorama 08.11.2002 03:01

Да не в тактах дело, а в _упрощении_ аппаратной реализации. Приведенный add - весьма сложная инструкция (взять ebx, масштабировать его, взять esi и прибавить к предыдущему результату, передать результат в блок генерации адреса и тд), однако она поступает на конвеер как единая и конвеер сам решает какому блоку чего поручить, как сериализовать и пр - это не RISC, где по идее это должно уже быть готово - только смотри на опкод и кидай соответствующему блоку без какой-либо предобработки.

Да и с конвеерами...

Да и глупо все это. То, то Intel x86 - CISC, надо бы знать.

helldomain 09.11.2002 00:57

Wse. Ubil ti menya.

denver 09.11.2002 04:09

А Я??? :(

Что ж насчет такой реализации перегрузки (она выше) ???

helldomain 09.11.2002 04:28

To, chto ti napisal, eto ne peregruzka, a wizow EXT BOOT INT - t.e. esli u tebya w sisteme est setewaya karta s zagruzchikom, to ti wizowesh ee. Nikto ne daet nikakih garantij chto 18h budet peregrujat tachku. Wiziwai 19h.

denver 09.11.2002 08:06

Т.е это как я понял CD 19 в хексе и без всяких "надо в память писать - ну никак не одним-двумя байтами" как писал Panorama???

Panorama 09.11.2002 09:21

Бр-р-р... Ты, Denver, дай мне оба примера, чтоб можно было и холодный бут делать и горячий. И чтоб на 8086 работала, и чтоб в MS DOS 4.0 (хотя бы)...

Что-то притомился я уже. Если ты говорошь, что видел... ну... значит так оно и есть. А то флейм на пустом месте развели, понимаешь :)

denver 10.11.2002 00:13

Ну да, точно - это все таки CD 18 и CD 19
Причем одна из них работает как теплая а другая как холодная перезагрузка. В досе работает (6.22 как минимум, 4го у меня нет) в виндовсе канешна нет. А будет ли она вызывать сетевую карту из доса незнаю, но думаю нет...

helldomain 10.11.2002 10:28

Budet esli karta imeet BOOT ROM.


Часовой пояс GMT +4, время: 13:49.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.