Для ASM переменной мы называем часть памяти , занятой этой переменной, доступной по определённому имени. Имя переменной-это метка в сегменте данных, которая представляет собой адрес части памяти, выделенной для переменной. В отличии от языков высокого уровня в ASM не существует типа переменной. Переменная характеризуется только именем, меткой и объёмом памяти,выделенном для данной переменной.
Объявление переменной
Переменная объявляется в сегменте данных .dseg и представляет собой метку, за которой следует директива предварительной обработки .byte которая предполагает бронирование части памяти для данной переменной.
.DSEG ; переменные декларируются в сегменте данных
var1 : .BYTE 1 ; декларирование переменной var1
; и бронирование
; 1 byte для этой переменной.
var1 : .BYTE 2 ; декларирование переменной var1
; и бронирование
; 2 byte для этой переменной.
Чтобы лучше понять механизм объявления переменных в ASM мы представляем сравнение с объявлением переменных в C + +.
C++ | SIZE | ASM
char ch; | 8 bit , 1 byte | ch: .BYTE 1
int a; | 32 bit , 4 byte | a: .BYTE 4
short int b; | 16 bit , 2 byte | b: .BYTE 2
long int c; | 64 bit , 8 byte | c: .BYTE 8
float d; | 32 bit , 4 byte | d: .BYTE 4
double e; | 64 bit , 8 byte | e: .BYTE 8
Операции передачи данных, при помощи переменных
Передача данных при помощи переменных должна быть исполнена при помощи команд прямого доступа к памяти,таких как:
- LDS R, k - прямая загрузка значения адреса k из SRAM в РОН.
- STS k, R - прямая запись РОН в адрес k в SRAM.
Метка-имя переменной , также адрес первого местонахождения переменной.
Назначение постоянного значения переменной
Поскольку нет команды передачи данных константы прямо в SRAM , нужно с начало поместить эти данные в РОН, после этого данные передаются прямо по адресу с именем данной переменной.
;EX: var1 = 25;
.DSEG ; переменная декларирована в
; сегменте данных
var1 : .BYTE 1
.CSEG ; программа описывается в сегменте кода
ldi r16, 25
sts var1, r16
Для переменных больше одного байта назначение выполняется для каждого байта отдельно. Метка-имя переменной-это постоянный адрес. Взяв во внимание,что компилятор выполняет операции с константами в фазе прекомпилирования , адрес следующих байт может формироваться при добавлении смещения метки <nume var>+q,которая в свою очередб тоже является константой.
;EX: var2 = 2345;
.DSEG ; переменная декларирована в
; сегменте данных
var2 : .BYTE 2
.CSEG ; программа описывается в сегменте кода
ldi r16, LOW(2345)
sts var2, r16
ldi r16, HIGH(2345)
sts var2+1, r16
Niciun comentariu:
Trimiteți un comentariu