Шаг 35 - Переменные в программе на ассемблере

Не удивлю наверно не кого, дав понятие переменной - это место в памяти которое имеет имя и тип. Создавая программу на ассемблере нам нужно будет определять наши данные. Данные обычно определяются в сегменте данных. TASM поддерживает ряд директив которые помогут нам выделить именованное место под переменные.

db  - 1 байт
dw  - 2 байта
dd  - 4 байта.

Пока хватит, тем более что мы в ближайшее время будет работать с типом данных db. Итак, давайте попробуем определить байт в нашей программе.

MODEL SMALL
STACK 256
DATASEG
	Data1 DB 31h	; выделить один байт с содержимым 31h
CODESEG
Start:
	mov ax,@data 		; установка в ds адpеса
	mov ds,ax 		; сегмента данных
	mov ax,OFFSET Data1	; где находиться переменная
Exit:
	mov ah,04Ch 	; функция DOS выхода из программы
	mov al,0h 	; код возврата
	int 21h 		; Вызов DOS остановка программы
End Start

А теперь собираем и смотрим в отладчике. Выполните первый команды инициализации регистра данных !!!.

35_1.gif (4953 b)

Все в норме по смещению 0 от регистра данных находится наша переменная с содержимым 31h, что в таблице ASCII соответствует цифре 1. Так же эту переменную можно помещать в регистр вот так например:

Start:
	mov ax,@data 		; установка в ds адpеса
	mov ds,ax 		; сегмента данных
	mov ax,OFFSET Data1	; где находиться переменная
	mov al,Data1		; содержимое в регистр AX (AL)	
Exit:

И опять в отладчик смотреть.

35_2.gif (3587 b)

Видите, все поместилось и команда MOV теперь имеет другой вид, в квадратных скобочках адрес откуда берется переменная. Можно и обратную операцию провести поместить из регистра в переменную:

Start:
	mov ax,@data 		; установка в ds адpеса
	mov ds,ax 		; сегмента данных
	mov ax,OFFSET Data1	; где находиться переменная
	mov al,Data1		; содержимое в регистр AX (AL)
	inc al			; увеличить на единицу
	mov Data1,al		; в память

Exit:

В отладчике Вы увидите, что теперь в переменной код 32, что соответствует числу 2:

35_3.gif (1390 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 02.01.2002