- •Include directory
- •Include имя_файла_с_путём
- •Include dop1.Asm
- •Операции
- •Взаимодействие с языками высокого уровня.
- •II equ word ptr ll ; Равно 5678h
- •I2 equ word ptr c2 ; Равно …
- •Irp формальный_аргумент,
- •Irpc формальный_аргумент,строка_символов
- •Irpc rg,
- •Id_table label byte
- •Id_table label byte
- •IFxxx логическое_выражение_или_аргументы
- •If(e) логическое_выражение
- •If(n)def символическое_имя
- •Ifndef sw ;если sw не определено, то выйти из макроса
- •If(n)b аргумент
Схема трансляции и запуска на отладку ассемблерной программы.
Исходный текст программы
*.ASM
name.cpp
Source Directory
Препроцессор (TASM.EXE)
Полный текст программы
Компилятор (TASM.EXE)
Объектный код программы
*.OBJ
name.obj
Output Directory
Компоновщик (TLINK.EXE)
Включаемые файлы
*.H
Библиотечные функции
Library directory
Исполняемая программа
name.exe
Output Directory
Include directory
*.EXE или *.COM
Турбо-Отладчик (TD.EXE)
Формат команды ассемблера
[Метка:] Мнемокод [Операнды] [;Комментарий]
GETCOUNT: MOV CX,DI ;Инициализация счётчика
Псевдооператоры (директивы компилятора)
Директивы определения идентификаторов
имя EQU текст
или
имя EQU числовое_выражение
К EQU 1024 ;Присвоить имя константе
TABLE EQU DS:[BP][SI] ;Присвоить имя комбинации адресов
SPEED EQU RATE ;Определить синоним
COUNT EQU CX ;Присвоить имя регистру
DBL_SPEED EQU 2*SPEED
MINS_PER_DAY EQU 60*24
CUNST = 56 ;Аналогично CONST EQU 56, но теперь
CONST = 57 ; CONST можно переопределить явно или
CONST = CONST+1 ; через ее предыдущее определение
Директивы определения данных. Резервируют байты (B), слова (W), двойные слова (D), четверные слова (Q), десятибайтовые поля (T).
[имя] DB выражение [,…] ; байты
[имя] DW выражение [,…] ; слова
[имя] DD выражение [,…] ; двойные слова (4байта)
[имя] DQ выражение [,…] ; четверные слова (8байт)
[имя] DT выражение [,…] ; десятибайтовые числа
BU_MAX DB 255 ;Максимальное значение байта без знака
BS_MAX DВ 127 ;Максимальное значение 6айта со знаком
BS_MIN DB -128 ;Минимальное значение байта со знаком
WU_MAX DW 65535 ;Максимальное значение слова без знака
WS_MAX DW 32767 ;Максимальное значение слова со знаком
WS_MIN DW —32768 ;Минимальное значение слова со знаком
В_ТАВLЕ DB 0,0,0,0,8,-13 ;Таблица байтов
DB 100,0,55,63,63,63
M_TABLE DW 1025,567,-30222,0,90,-129 ;Таблица слов
DW 17,645,26534,367,78,-17
B_TABLE DB 4 DUP(0),8,-13,-100,0,55,3 DUP(63)
HIGH_TEMP DB ?
AVG_WEIGHT DW ?
MONTHLY_SALES DW 12DUP(?)
POLITE_MSG DB ‘Вы ввели слишком большое число’
DB ‘Оно не может быть обработано’
DB ‘Пожалуйста, введите данные заново’
RUDE_MSG DB ‘Попробуйте снова’
HEAR_NEAR DW HERE
HEAR_FAR DD HERE
Директивы определения сегмента и процедуры
имя_сег SEGMENT [выравнивание]
[комбинирование]
[‘класс’]
. . .
. . .
имя_сег ENDS
Комбинирование:
PUBLIC – можно объединять сегменты из разных модулей
STACK – для объединения всех стековых сегментов
MEMORY – обеспечивает наложение друг на друга всех таких сегментов
PRIVATE – сегмент ни с кем не объединяется (по умолчанию)
; Пример сегмента данных
DATASEG SEGMENT PARA PUBLIC ‘DATA’
A DB ?
B DB ?
SQUARES DB 1,4,9,16,25,36,49,64
DATASEG ENDS
;----------------------------------
; Пример сегмента команд
PROGCODE SEGMENT PARA PUBLIC ‘CODE’
. . .
. . .
MOV AX,BX
MOV CL,DH
MOV DI,CX
. . .
. . .
PROGCODE ENDS
;----------------------------------
; Пример сегмента стека
SEGSTACK SEGMENT STACK ‘STACK’
DB 128DUP(?)
SEGSTACK ENDS
имя GROUP список_имён_логических сегментов
Объединяет несколько логических сегментов в один физический
DGROUP GROUP PROGSEG,DATASEG
ASSUME регистр_сег:имя_сег[,…]
ASSUME регистр_сег:NOTHING[,…]
PROGCODE SEGMENT PARA PUBLIC ‘CODE’
ASSUME DS:DATASEG,CS:PROGSEG,SS:SEGSTACK
MOV AX,DATASEG ;установить DS на начало DATASEG
MOV DS,AX
. . .
. . .
MOV AX,BX
MOV CL,DH
MOV DI,CX
. . .
. . .
PROGCODE ENDS
имя PROC тип ; FAR или NEAR
. . .
. . .
RET ; Инструкция выхода из процедуры
имя ENDP
CSEG SEGMENT PARA PUBLIC ‘CODE’
ASSUME CS:CSEG
CALLER PROC
. . .
CALL CALLEE ; Вызвать процедуру
. . .
RET
CALLER ENDP
;----------- Вызываемая процедура в этом же сегменте
CALLEE PROC NEAR
. . .
. . .
RET
CALLEE ENDP
CSEG ENDS
CSEG SEGMENT PARA PUBLIC ‘CODE’
ASSUME CS:CSEG
CALLER PROC
. . .
CALL CALLEE ; Вызвать процедуру
. . .
RET
CALLER ENDP
CSEG ENDS
;----------- Вызываемая процедура в другом сегменте
CSEG1 SEGMENT PARA PUBLIC ‘CODE’
CALLEE PROC NEAR
. . .
. . .
RET
CALLEE ENDP
CSEG1 ENDS
Директивы внешних ссылок.
PUBLIC идентификатор[,…]
EXTRN имя:тип[,…]
; В одном модуле
PUBLIC TOTAL
TOTAL DW 0
; В другом модуле
EXTRN TOTAL:DWORD
; Вызов процедуры в первом модуле
CSEG SEGMENT
ASSUME CS:CSEG
EXTRN CALLEE:FAR
CALLER PROC
. . .
CALL CALLEE,FAR ; Вызвать дальнюю процедуру
. . .
RET
CALLER ENDP
CSEG ENDS
;----------- Вызываемая процедура в другом модуле
CSEG1 SEGMENT
CALLEE PROC FAR
. . .
. . .
RET
CALLEE ENDP
CSEG1 ENDS
