Создание подпрограммы преобразования 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
;############################################################
;Ввод чисел и перевод их в нужную форму
;#########################################...
Подпрограммы. Создание процедур и функций
Определение понятий "процедура" и "функция", порядок их объявления для нескольких модулей. Перечень возможных вариантов расположения подпрограмм и осо...
Программирование с использованием подпрограмм на языке С
Разработка прикладного программного обеспечения для решения задачи для персонального компьютера. Структура подпрограммы, механизмы передачи параметров...
Подпрограммы и модули
Область видимости переменных. Хранение локальных данных в памяти компьютера. Использование опережающего описания для развязки закольцованных вызовов п...
Подпрограммы. Процедуры и функции
Назначение и механизмы подпрограмм в программировании, их описание и вызов. Характеристика формальных и фактических параметров. Разновидности параметр...
Подпрограммы Турбо Паскаля, их основные функции
Разновидности и задачи подпрограмм в языке Турбо Паскаль, их локальные и глобальные параметры. Использование процедуры для выполнения законченной посл...