Читайте также:
|
|
Рассмотрим процесс пересылки данных, которые имеют длину более двух байт, из одной области памяти непосредственно в другую область. Для этого проанализируем программу, которая пересылает данные из четырёхбайтового поля NAME1, находящегося в сегменте данных, в поле NAME2, находящееся также в сегменте данных.
TITLE EXMOVE
;-------------------------------------------
STACKSG SEGMENT PARA STACK ‘Stack’
DW 32 DUP(?)
STACKSG ENDS
;-------------------------------------------
DATASG SEGMENT PARA ‘Data’
NAME1 DB ‘ABCD’
NAME2 DB 4 DUP (‘ ‘)
DATASG ENDS
;-------------------------------------------
CODESG SEGMENT PARA ‘Code’
BEGIN PROC FAR
ASSUME CS:CODESG, DS:DATASG, SS:STACKSG
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DATASG
MOV DS, AX
CALL MOVE
RET
BEGIN ENDP
; расширенная пересылка, использующая команду цикла LOOP
;--------------------------------------------------
MOVE PROC
LEA SI, NAME1
LEA DI, NAME2
MOV CX, 4
M10: MOV AL, [SI]
MOV [DI], AL
INC DI
INC SI
LOOP M10
RET
MOVE ENDP
CODESG ENDS
END BEGIN
Процедура BEGIN инициализирует сегментные регистры и затем вызывает процедуру MOVE. Процедура MOVE пересылает содержимое поля NAME1 в поле NAME2. Так как каждый раз пересылается только один байт, то процедура начинает с самого левого байта в поле NAME1 и в цикле пересылает затем все остальные байты. Для продвижения в полях NAME1 и NAME2 в регистр СХ заносится значение 4, а регистры SI и DI используются в качестве индексных. Две команды LEA загружают относительные адреса полей NAME1 и NAME2 в регистры SI и DI. Квадратные скобки в командах MOV означают, что для доступа к памяти используется адрес в регистре, указанном в квадратных скобках. Команды INC увеличивают значения соответствующих регистров.
ЭКРАННЫЕ ОПЕРАЦИИ
Как известно, большинство программ требует ввода данных с клавиатуры, диска или модема и обеспечивают вывод данных в удобном формате на экран, принтер или диск. Данные, предназначенные для вывода на экран и ввода с клавиатуры, имеют ASCII-формат.
Для выполнения ввода и вывода используется команда INT (прерывание). Существуют разнообразные способы указать системе, какое действие (ввод или вывод) и на каком устройстве необходимо выполнить. Все необходимые экранные и клавиатурные операции можно выполнить с помощью команды INT 10H, которая передаёт управление непосредственно в BIOS. Для выполнения некоторых более сложных операций существует прерывание более высокого уровня INT 21H, которое сначала передаёт управление в DOS. При использовании в программе команды INT необходимо определить сегмент стека достаточно большим для записи в него значений регистров.
Дата добавления: 2014-12-19; просмотров: 88 | Поможем написать вашу работу | Нарушение авторских прав |