- •Source Directory
- •IncludEимя_файла_с_путём
- •Include dop1.Asm
- •Операции
- •Взаимодействие с языками высокого уровня.
- •II equ word ptr ll ; Равно5678h
- •I2 equ word ptr c2 ; Равно…
- •Id_table label byte
- •Id_table label byte
- •Irp формальный_аргумент,
- •Irpc формальный_аргумент,строка_символов
- •Irpc rg,
- •IFxxx логическое_выражение_или_аргументы
- •If(e) логическое_выражение
- •If(n)def символическое_имя
- •Ifndef sw ;если sw не определено, то выйти из макроса
- •If(n)b аргумент
Схема трансляции и запуска на отладку ассемблерной программы.
Исходный текст
программы
*.ASM name.cpp
Препроцессор (TASM.EXE) Полный текст программы
Компилятор (TASM.EXE) Объектный код программы
*.OBJ name.obj Output Directory
Компоновщик (TLINK.EXE) Включаемые файлы
*.H Include
directory Библиотечные функции
Library
directory Исполняемая программа name.exe Output Directory
Source 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 ;Таблица слов
DW17,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