Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M2 / Лекция 2.doc
Скачиваний:
15
Добавлен:
16.04.2013
Размер:
207.36 Кб
Скачать

Схема трансляции и запуска на отладку ассемблерной программы.

Исходный текст программы

*.ASM

name.cpp

Source Directory

Препроцессор (TASM.EXE)

Полный текст программы

Компилятор (TASM.EXE)

Объектный код программы

*.OBJ

name.obj

Output Directory

Компоновщик (TLINK.EXE)

Включаемые файлы

*.H

Include directory

Библиотечные функции

Library directory

Исполняемая программа

name.exe

Output 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