- •Таганрог 1997 Методическая разработка к лабораторным работам Программирование на языке ассемблера пэвм ibm pc
- •Введение
- •Структура описания лабораторной работы
- •Выполнение работы
- •Разработка и отладка программ на языке ассемблера
- •2.2. Обработка программ в dos
- •Трансляция программы
- •Компоновка программы
- •Запуск программы
- •2.3. Использование отладчика td
- •Как запустить программу под отладчиком
- •Что умеет и чего не умеет отладчик td
- •Меню View Окно Module
- •Окно cpu
- •Окно Watches
- •Окно Dump
- •Экран пользователя
- •Команда Instruction Trace
- •Команда Program Reset
- •3. Пример выполнения работы
- •4. Контрольные вопросы
- •2.2. Режимы адресации
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Циклические и разветвляющиеся программы1. Цель работы
- •2. Основные сведения
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Логические команды1. Цель работы
- •2. Основные сведения
- •2.1. Логические команды
- •2.2. Примеры использования логических команд
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Символьная обработка1. Цель работы
- •2. Основные сведения
- •2.1. Программные прерывания и системные вызовы
- •2.2. Функции dos для ввода с клавиатуры
- •2.3. Функции dos для вывода на экран
- •3. Пример выполнения работы
- •Inpstr db 80, ?, 82 dup( ? ) ; буфер ввода
- •Inc count[si] ;увеличиваем соответств. Счетчик
- •Xor si, si ;Счетчик цифр
- •Int 21h ; строки
- •Inc si ;Счетчик очередной цифры
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Десятичная арифметика
- •2.3. Команды десятичной коррекции неупакованных чисел
- •3. Пример выполнения работы
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа
- •Подпрограммы1. Цель работы
- •2. Основные сведения
- •2.1. Описание подпрограмм
- •2.2. Вызов подпрограмм
- •2.3. Передача параметров
- •2.4. Сохранение регистров
- •2.5. Локальные переменные
- •2.6. Директивы описания сегментов и модели памяти Модели памяти
- •Директивы определения сегментов
- •Макрокоманды начала и завершения программы
- •2.7. Расширенные директивы описания процедур
- •2.8. Область действия имен
- •2.9. Итоги
- •3. Пример выполнения работы
- •Int 21h ;Приглашение к вводу строки
- •Int 21h ;Ввод строки
- •Int 21h ; позиции удаления
- •Int 21h ;Ввод строки числа
- •Int 21h ; числа удаляемых
- •Int 21h ;Ввод строки числа удаляемых
- •Int 21h ;Заголовок вывода
- •Inc bx ;Сдвиг по строке
- •Int 21h ; Вывод результата
- •Inc bx ;Сдвиг по строке
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа 8 Использование подпрограмм на языке ассемблера в программах на языках c и pascal1. Цель работы
- •2. Основные сведения
- •2.1. Введение
- •2.2. ТерминЫ и сокращения
- •2.3. Соглашения о связях
- •Преобразование имен
- •Передача и возврат управления и данных
- •Сохранение регистров
- •Трансляция и компоновка
- •Преобразование данных
- •Трансляция и компоновка
- •3. Пример выполнения работы
- •3.1. Интерфейс Pascal
- •Inc si ;указатель на входную строку
- •Inc cx ;нет, увеличиваем счетчик символов
- •Inc dx ;да, увеличиваем счетчик строк
- •Inc dx ;нет, будем увеличивать счетчик строк
- •4. Варианты заданий
- •5. Контрольные вопросы
- •БиблиографИя
- •Содержание
- •Заметки
- •Дроздов Сергей Николаевич Калачев Дмитрий Петрович
Int 21h ; позиции удаления
lea DX, N_BUFLEN
mov AH, 0Ah
Int 21h ;Ввод строки числа
lea BX, N_INPBUF ;Адрес строки представления числа
mov CL, N_FACTLEN ;Длина этой строки
call VAL ;Перевод в целое число
jc LLL1 ;Ошибка? - повторить ввод
cmp AL, 0 ;Ноль?
je LLL1 ;Повторить ввод
cmp AL, S_FACTLEN ;Превышает длину строки?
jg LLL1 ;Повторить ввод
mov POSDEL, AX ;Запомнить позицию удаления
; Ввод длины удаляемой части
LLL2: lea DX, MESS3 ;Приглашение
mov AH, 09h ; к вводу
Int 21h ; числа удаляемых
lea DX, N_BUFLEN
mov AH, 0Ah
Int 21h ;Ввод строки числа удаляемых
lea BX, N_INPBUF ;Адрес строки представления числа
mov CL, N_FACTLEN ;Длина этой строки
call VAL ;Перевод в целое число
jc LLL2 ;Ошибка? - повторить ввод
mov LENDEL, AX ;Запомнить число удаляемых
add AX, POSDEL ;Подсчитать, не выходит ли
dec AX ; удаляемая часть
cmp AL, S_FACTLEN ; за конец строки?
jg LLL2 ;Если да - повторить ввод
; Занесение параметров в стек и вызов п/п удаления
lea AX, S_INPBUF
push AX ;1-й параметр - адрес строки
push POSDEL ;2-й параметр - позиция удаления
push LENDEL ;3-й параметр - число удаляемых
call DELSUBS ;Вызов подпрограммы
; Вывод результата
lea DX, MESS4
mov AH, 09h
Int 21h ;Заголовок вывода
lea BX, S_INPBUF
mov CX, 80
LLL3: cmp byte ptr [BX],0;Цикл поиска конца строки и выход
je LLL4 ; - когда конец строки найден
Inc bx ;Сдвиг по строке
loop LLL3
LLL4: mov byte ptr [BX],'$';Заменить признак конца строки
lea DX, S_INPBUF
mov AH, 09h
Int 21h ; Вывод результата
jmp MLOOP ; На повторение работы
QUIT: exitcode 0
;Действие:
; функция вычисляет целое число по его строковому представлению.
; Результат не может быть больше 255.
; Для неверно введенных чисел устанавливает флаг переноса
;Параметры:
; BX - адрес строки - предстваления числа
; CX - длина этой строки
;Возвращает:
; CF - установлен, если в строке не цифры, AX - не определен
; сброшен, строка нормальная, AX - число
; AX - преобразованное число, если сброшен
VAL proc near
push DX ;Сохранить все изменяемые регистры,
; кроме AX, в котором результат
mov CH, 0 ;Расширяем длину до слова
mov AX, 0 ;Начальное значение результата
mov DL, 10 ;Основание системы счисления
__1: imul DL ;Умножить на основание
jc __2 ;Переполнение байта?
mov DH, [BX] ;Очередная цифра
sub DH, '0' ;Получить значение цифры
jl __2 ;Это была не цифра!
cmp DH, 9
jg __2 ;Это опять же была не цифра!
add AL, DH ;+ значение цифры к результату
jc __2 ;Переполнение байта?