Лекция по программированию

Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция

Краткое описание

Язык ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.

Содержимое работы - 1 файл

LECTS.DOC

— 893.00 Кб (Скачать файл)

     Две команды LEA загружают регистры SI и  DI  относительными  адресами NAME1 и NAME2  соответственноТак  как  регистры  DS  и  ES  были  ранее инициализированы адресом DATASG, то полные  адреса  полей  NAME1  и  NAME2 будут  в  регистрах  ES:DI  и  DS:SI.   (COM    программа    автоматически инициализирует регистры ES  и  DS).  Команда  MOV  заносит  в  регистр  CX значение 10 - длину полей NAME1  и  NAME2.  Команда  REP  MOVSB  выполняет следующее:

          - Пересылает самый  левый  байт  из  поля NAME1  (адресованного pегистрами  ES:DI)  в  самый  левый  байт  поля  NAME2 (адресованного регистрами DS:SI).

          - Увеличивает на 1 адреса в регистрах DI  и  SI  для  следующего байта.

          - Уменьшает CX на 1.

          - Повторяет перечисленные действия (в  данном  случае  10  раз), пока содержимое регистра CX не станет равным нулю.

     Поскольку флаг DF имеет нулевое значение, команда  MOVSB  увеличивает адреса в регистрах DI и SI, и в каждой итерации процесс переходит на  байт вправо, т.е. пересылает байт из NAME1+1 в NAME2+1 и т.дЕсли бы флаг  DF был равен 1, тогда команда MOVSB уменьшала бы адреса в регистрах DI и  SI, выполняя процесс справа  налевоНо  в  этом  случае  регистры  SI  и  DI необходимо инициализировать адресами последних байтов полей, т.е.  NAME1+9 и NAME2+9 соответственно.

     В  процедуре  D10MVSW  (рис.11.1)   используется    команда    MOVSW, пересылающая  одно  слово  за  одно  выполнениеТак  как  команда  MOVSW увеличивает адреса в регистрах DS и SI на 2, операция требует только  пять цикловДля процесса пересылки  справа  налево  регистр  SI  должен  быть инициализирован адресом NAME1+8, а регистр DI - NAME2+8.

LODS: ЗАГРУЗКА СТРОКИ

     Команда LODS загружает из памяти в регистр AL один байт или в регистр AX одно словоАдрес памяти определяется регистрами DS:SI. В  зависимости от значения флага DF происходит увеличение или уменьшение регистра SI.

     Поскольку одна команда LODS загружает регистр, то практической пользы от префикса REP в данном случае нетЧасто простая команда MOV  полностью адекватна команде LODS, хотя MOV генерирует три байта  машинного  кодаа LODS  -  только  одинно  требует  инициализацию  регистра  SI.    Можно использовать команду LODS в том случае, когда требуется продвигаться вдоль строки (по байту или по слову), проверяя загружаемый регистр на конкретное значение.

     Команды, эквивалентные команде LODSB:

 

               MOV  AL,[SI]

               INC  SI

 

STOS: ЗАПИСЬ СТРОКИ

     Команда STOS записывает (сохраняет) содержимое регистра AL или  AX  в байте или в слове памятиАдрес памяти всегда  представляется  регистрами ES:DI.  В зависимости от флага  DF  команда  STOS  также  увеличивает  или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова.

     Практическая польза команды STOS  с  префиксом  REP  -  инициализация области данных конкретным значением, например, очистка дисплейного  буфера пробелами. Длина области (в байтах или в cловах) загружается в регистр AX. Команды, эквивалентные команде REP STOSB:

Информация о работе Лекция по программированию