Помощь - Поиск - Пользователи - Календарь
Полная версия: НАИПРОСТЕЙШИЕ ВЕЩИ
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Shadow
: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
GLuk
Мнемоника ассемблера - это и есть машинные коды...   ;)
Shadow
:D
---
имею ввиду что компиляторы ошибаются
их же люди пишут
----
я видел разбоку компилятора
как бы TASM ошибался в некоторых вещах
а MASM нет
-----
GLuk
Я это по теме:
Цитата
ДУМАЮ ЧТО ОДИН ИЗ САМЫХ БЫСТРЫХ (БЫСТРЕЕ НАВЕРНО МАШИННЫЕ КОДЫ)
в которых раньше и писали


А что ты имел ввиду в последней мессаааааге:


я видел разбоку компилятора
как бы TASM ошибался в некоторых вещах
а MASM нет  


smile.gif
___ALex___
естественно что машинный код самый быстрый...
поскольку не требует никакого перевода...
BlackShadow
На asm-е под Windows писать довольно прикольно, но и не менее геморройно. Сам код выглядит просто пугающим, а оптимизыция по сравнению с тем же C++ практически отсутствует (если не использовать всяческие навороты в сях). Кда веселее, когда начинаются всякого рода извпащения... Типа многоплатформенный "перезагрузчик" (довольно легко) или реализованная мною мечта идиота самоубийцы : программа создаёт пустое окошко и завершает процесс по его закрытию. Казалось бы ничего такого... Зато на TAsm, с объектами собственного производства и с расширением .СОМ (!). Как вам такое ???
GLuk
Цитата
программа создаёт пустое окошко и завершает процесс по его закрытию. Казалось бы ничего такого.... Как вам такое ???


тоже пожалуй похвастаюсь: так хотелось написать прогу установки видеорежима обращаясь напрямую к адаптеру, и написал ведь...  :D
___ALex___
я не противник ассем-ра, но и не сторонник(он нужен(основательное владение им) для того - для кого это "работа такая" - типа сферы защиты информации)
скажу известно правило
надо улучшать не количество машинных команд конечной программы
а алгоритмы - так как выигрышь куда больше
ну и для крюкеров
сам как будет побольше время этим займусб ненадолго smile.gif
GLuk
Трейсить/дизассемблить чужие проги - это счастье никто не отнимет!  :)
Dark
Я бы в раздел команд пересылок добавил бы команды 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
Эти команды хорощи при работе с графикой...  ;D
GLuk
Смотря какой графикой (640х480х4  :o такая мутотень) smile.gif

Shadow, скажи все-таки, что ты имел ввиду следующей фразой:

я видел разбоку компилятора  
как бы TASM ошибался в некоторых вещах  
а MASM нет  

Shadow
:D
-=-=-
имею ввиду обработку и представление отрицательных чисел и чисел с плавающей запятой
-=-=-
buy azithromycin over the counte
Viagra 25mg 4 Filmtabletten
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.