Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Создание подпрограммы преобразования 128-разрядного СЧ в УЧ

Тип: контрольная работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Блок-схема основной программы. Линейная и графическая схемы основной программы. Линейная и графическая схемы процедуры вычитания. Реализация ввода с клавиатуры числа, длиной не более 128 символов. Размещение числа в выделенной оперативной памяти.
Краткое сожержание материала:

Размещено на

Размещено на

Содержание

Введение

Анализ

Блок-схема основной программы.

Линейная схема основной программы.

Верификация

1. Без ветвлений

2. С ветвлением

3. Цикла

Сети Петри.

Операционная семантика

Заключение.

Приложение. Листинг программы

Введение

Подпрограмма преобразования 128-разрядного СЧ в УЧ.

Анализ

В окончательной версии программы реализован ввод с клавиатуры числа, длиной не более 128 символов, проверка его на корректность ввода, преобразование из символьного представления в УЧ, размещение полученного числа в выделенной оперативной памяти.

Tabl db '0123456789' - таблица для проверки корректности ввода данных

flag db 0 - искусственный флаг

dlina_1 db 0 - хранит длину числа

buf dw 0 - буфер

BLOCK_SEG1 dw 0 - хранит адрес блока выделенной ОП для числа

Блок-схема основной программы

Размещено на

Размещено на

Линейная схема основной программы

0. СТАРТ (x)

// x - число, введенное с клавиатуры

1. ЕСЛИ P(x), то на 2, иначе на 4

2. x1=f1(x)

3. x2=f2(x1)

4. СТОП (x2)

Расшифровка символов, использующихся в данной схеме:

Переменные:

x, x1, x2.

Функциональные символы:

- операция перевода числа во внутреннее представление

- операция перевода в УЧ

Предикатные символы:

P - `Если числа введены корректно'

Cпециальные символы:

старт, стоп, если.

Аксиоматическая семантика

Множества

Z- множество целых чисел

R- множество регистров

L-множество меток

Операции

+ сложить

- вычесть

неравно

= равно

:= присвоить

выполнить действия за стрелкой, если выполняются условия до стрелки

@ обратиться по адресу

( ) извлечь содержимое

Размещено на

Размещено на

& логическое и

e4:

xor ax, ax ;(ax)=0

xor bx, bx ;(bx)=0

xor si, si ;(si)=0

mov al, a+1 ; (al)=(@(a1)+1)

mov si, ax ;(si)=(ax)

xor di, di ;(di)=0

mov di, si ;(di)=(si)

xor ax, ax ;(ax)=0

dec di ; (di)t = (di)(t-1)-1

ClrScr proc

push bp ; ((sp):=(sp)-2)&((@(ss)+(@(sp)))=(bp))

mov bp, sp ;(bp)=(sp)

push ax ; ((sp):=(sp)-2)&((@(ss)+(@(sp)))=(ax))

mov ah, 0 ;(ah)=0

mov al, 2 ;(al)=2

int 10h ; (sp)t=(sp)(t-1)-2, (sp)=(Flags), (sp)t=(sp)(t-1)-2, (sp)=(ip), (ip)=(132)

pop ax ;((ax)=(@(ss)+(@(sp))))&((sp):=(sp)+2)

pop bp ;((bp)=(@(ss)+(@(sp))))&((sp):=(sp)+2)

ret ; Размещено на

Размещено на

RET

ClrScr endp

Верификация

1. Без ветвлений

mov ax, di S1

mov a1[si],al S2

inc si S3

Иcпользуем метод обратной волны:

TRUE

2. С ветвлением

cmp si,0

je Konec

sbb al,bl

Konec:

xor bx,bx

mov bl,dlina_1

Для доказательства того, что

(si>0)(si=0)

{ if si=0 then al=al-bl else bx=0}

(bx=0)

Необходимо доказать три условия истинности:

1) без побочных эффектов (si>0)

2) ((si>0)(si=0)) & (si>0) {al=al-bl} (al=al-blbx=0)

((si>0)(si=0)) & (si>0) ( al-bl = al-bl bx=0)

True True

3) ((si>0)(si=0)) & (si=0) {bx=0} (al=al-blbx=0)

((si>0)(si=0)) & (si=0) (al=al-bl0=0)

True True

3. Цикла

dlina_1=число введенных знаков

dlina_2=число введенных знаков

;(dlina_1>dlina_2)

di = dlina_2

mov bl,dlina_1

metka:

inc di

mov es,BLOCK_SEG1

cmp di,bx

jne metka

mov di,2

mov cl,adg

LViv:

mov al,buf3[di]

inc di

loop LViv

P = di > 0 bx > 0

B = (di!=bx)

Q = (di=bx)

S = (es=BLOCK_SEG1 di=di+1)

D = (bx-di)

Inv = (bx > 0)

di = bx

Покажем, что цикл всегда завершается, и продемонстрируем истинность следующих утверждений:

1) P->Inv

di > 0 bx > 0 bx > 0 True

2) Inv {B} Inv

bx>0 {di!=bx} bx>0 True

3) Inv B {S} Inv

bx>0 di!=bx {es = BLOCK_SEG1 di=di+1} bx>0

bx>0 {es=BLOCK_SEG1} bx>0

bx>0 -> bx>0 True

4) Inv !B = Q

bx>0 di=bx -> di=bx True

5) D= B Inv {S} D <

(bx-di=) (di!=bx) (bx>0) {es = BLOCK_SEG1 di=di+1}(bx-di<)

(bx-di=) (di!=bx) (bx>0) -> bx - (di+1)< True

6) D = {B} D<=

bx - di = {di!=bx} bx-di<=

bx - di = -> bx - di <= True

7) D=0 Inv -> !B

bx-di=0 bx>0 -> !!(di=bx)

bx-di=0 bx>0 -> di=bx True

Сети Петри

Для построения сети Петри была выбрана основная программа

Операционная семантика

Для написания операционной семантики была выбрана команда dec.

Будем использовать одну ленту L1 и алфавит {0,1,#}.

L1:

1. q0101R1q01

2. q0111R1q01

3. q01#1L1q11

4. q1101q2111

5. q2111L1q11

6. q1111q3101

7. q11Top1R1q31

q3 - состояние, при котором выполняется остановка работы данной машины Тьюринга

Заключение

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

Приложение. Листинг программы

программа вычисление линейный графический

Вычитание 2х УДЦ с произвольным количеством разрядов

Prog1 segment

assume cs:Prog1, ds:Prog1

s1 db 'Vvedite 1-e chislo$'

s2 db 'Vvedite 2-e chislo$'

s3 db 'Rezyltat:$'

NULL db '0$'

er db 'oshibka vvoda!$'

a db 102 ;для 1го числа

db 0

a1 db 100 dup(0)

b db 102 ;для 2го числа

db 0

b1 db 100 dup(0)

Tabl db '0123456789'

simvol db ' $'

znak db ' $'

flag db 0

dlina_1 db 0 ;хранит длину 1го числа

dlina_2 db 0 ;хранит длину 2го числа

zz dw 0

k10 dw 10

buf dw 0

BLOCK_SEG1 dw 0 ;хранит адрес блока выделенной ОП для первого числа

BLOCK_SEG2 dw 0 ;хранит адрес блока выделенной ОП для второго числа

REZ dw 0 ;хранит адрес блока выделенной ОП для результата

Proc1 proc

push cs

pop ds

call ClrScr

;############################################################

;Ввод чисел и перевод их в нужную форму

;#########################################...

Другие файлы:

Подпрограммы. Создание процедур и функций
Определение понятий "процедура" и "функция", порядок их объявления для нескольких модулей. Перечень возможных вариантов расположения подпрограмм и осо...

Программирование с использованием подпрограмм на языке С
Разработка прикладного программного обеспечения для решения задачи для персонального компьютера. Структура подпрограммы, механизмы передачи параметров...

Подпрограммы и модули
Область видимости переменных. Хранение локальных данных в памяти компьютера. Использование опережающего описания для развязки закольцованных вызовов п...

Подпрограммы. Процедуры и функции
Назначение и механизмы подпрограмм в программировании, их описание и вызов. Характеристика формальных и фактических параметров. Разновидности параметр...

Подпрограммы Турбо Паскаля, их основные функции
Разновидности и задачи подпрограмм в языке Турбо Паскаль, их локальные и глобальные параметры. Использование процедуры для выполнения законченной посл...