Основы логики и построения базовых логических схем. Архитектура микропроцессора 8086 и основы языка Ассемблер (Контрольные задания по курсу "ЭВМ и микропроцессорные системы"), страница 4

Контрольная работа № 3

Цель работы: Закрепления знаний по архитектуре микропроцессора 8086 и основам языка Ассемблер, приобретение навыков по разработке программ.

Задание № 3-1: В среде TURBO-ASSEMBLER разработать и реализовать программу с линейной структурой. Исходные данные (переменные X и Y) выбрать самостоятельно таким образом, чтобы сами переменные и любое выражение образуемое ими были отличные от 0 и 1. Рассчет выполнить для двух различных пар значений Х и У. Как исходные значения так и результат работы программы разместить в памяти. Работу программы проиллюстрировать при помощи отладчика.

№3

Уравнение

z=25*x/y+15*y3

x1=

6

x2=

5

y1=

3

y2=

7

z1=

192

z2=

227

Текст программы:

masm                    ;начало программы

MODEL SMALL             ;название модели программы    

.data                   ;раздел заполнения данных в программу   

a1   db  25  ;число a

b1   db  15  ;число b

c1   dw  3   ;число c

x_1  db  6   ;число задаваемое пользователем

y_1  db  3   ;число заданное пользователем

x_2  db  5   ;число задаваемое пользователем

y_2  db  7   ;число задаваемое пользователем

z_1  dw  ?   ;результат выполнения уравнения при 1-м значении X и Y

z_2  dw  ?   ;результат выполнения уравнения при 2-м значении X и Y

.code             ;раздел описания команд выполняемых программой 

main:           ;программа

   mov ax,@data ;помещаем в регистр адрес по которому хранятся данные  

   mov ds,ax    ;помещаем данные из одного регистр в другой 

   mov al,a1    ;помещаем в регистр число a

   MOV bl,x_1   ;помещаем в регистр число x1

   mul bl       ;a*x1

   mov bl,y_1   ;помещаем в регистр число y1

   div bl       ;a*x1/y1

   mov cx,ax    ;помещаем данные из одного регистр в другой

   mov al,b1    ;помещаем данные из одного регистр в другой

   mov bl,y_1   ;помещаем в регистр число y1

   mul bl

   sub ax,c1

   add ax,cx

   mov z_1,ax

   mov ax,@data ;помещаем в регистр адрес по которому хранятся данные  

   mov ds,ax    ;помещаем данные из одного регистр в другой 

   mov al,a1    ;помещаем в регистр число a

   MOV bl,x_2   ;помещаем в регистр число x2

   mul bl       ;a*x2

   mov bl,y_2   ;помещаем в регистр число y2

   div bl       ;a*x2/y2

   mov cx,ax    ;помещаем данные из одного регистр в другой

   mov al,b1    ;помещаем данные из одного регистр в другой

   mov bl,y_2   ;помещаем в регистр число y2

   mul bl

   sub ax,c1

   add ax,cx

   mov z_2,ax

end main

Задание № 3-2: В среде TURBO-ASSEMBLER разработать и реализовать программу с использованием циклов. Исходные значения и результат работы программы разместить в памяти. Работу программы проиллюстрировать при помощи отладчика. Каждый следующий член прогрессии определяется предыдущими по нижеследующим законам. Два первых элемента принять равными 0 и 1.

В1-В11 Вычислить сумму n первых четных членов прогрессии,

В3       z(n+2)=2*z(n+1)+z(n)

Текст программы:

masm

MODEL SMALL

.data

      a dw 0      ;A = 0

            b dw 1      ;B = 1

      S dw 0      ;S = 0

      n dw 3      ;n = 3 – выбираем сами

.code

MAIN: mov  ax, @data

      mov  ds, ax       ;загружаем в AX адрес сегмента данных

      mov  cx, 0        ;K = 0

M0:   mov  ax, 2        ;AX = 2 (AX – аналог переменной C)

      mul  b            ;AX = AX*B = 2*B

      add  ax, a        ;AX = AX+A = 2*B+A

      test ax, 1        ;AX четное?

      jne  M1           ;если нет, перейти на M1

      add  S, ax        ;S = S + AX

      inc  cx           ;K = K + 1 (K = CX)

M1:   mov  bx, b        ;

      mov  a, bx        ;A = B

      mov  b, ax        ;B = AX

      cmp  cx, n        ;сравнить K с n

      jne  M0           ;если не равны, перейти на M0

      mov  ah, 4Ch      ;функция 4C прерывания 21h останавливает

      int  21h          ;работу программы.

      end  MAIN

      mov ax,x     ;x  в ax

      mov bx,2   ; 2 в bx

       xor dx,dx    ;  обнуление dx

        div bx           ; деление ax на bx результат в ax

        cmp{test} dx,1{0}        ; сравнение dx с 1      

        j{n}e m1          ;     если равно то на m1