Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
86
Добавлен:
11.02.2014
Размер:
102.4 Кб
Скачать

1. Предварительная подготовка

В соответствии с выданным номером выбрать вариант задания, разработать схему и текст программы. Данные в сегменте DSEG можно изменить так, чтобы пошаговое выполнение программы при отладке не занимало слишком много времени. Каждый вариант задания предусматривает: поиск в массиве байтов, определенном в DSEG, первого обрабатываемого байта; обработку определенного количества байтов; вывод сообщения о результате.

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

Часть 1. Найти в DSEG: 1) 3-й по порядку нулевой байт; 2) 4-й по порядку код CR (0Dh); 3) 4-й байт из числа тех, которые ниже 20h; 4) 3-й по порядку код '$'(24h); 5) байт, следующий за 3-м кодом ';' (3Bh); 6) 4-й байт из числа больших, чем 29h; 7) байт, следующий за 3-м отрицательным байтом; 8) байт, являющийся 4-м нечетным; 9) байт, следующий за 3-м кодом пробела (20h); 10) 3-й байт из числа тех, которые выше 10h;

Задание 2 (2 часа)

Часть 2. Начиная с найденного байта, вычислить в формате слова: 1) сумму 4 байтов, исключая байты с четным количеством единиц; 2) сумму 5 байтов со знаком без самого большого; 3) сумму 4 байтов со знаком без самого маленького; 4) сумму 4 беззнаковых байтов без самого большого; 5) сумму 5 беззнаковых байтов без самого маленького; 6) сумму 5 байтов, исключая содержащие нечетное количество единиц; 7) сумму 5 байтов, причем из каждого положительного байта вычесть 2; 8) сумму 4 байтов, причем к каждому отрицательному байту добавить 5; 9) сумму 4 байтов; 10) сумму 3 знаковых байтов.

Часть 3. В зависимости от полученной суммы вывести на экран одно из следующих сообщений: 1) сумма < -256, -256 <= сумма < 64, сумма >= 64; 2) сумма <= -16, -16 < сумма <= 0, сумма > 0; 3) сумма < 0, 0 <= сумма < 64, сумма >= 64; 4) сумма выше 256, сумма ниже 256, сумма = 256; 5) сумма ниже 64, сумма выше или равна 64 и ниже 128, сумма выше или равна 128; 6) сумма < -128, -127 < сумма <= 64, сумма > 64; 7) сумма < 0, 0 < сумма < 32, сумма >=32; 8) сумма <= -256, -256 < сумма < 0, сумма >= 0; 9) сумма < 0, сумма = 0, сумма > 0; 10) сумма ниже 32, сумма выше или равна 64 и ниже 128, сумма выше или равна 128;

Приведем пример разработанной программы для варианта 9. В соответствии с заданием необходимо:

  1. найти байт, следующий за 3-м кодом пробела;

  2. сложить 4 байта, начиная с найденного;

  3. вывести сообщение о результате.

.MODEL SMALL

.STACK 100h

.DATA

DAN db 3Bh,20h,0Dh,32h,0A1h,24h,0A0h,0Dh,0,0A2h,20h

db 0B0h,40h,24h,0E1h,0Dh,0,24h,3Bh,30h,0C0h,0Dh

db 20h,97h,3Bh,83h,0,0A0h,20h,0D0h,27h,20h,0C6h

db 91h,0,20h,0FEh,3Bh,90h,0,3Bh,24h,17h,20h,24h

ZERO db 'СУММА РАВНА НУЛЮ',0ah,0dh,24h

GREAT db 'СУММА БОЛЬШЕ НУЛЯ',0ah,0dh,24h

LESS db 'СУММА МЕНЬШЕ НУЛЯ',0ah,0dh,24h

NET db 'КОД ПPОБЕЛА НЕ НАЙДЕН',0ah,0dh,24h

.code

start:

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

mov ax,@Data

mov ds,ax

;поиск начального элемента в DAN

mov cx,3 ;счетчик внешних циклов

mov dx,64 ;счетчик вложенных циклов

lea si,DAN ;нач. адрес данных

dec si

;начало внешнего цикла

EXT: push cx ;сохранение сч.внешних циклов

mov cx,dx ;загрузка сч.вложенных циклов

;вложенный цикл

LOC: inc si ;указатель - на следующий байт

cmp byte ptr [si],32;код пробела?

loopne LOC;повторять,пока нет

;продолжение внешнего цикла

jne NO ;код пробела не найден

mov dx,cx ;сч.вложенных циклов - в dx

pop cx ;восстановление сч.внешних циклов

loop EXT ;повторять,пока не найден 3-й пробел

;сложение 4 элементов

mov cx,4 ;количество слагаемых

sub bx,bx ;очистка аккумулятора

clc ;и переноса

A:inc si ;указатель - на следующий байт

mov al,byte ptr [si]

cbw ;pасшиpение знака

add bx,ax

loop A

;вывод сообщения о результате

jnz NZ ;переход, если сумма не равна нулю

lea dx,ZERO;вывод сообщения о нулевой

mov ah,9h;сумме

int 21h

jmp FIN

NZ: jg GR ;переход, если сумма > 0

lea dx,LESS;вывод сообщения об

mov ah,9h;отрицательной сумме

int 21h

jmp FIN

GR: lea dx,GREAT ;вывод сообщения о

mov ah,9h;положительной сумме

int 21h

jmp FIN

NO: lea dx,NET ;вывод сообщения

mov ah,9h;"пробел не найден"

int 21h

FIN:mov ax,4c00h ;выход из программы

int 21h

end start

Соседние файлы в папке лабораторные работы по ASSAMBLER