Получение адреса Переменной
Имеется LEA (Загрузить эффективный адрес) команда и альтернативный оператор OFFSET. OFFSET (смещение) и LEA могут использоваться, чтобы получить адрес смещения переменной.
LEA более мощен, потому что это также позволяет Вам получать адрес индексированных переменных. Получение адреса переменной может быть очень полезно в некоторых ситуациях, например, когда Вы должны передать параметры для процедуры.
Имеется первый пример:
ORG 100hMOV AL, VAR1 ; отметьте значение VAR1, перемещая это в AL.
LEA BX, VAR1 ; Поместите адрес VAR1 в BX.
MOV BYTE PTR [BX], 44h ; Измените содержание VAR1.
MOV AL, VAR1 ; отметьте значение VAR1, перемещая это в AL.
RETVAR1 DB 22hEND
Имеется другой пример, который использует OFFSETвместо LEA:
ORG 100hMOV AL, VAR1 ; check value of VAR1 by moving it to AL.MOV BX, OFFSET VAR1 ; get address of VAR1 in BX.MOV BYTE PTR [BX], 44h ; modify the contents of VAR1.MOV AL, VAR1 ; check value of VAR1 by moving it to AL.RETVAR1 DB 22hEND
Оба примера имеют те же самые функциональные возможности.
Эти линии:
LEA BX, VAR1
MOV BX, OFFSET VAR1
Даже компилируются в тот же самый машинный код: MOV BX, num
num - 16 разрядных значения смещения переменной.
Пожалуйста обратите внимание, что только эти регистры могут использоваться внутренние квадратные скобки (как указатели памяти): BX, SI, DI, BP!
Константы
Константы - точно так же как переменные, но они существуют только, пока ваша программа не компилируется (собранной). После определения константы его значение не может быть изменено. Определять константы EQU директива используется:
Имя EQU < любое выражение >
Например:
k EQU 5
MOV AX, k
Вышеупомянутый пример функционально идентичен, чтобы закодировать: MOV AX, 5
Вы можете рассматривать переменные, в то время как ваша программа выполняет, выбирая "Variables" в меню "View" эмулятора.
Чтобы рассматривать массивы, Вы должны нажать по переменному и набор свойство Elements, чтобы выстроить размер. На языке ассемблера не имеется строгих типов данных, так что любая переменная может быть представлена как массив.
Переменная может рассматриваться в любой системе нумерации:
HEX- hexadecimal (базируется 16).
BIN- двоичный (базируется 2).
OCT- октальный (базируется 8).
SIGNED- десятичное число со знаком (базируется 10).
UNSIGNED- десятичное число без знака (базируется 10).
CHAR- код случайной работы ASCII (там - 256 символов, некоторые символы невидимы).
Вы можете редактировать значение переменной, когда ваша программа выполняется, просто дважды щелкните этим, или выберите это, и щелкните кнопку Edit.
Возможно ввести числа в любую систему, hexadecimal числа должен иметь "h" суффикс, двоичный "b" суффикс, октальный "o" суффикс, десятичные числа не требуют никакого суффикса. Строка может быть введена этот путь:
' Привет мир ', 0
( Эта строка нулевая закончена).
Массивы могут быть введены этот путь: 1, 2, 3, 4, 5
( Массив может быть массив байтов или слов, это зависит или BYTE, или WORDвыбрано для отредактированной переменной).
Выражения автоматически преобразованы, например:
Когда это выражение введено: 5 + 2.Это будет преобразовано в 7 и т.д ...
Прерывания
Прерывания могут быть замечены как множество функций. Эти функции делают программирование, намного более легкое, вместо письма кода, чтобы печатать символ, Вы можете просто вызывать прерывание, и это будет делать все для Вас. Имеются также функции обработки прерываний, которые работают с дисководом и другими аппаратными средствами. Мы называем такие прерыванияфункциейпрограммного обеспечения.
Прерывания также вызваны различными аппаратными средствами, они называются аппаратными прерываниями. В настоящее время мы заинтересованы программным обеспечением, прерывает только.
Делать программное прерывание имеется команда INT, это имеет очень простой синтаксис:
INT значение
Где значение может быть число между от 0 до 255 (или 0 к 0FFh), где мы будем использовать hexadecimal числа.
Вы можете думать, что имеются только 256 функций, но это не правильно. Каждое прерывание может иметь подфункции.
Определить регистр подфункции AH должен быть установлен перед звонящим прерыванием.
Каждое прерывание может иметь до 256 подфункций (так что мы добираемся 256 * 256 = 65536 функций). Вообще АХ регистр используется, но иногда другие регистры возможно в использовании. Вообще другие регистры используются, чтобы передать параметры и данные, чтобы подфункционировать.
Следующий пример использует INT 10h подфункцию 0Eh, чтобы напечатать сообщение " Привет! ". Это функционирует дисплеи символ на экране, продвигая курсор и прокручивая экран по мере необходимости.
#MAKE_COM# ; instruct compiler to make COM file.ORG 100h
; Подфункция, которую мы используем, не изменяет АХ регистр на возвращении, так что мы можем устанавливать это только однажды.
MOV AH, 0Eh ; select sub-function. ; INT 10h / 0Eh sub-function; receives an ASCII code of the; character that will be printed; in AL register. MOV AL, 'H' ; ASCII code: 72INT 10h ; print it! MOV AL, 'e' ; ASCII code: 101INT 10h ; print it! MOV AL, 'l' ; ASCII code: 108INT 10h ; print it! MOV AL, 'l' ; ASCII code: 108INT 10h ; print it! MOV AL, 'o' ; ASCII code: 111INT 10h ; print it! MOV AL, '!' ; ASCII code: 33INT 10h ; print it! RET ; returns to operating system.
Запишите вышеупомянутая программа Emu8086, в редактор исходного текста, и щелкнуть по кнопке. [Compile and Emulate]. Выполните это!
Лекция 41
Дата добавления: 2016-07-05; просмотров: 1914;