Организация и функционирование ЭВМ. Камалягин А.А - 5 стр.

UptoLike

5
Любые ассемблерные программы содержат по крайней мере один сег-
мент-сегмент кода. В некоторых программах используются сегмент для стековой
памяти и сегмент данных для определения данных. Сегмент описывается дирек-
тивой SEGMENT следующим образом:
имя SEGMENT [параметры]
. . . . . .
имя ENDS
Сегмент кода содержит одну или несколько процедур, определяемых ди-
рективой PROC:
имя сегмента
SEGMENT
имя процедуры PROC
. . . . . . . . . . . . . . . .
RET
имя процедуры ENDP
имя сегмента ENDS
Пример простой исходной программы на Ассемблере представлен ниже:
TITLE PROG1 ПРИМЕР РЕГИСТРОВЫХ ОПЕРАЦИЙ
;-------------------------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DB 12 DUP(?)
STACKSG ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING
PUSH DS ; cохранение DS в стеке. (1)
SUB AX,AX ; формирование нуля в АХ. (2)
PUSH AX ; cохранение АХ в стеке. (3)
MOV AX,0123H ; передача константы в регистр. (4)
ADD AX,0025H ; сложение регистра с константой. (5)
MOV BX,AX ; передача из регистра в регистр. (6)
ADD BX,AX ; сложение
содержимого регистров. (7)
MOV CX,BX ; передача из регистра в регистр. (8)
SUB CX,AX ; вычитание содержимого регистров (9)
SUB AX,AX ; формирование нуля в АХ. (10)
NOP ; нет операции (задержка). (11)
RET ; возврат из процедуры. (12)
BEGIN ENDP ;КОНЕЦ ПРОЦЕДУРЫ.
CODESG ENDS ;КОНЕЦ СЕГМЕНТА.
END BEGIN ;КОНЕЦ ПРОГРАММЫ.
                                     5
      Любые ассемблерные программы содержат по крайней мере один сег-
мент-сегмент кода. В некоторых программах используются сегмент для стековой
памяти и сегмент данных для определения данных. Сегмент описывается дирек-
тивой SEGMENT следующим образом:

    имя SEGMENT [параметры]
      . . . . . .
    имя ENDS

      Сегмент кода содержит одну или несколько процедур, определяемых ди-
рективой PROC:

     имя сегмента SEGMENT
     имя процедуры PROC
     . . . . . . . . . . . . . . . .
                        RET
     имя процедуры ENDP
     имя сегмента ENDS

    Пример простой исходной программы на Ассемблере представлен ниже:
    TITLE PROG1 ПРИМЕР РЕГИСТРОВЫХ ОПЕРАЦИЙ
    ;-------------------------------------------------------------------------
    STACKSG SEGMENT PARA STACK 'Stack'
          DB        12 DUP(?)
    STACKSG             ENDS
    CODESG           SEGMENT PARA 'Code'
      BEGIN PROC FAR
      ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING
              PUSH DS                   ; cохранение DS в стеке.               (1)
              SUB AX,AX                 ; формирование нуля в АХ.              (2)
              PUSH AX                   ; cохранение АХ в стеке.               (3)
              MOV AX,0123H ; передача константы в регистр.                     (4)
              ADD AX,0025H ; сложение регистра с константой.                   (5)
              MOV BX,AX                 ; передача из регистра в регистр.      (6)
              ADD BX,AX                 ; сложение содержимого регистров.      (7)
              MOV CX,BX                 ; передача из регистра в регистр.      (8)
              SUB CX,AX                 ; вычитание содержимого регистров (9)
              SUB AX,AX                 ; формирование нуля в АХ.              (10)
              NOP                       ; нет операции (задержка).             (11)
              RET                       ; возврат из процедуры.                (12)
      BEGIN            ENDP             ;КОНЕЦ ПРОЦЕДУРЫ.
      CODESG           ENDS             ;КОНЕЦ СЕГМЕНТА.
      END BEGIN                         ;КОНЕЦ ПРОГРАММЫ.