Добавил:
vanya.tagaschev@ya.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
21.03.2021
Размер:
26.24 Кб
Скачать

Формат строки

Строки исходного кода на языке Ассемблер имеют следующий формат:

<метка> <инструкция/директива> <операнды> <; комментарий>

где <метка> - представляет собой необязательное имя идентификатора;

<инструкция/директива> - это мнемоника инструкции или директивы;

<операнды> - содержат сочетание 0, 1, 2 (иногда больше) констант, ссылок на память или регистры, или текстовых строк, как это требуется в каждой конкретной инструкции или директиве;

<; комментарий> - необязательный комментарий.

В любом месте строки в качестве символа продолжения строки можно поместить символ обратной косой черты «\».

Команды перемещения данных

Команды типа регистр - регистр и регистр – память.

Данные в процессоре перемещаются с помощью инструкции MOV. В действительности MOV (от слова переместить) – это не совсем удачное название данной инструкции. Более точно было бы назвать её COPY (копировать), т.к. инструкция MOV на самом деле записывает копию операнда приемника в операнд-приемник.

В инструкции MOV можно использовать почти любую пару операндов. В качестве операнда-источника (правого операнда) инструкции MOV можно использовать следующее: константу, выражение, при вычислении которого получается константа, общий регистр или ячейку памяти, доступную с помощью одного из режимов адресации. В качестве операнда-приемника (левого операнда) инструкции MOV может использоваться регистр или ячейка памяти.

Перемещение данных в стек и из стека

Стек работает по правилу «Первым пришел – последним ушел». На вершину стека всегда указывает регистр SP. К стеку обращаются с помощью инструкций PUSH и POP. Инструкция PUSH сохраняет операнд в вершине стека, а инструкция POP извлекает значение из вершины стека и сохраняет его в операнде.

Обмен данными

Выполнять обмен содержимого двух операндов позволяет инструкция XCHG. Это предоставляет удобный способ выполнять операцию, которая в противном случае потребовала бы трех инструкций.

ВНИМАНИЕ! Любая написанная Вами программа должна содержать директивы управления сегментами памяти и выход в DOS. Перед директивой END программа должна содержать строки:

mov ah,4ch ; функция DOS завершения программы

int 21 ; завершить программу.

Работа с отладчиком

Для визуализации процессов, происходящих в программе и в качестве удобного средства обнаружения ошибок в программе, используют специальные программы, называемые отладчиком. Мы будем рассматривать INSIGHT, удобный и наглядный отладчик.

Наиболее простой способ начать отладку запустить его и загрузить необходимую программу.

На экране присутствуют окна отображающие: непосредственно сам программный код, текущее состояние всех регистров, в том числе и регистра флагов, а также содержимое стека.

Используя функции меню (вход в меня клавиша «alt») можно запустить программу в пошаговом режиме (режим трассировки) и наблюдать за изменением состояния регистров, тем самым, находить ошибки в коде.

ЗАДАНИЕ №1

segment .text ; сегмент когда

global_start ; должно быть объявлено для линкера

_start: ; сообщаем линкеру точку входа

mov edx,len ; длина сообщения

mov ecx,msg ; сообщение для написания

mov ebx,1 ; файловый дескриптор (stdout)

mov eax,4 ; номер системного вызова (sys_write)

int 0x80 ; вызов ядра

mov eax,1 ; номер системного вызова (sys_exit)

int 0x80 ; вызов ядра

segment .data ; сегмент данных

msg db 'Hello, world!',0xa ; наша строка

len equ $ - msg ; длина нашей строки

ЗАДАНИЕ №2

_STACK segment para stack

db 1024 dup(?)

_STACK ends

_DATA segment

;Опредилить число -678,используя минимальную возможную директиву.

_s678 dw -678

;Описать переменную памяти cvb, длиной двойное слово и загрузить в нее число 4578995

cvb dd 4578995

_DATA ends

_TEXT segment

assume cs:_TEXT, ds:_DATA, ss:_STACK

main proc

;инициализация сегментного регистра данных

mov ax, _DATA

mov ds, ax

;Загрузить в DI число 3456h

mov di, 3456h

;Содержимое DI скопировать в AX

mov ax, di

;Старшее слово переменной CVB скопировать в BX,младшее слово переменной CVB скопировать в DX

mov dx, word ptr [cvb+2]

mov bx, word ptr [cvb+0]

;Переменную с числом -678 скопировать из памяти в CX

mov cx, [_s678]

;Используя стек, осуществить обмен содержимого AX и DI

push ax

mov ax, di

pop di

;Выполнить обмен содержимого старшего и младшего байта AX

xchg al, ah

;завершение программы

mov ax, 4C00h

int 21h

main endp

_ TEXT ends

end main

Соседние файлы в папке Тамьяров А. В.