НАИПРОСТЕЙШИЕ ВЕЩИ |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
НАИПРОСТЕЙШИЕ ВЕЩИ |
Shadow |
28.04.2003 11:39
Сообщение
#1
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
:D :D :D :D :D :D
-------- наипростейшие вещи ДОБРО ПОЖАЛОВАТЬ В МИР ASSEMBLERA ---- ДУМАЮ ЧТО ОДИН ИЗ САМЫХ БЫСТРЫХ (БЫСТРЕЕ НАВЕРНО МАШИННЫЕ КОДЫ) в которых раньше и писали --- ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И САМЫХ СТАРЫХ ЕСЛИ ВЫ ТУТ ЗНАЧИТ ВЫ ХОТИТЕ НЕЧТО БОЛЬШЕГО ЧЕМ ВАМ ДАЮТ ДРУГИЕ ВЫСОКО УРОВНЕВЫЕ ЯЗЫКИ ЗНАЧИТ ВЫ ХОТИТЕ СТАТЬ ПРОФ ------------- ЧТО ДАЕТ ASM - ОПИТИМИЗАЦИЯ ПРОГРАММЫ - УСТОЙЧИВОСТЬ РАБОТЫ - МЕНЬШИЙ ОТКОМПИЛ ИСХОДНЫЙ КОД - БЫСТРОТА РАБОТЫ ----- НЕДОСТАТКИ - СЛИШКОМ МНОГО ТЕКСТА КОДА - СЛОЖНОСТЬ ПРОГРАММИРОВАНИЯ - МЕНЬШАЯ НАГЛЯДНОСТЬ КОДА - ПРОГРАММИРОВАНИЯ БОЛЬШИХ ПРОГРАММ С НУЛЯ ОДНОМУ ОЧЕНЬ СЛОЖНО ПРОСТО НЕ ВЫНОСИМО - - - -------------- ЗАДАВАЙТЕ СВОИ ВОПРОСЫ ------------- ================== модели памяти и общая структура программы -------------------------------- .Model Lagre--------всех несколько<=64кило .Model Tiny---------один сегмент 64кило причем код и данные в одном сегменте для COM файлов .Model Small--------один DATA и один CODE по 64кило .Model medium-------несколко CODE один DATA .Model compact------СODE один DATA несколько .Model Huge---------всех несколько >64 --- FLAT спец для WINDOWS сплошна модель памяти ограничены возмажности мат платы и процом ---- Сегмент стека .STACK ------ Сегмент данных .DATA ------ Сегмент кода ----- .CODE ----- процедуры имя Proc имя endp ------ конец проги end ================== описание данных -------------------------------- 8 бит DB BYTE 255 16 бит DW WORD 65535 32 бит DD DWORD 64 бит DQ QWORD 80 бит DT TBYTE (10 byte) --------- описание переменных n db 0 w db 1,1,4,45,2 st db 'HELLO' ---------- ================== регстры общего назначения находятся именно в процессоре компа так что Вы работаете напрямую с процессором AX = AH + AL для счета, операций ввода вывода обязат для умножения CX = CH + CL для счетчик для циклов, арифм команд DX = DH + DL для регстра данных BX = BL + BH для индексной адресации ------------- сегментные регистры CS сегмент кода код проги начальный адрес сегмента кода+рег IP получается адресс выполнемой команды так в принципе и проц работает DS содер начальный адресс сеегмета данных SS начальный адрес сегмента стека ES регистр сегмента расширения (дополнительный) ------ IP регист указателя команд содержит смещения на команду, которая должна быть выполнена тобишь CS:[IP]-- содержит полный адресс -=следующей=- выполняемой команды ============================================ =============ФЛАГИ========================== ============================================ cf-если прозошол пернос занчения из младшего регистра Al в старший AH то CF взводится в 1 примен в арифметич командах pf-флаг четности для ввода вывода af-для BCD чисел zf-флаг нуля взводится в 1 если результат выполнения команды равен 0 sf-флаг знака of-переполнение tf-трассировка для отладчиков if-флаг прерываний 1-разрешены 0-запрещены df-флаг направления ========================================= команды пересылки mov ax,dx mov al,dl mov al,dh ---- f db 10 ......... mov ax,f или mov f,ax ----- mov ax,15(bx,dx,cx,) ---- ======================================== настройка сегмента данных mov ax,@data mov ds,ax или ---- @data(для модели памяти .SMALL) т.к. нельзя пересылать на прямую (ds,@data) ======================================= К СТАТИ КОМПЬЮТЕР НЕЗНАЕТ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ ЗНАЮТ ТОЛЬКО КОМПИЛЯТОРЫ ASM --- НЕЗНАЕТ ОТРИЦ ЧИСЕЛ??? ОБОЗНАЧЕНИЕ ОТРИЦ ЧИСЕЛ ОТВОДИТСЯ ПРОГРАММИСТУ В asm СУЩЕСТВУЕТ ТОЛЬКО КАК БЫ УКАЗАТЕЛЬ НА ОТРИЦ ЧИСЛО ЕТО ПОСЛЕДНИЙ БИТ(СТАРШИЙ) ---- для отриц чисел существует дополнительна кодировка ---- ЕСЛИ ОН 1 ТО ЧИСЛО МОЖНО СЧИТАТЬ ОТРИЦ ЕСЛИ 0 ТО НЕ ОТРИЦ --- НАПРИМЕР -1 ЕТО В БИН КОДЕ 11111111b binary или 255 положит --- если взять 11111111b инвертировать получим 00000000b и прибавим единицу +1 получим 1 тобишь -1 просто в памяти компа -1 ето 11111111b все зависит от вас как использовать ето число как -1 или 255 ----- ------------------------- ============================ ничего не делающая программа ============================ .model small ;модель памяти .stack 100h ;стек инициализ под хранение всячины .data ;сегмент данных .code ;сегмент кода start: ;метка mov ax,04ch ;в регист ax функция 0-выхода 4ch int 21h ;перывания DOS end start ; ends ; =========================== ето программа просто выходит =========================== ;D -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
GLuk |
28.04.2003 18:18
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Мнемоника ассемблера - это и есть машинные коды... ;)
|
Shadow |
28.04.2003 20:04
Сообщение
#3
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
:D
--- имею ввиду что компиляторы ошибаются их же люди пишут ---- я видел разбоку компилятора как бы TASM ошибался в некоторых вещах а MASM нет ----- -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
GLuk |
29.04.2003 15:33
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Я это по теме:
Цитата ДУМАЮ ЧТО ОДИН ИЗ САМЫХ БЫСТРЫХ (БЫСТРЕЕ НАВЕРНО МАШИННЫЕ КОДЫ) в которых раньше и писали А что ты имел ввиду в последней мессаааааге: я видел разбоку компилятора как бы TASM ошибался в некоторых вещах а MASM нет |
___ALex___ |
29.04.2003 20:46
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
естественно что машинный код самый быстрый...
поскольку не требует никакого перевода... |
BlackShadow |
5.05.2003 15:45
Сообщение
#6
|
Гость |
На asm-е под Windows писать довольно прикольно, но и не менее геморройно. Сам код выглядит просто пугающим, а оптимизыция по сравнению с тем же C++ практически отсутствует (если не использовать всяческие навороты в сях). Кда веселее, когда начинаются всякого рода извпащения... Типа многоплатформенный "перезагрузчик" (довольно легко) или реализованная мною мечта идиота самоубийцы : программа создаёт пустое окошко и завершает процесс по его закрытию. Казалось бы ничего такого... Зато на TAsm, с объектами собственного производства и с расширением .СОМ (!). Как вам такое ???
|
GLuk |
5.05.2003 17:21
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Цитата программа создаёт пустое окошко и завершает процесс по его закрытию. Казалось бы ничего такого.... Как вам такое ??? тоже пожалуй похвастаюсь: так хотелось написать прогу установки видеорежима обращаясь напрямую к адаптеру, и написал ведь... :D |
___ALex___ |
5.05.2003 17:37
Сообщение
#8
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
я не противник ассем-ра, но и не сторонник(он нужен(основательное владение им) для того - для кого это "работа такая" - типа сферы защиты информации)
скажу известно правило надо улучшать не количество машинных команд конечной программы а алгоритмы - так как выигрышь куда больше ну и для крюкеров сам как будет побольше время этим займусб ненадолго |
GLuk |
5.05.2003 19:10
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Трейсить/дизассемблить чужие проги - это счастье никто не отнимет! :)
|
Dark |
8.05.2003 1:03
Сообщение
#10
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Я бы в раздел команд пересылок добавил бы команды movsb(w,d),
stosb(w,d) lodsb(w,d) stosb - es:[di]=ax ; Поэтому я и люблю адреса задавать через di а не через bx... lodsb - ax=es:[di] movsb - es:[di]=ds:[si] w,d <=> word, double word... -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
8.05.2003 1:04
Сообщение
#11
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Эти команды хорощи при работе с графикой... ;D
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
GLuk |
9.05.2003 5:20
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Смотря какой графикой (640х480х4 :o такая мутотень)
Shadow, скажи все-таки, что ты имел ввиду следующей фразой: я видел разбоку компилятора как бы TASM ошибался в некоторых вещах а MASM нет |
Shadow |
9.05.2003 21:06
Сообщение
#13
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
:D
-=-=- имею ввиду обработку и представление отрицательных чисел и чисел с плавающей запятой -=-=- -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
Текстовая версия | 18.11.2024 20:02 |