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

Блок-схема основной программы. Линейная и графическая схемы основной программы. Линейная и графическая схемы процедуры вычитания. Реализация ввода с клавиатуры числа, длиной не более 128 символов. Размещение числа в выделенной оперативной памяти.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 08.07.2012
Размер файла 73,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

Введение

Анализ

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

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

Верификация

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

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

3. Цикла

Сети Петри.

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

Заключение.

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

Введение

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

Анализ

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

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

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

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

buf dw 0 - буфер

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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-множество меток

Операции

+ сложить

- вычесть

неравно

= равно

:= присвоить

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

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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 ; Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

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

;Курсор влево вверх

xor dx,dx

push dx

call CXY

pop zz

; Вывод сообщения s1 на экран

lea dx, s1

mov ah, 09H

int 21H

;Курсор на следующую строку

mov dh,1

xor dl,dl

push dx

call CXY

pop zz

; Ввод первого числа

mov ah, 0AH

lea dx, a

int 21H

;Проверка на длину числа

cmp a+1, 0

jne L1

jmp eoj

L1:

cmp a+1, 101

jne L2

jmp eoj

L2:

;Курсор на следующую строку

mov dh,2

xor dl,dl

push dx

call CXY

pop zz

;Проверка правильности ввода 1го числа

mov bl,a+1

xor ch, ch

xor si, si

c1:

xor di, di

mov al, a1[si]

c2:

cmp al, Tabl[di]

je c3

inc di

cmp di, 10

je c4

jne c2

c3:

inc si

cmp si, bx

je c5

jne c1

c4:

call Error

c5:

; Вывод сообщения s2 на экран

lea dx, s2

mov ah, 09H

int 21H

;На след строку курсор

mov dh,3

xor dl,dl

push dx

call CXY

pop zz

; Ввод второго числа

mov ah, 0AH

lea dx, b

int 21H

;Проверка на длину числа

cmp b+1, 0

jne L3

jmp eoj

L3:

cmp b+1, 101

jne L4

jmp eoj

L4:

;На след строку курсор

mov dh,4

xor dl,dl

push dx

call CXY

pop zz

;Проверка правильности ввода 2го числа

xor bx, bx

mov bl, b+1

xor ch, ch

xor si, si

c6:

xor di, di

mov al, b1[si]

c7:

cmp al, Tabl[di]

je c8

inc di

cmp di, 10

je c9

jne c7

c8:

inc si

cmp si, bx

je c10

jne c6

c9:

call Error

c10:

;Проверка. Если числа равны по длине то найти наибольшее.

;Если числа равны то вывести 0 на экран

;Если второе число меньше первого то выставить флаг и поставить знак "-"

xor ax,ax

xor bx,bx

xor di,di

mov al,a+1

mov bl,b+1

cmp ax,bx

je c11

jne c12

c11:

mov al,a+1

cmp di,ax

je w3

mov al,a1[di]

mov bl,b1[di]

cmp ax,bx

je w1

jg c12

jl w2

w1:

inc di

jmp c11

w2:

mov znak,'-'

mov flag,1

jmp c12

w3:

lea dx, s3

mov ah, 09H

int 21H

lea dx, NULL

mov ah, 09H

int 21H

jmp eoj

c12:

;Приведение чисел во внутреннее представление

;1е число к виду 01 02 03 04 05

xor ax, ax

xor si, si

xor bx, bx

mov bl, a+1

e1:

xor di, di

mov al, a1[si]

e2:

cmp al, Tabl[di]

je e3

inc di

cmp di, 10

jne e2

e3:

mov ax, di

mov a1[si],al

inc si

cmp si, bx

je e4

jne e1

;перевод к виду 01 23 45

e4:

xor ax, ax

xor bx, bx

xor si, si

mov al, a+1

mov si, ax

xor di, di

mov di, si

xor ax, ax

dec di

cmp si, 2

je ob1

jne ob2

ob1: ;если число из 2х символов(на всякий случай чистим a1[2])

mov a1[2],'#'

ob2:

cmp si, 1

jne e5

je r1

r1: ;если число из 1го символа

jmp r2

e5:

dec si

dec si

mov al, a1[si] ;умножаем n число на 10

mov bl, 10h

mul bl

inc si

mov bl, a1[si] ;прибавляем к получившемуся n+1 элемент и пишем в diый

add al, bl

mov a1[si], 0

dec si

mov a1[si], 0

mov a1[di], al

dec di

cmp si, 1

je e6

jl e6

jne e5

e6:

mov al, a+2

mov a1[di], al

xor ax,ax

mov al,a+1

cmp ax,2

je r2

mov a+2, 0

cmp ax,3

je r2

mov a+3, 0

;2е число к (01 02 03 04 05):

r2:

xor ax, ax

xor si, si

xor bx, bx

mov bl, b+1

e7:

xor di, di

mov al, b1[si]

e8:

cmp al, Tabl[di]

je e9

inc di

cmp di, 16

jne e8

e9:

mov ax, di

mov b1[si],al

inc si

cmp si, bx

je e10

jne e7

;к виду 01 23 45

e10:

xor ax, ax

xor bx, bx

xor si, si

mov al, b+1

mov si, ax

xor di, di

mov di, si

xor ax, ax

dec di

cmp si, 2

je ob3

jne ob4

ob3: ;если число из 2х символов(на всякий случай чистим b1[2])

mov b1[2],0

ob4:

cmp si, 1

jne e11

je r3

r3: ;если число из 1го символа

jmp r4

e11:

dec si

dec si

mov al, b1[si] ;умножаем n число на 10

mov bl, 10h

mul bl

inc si

mov bl, b1[si] ;прибавляем к получившемуся n+1 элемент и пишем в diый

add al, bl

mov b1[si], 0

dec si

mov b1[si], 0

mov b1[di], al

dec di

cmp si, 1

je e12

jl e12

jne e11

e12:

mov al, b+2

mov b1[di], al

xor ax,ax

mov al,b+1

cmp ax,2

je r4

mov b+2, 0

cmp ax,3

je r4

mov b+3, 0

r4:

;Сохраняем длины чисел

xor ax,ax

mov al,a+1

mov dlina_1,al

mov al,b+1

mov dlina_2,al

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

;Выделение памяти и запись чисел в выделенную память

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

;Выделяем память под первое число

mov bx,zseg ;получаем # параграфа конца программы + 1

mov ax,es ;получаем # параграфа начала программы

sub bx,ax ;вычисляем размер программы в параграфах

mov ah,4AH ;номер функции

int 21H ;освобождаем память

mov ah,48H ;номер функции

mov bx,128 ;требуем 128 параграфа

int 21H ;пытаемся отвести блок

mov BLOCK_SEG1,ax ;сохраняем адрес блока

;запись первого числа

xor ax,ax

xor di,di

xor si,si

mov al,a+1

mov si,ax

xor ax,ax

dec si

mov es, BLOCK_SEG1 ;пишем в es адрес блока

cmp si,0

je Zap_sim1

jne Zap1

Zap_sim1:

mov al,a1[si]

mov es:[di],al

jmp Zap2

Zap1:

mov al,a1[si]

mov es:[di],al

inc di

dec si

cmp si,0

je Zap2

jne Zap1

Zap2:

;Выделяем память под второе число

mov bx,zseg ;получаем # параграфа конца программы + 1

add bx,128

mov ax,es ;получаем # параграфа начала программы

sub bx,ax ;вычисляем размер программы в параграфах

mov ah,4AH ;номер функции

int 21H ;освобождаем память

mov ah,48H ;номер функции

mov bx,128 ;требуем 128 параграфа

int 21H ;пытаемся отвести блок

mov BLOCK_SEG2,ax ;сохраняем адрес блока

;запись второго числа

xor ax,ax

xor di,di

xor si,si

mov al,b+1

mov si,ax

xor ax,ax

dec si

mov es, BLOCK_SEG2 ;пишем в es адрес блока

cmp si,0

je Zap_sim2

jne Zap3

Zap_sim2:

mov al,b1[si]

mov es:[di],al

jmp Zap4

Zap3:

mov al,b1[si]

mov es:[di],al

inc di

dec si

cmp si,0

je Zap4

jne Zap3

Zap4:

;выделяем память под результат

mov bx,zseg ;получаем # параграфа конца программы + 1

add bx,256

mov ax,es ;получаем # параграфа начала программы

sub bx,ax ;вычисляем размер программы в параграфах

mov ah,4AH ;номер функции

int 21H ;освобождаем память

mov ah,48H ;номер функции

mov bx,128 ;требуем 128 параграфа

int 21H ;пытаемся отвести блок

mov REZ,ax ;сохраняем адрес блока

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

;Подготовка к вычитанию и вычитание

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

;работа с числами

mov al,dlina_1

mov bl,dlina_2

cmp al,bl ;проверка на длину числа

je ss1

jl ss2

jg ss3

ss1: ;если равны по длине

mov al, flag

cmp al,0

je Nachalo

jne ss1_1

ss1_1:

mov al,dlina_1

mov bl,dlina_2

mov dlina_1,bl

mov dlina_2,al

mov es,BLOCK_SEG1

mov buf,es

mov es,BLOCK_SEG2

mov BLOCK_SEG1,es

mov es,buf

mov BLOCK_SEG2,es

jmp Nachalo

ss2:

mov znak,'-'

jmp ss1_1

ss3:

Nachalo:

;Вычитание

xor di,di

xor si,si

xor ax,ax

mov al,dlina_2

mov si,ax

call vsub ;вызов вычитания

;Вывод ответа

xor ax, ax

xor si, si

xor bx, bx

mov al,dlina_1

mov di, ax

mov es,REZ

cmp es:[di],0

je viv1

jne vivod1

viv1:

dec di

cmp es:[di],0

je viv1

lea dx, s3

mov ah, 09H

int 21H

lea dx, znak

mov ah, 09H

int 21H

vivod1:

mov al, es:[di]

shr al, 4

or al, 30h

mov simvol, al

lea dx, simvol

mov ah, 09H

int 21H

mov al, es:[di]

and al, 0FH

or al, 30h

mov simvol, al

lea dx, simvol

mov ah, 09H

int 21H

cmp di,0

je vivod2

dec di

jmp vivod1

vivod2:

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

;Освобождение выделенной памяти после вычитания

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

;---освобождаем 1й блок

mov ax, BLOCK_SEG1 ;получаем стартовый адрес блока

mov es, ax ;помещаем его в ES

mov ah, 49H ;номер требуемой функции

int 21H ;освобождаем блок памяти

;---освобождаем 2й блок

mov ax, BLOCK_SEG2 ;получаем стартовый адрес блока

mov es, ax ;помещаем его в ES

mov ah, 49H ;номер требуемой функции

int 21H ;освобождаем блок памяти

;---освобождаем блок результата

mov ax, REZ ;получаем стартовый адрес блока

mov es, ax ;помещаем его в ES

mov ah, 49H ;номер требуемой функции

int 21H ;освобождаем блок памяти

;Конец программы

eoj: mov ah, 4CH

int 21H

Proc1 endp

;Функция "Вычитание"

vsub proc

V1:

mov es,BLOCK_SEG1

mov al,es:[di] ; в al разряд первого числа

mov es,BLOCK_SEG2

mov bl,es:[di] ;в bl разряд второго числа

jc V2 ; jc - был ли займ, если да то v3

cmp si,0 ;проверка на конец числа

je Konec

sbb al,bl ; вычитание с займом

das ; коррекция

mov es,REZ

mov es:[di],al ; сохранение результата

inc di

dec si

jmp V1

V2:

sbb al,bl

das

mov es,REZ

mov es:[di],al

inc di

dec si

jmp V1

Konec:

xor bx,bx

mov bl,dlina_1

mov es,REZ

mov es:[di],al

cmp di,bx

je m

metka:

inc di

mov es,BLOCK_SEG1

mov al,es:[di]

mov es,REZ

mov es:[di],al

cmp di,bx

jne metka

m:

ret

vsub endp

;вывод ошибки и переход к концу программы(eoj)

Error proc

lea dx, er

mov ah, 09H

int 21H

jmp eoj

Error endp

;Очистка экрана

ClrScr proc

push bp

mov bp, sp

push ax

mov ah, 0

mov al, 2

int 10h

pop ax

pop bp

ret

ClrScr endp

;Установка курсора в нужное положение на экране

CXY proc

push bp

mov bp, sp

push ax

push bx

push dx

mov bh, 0

mov ah, 2

mov dx, [bp + 4]

int 10h

pop dx

pop bx

pop ax

pop bp

ret

CXY endp

Prog1 ends

ZSEG SEGMENT

ZSEG ENDS

end proc1

Размещено на Allbest.ru


Подобные документы

  • Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.

    курсовая работа [391,1 K], добавлен 30.09.2013

  • Схемы графической аутентификации, их реализация и внедрение в операционных системах Linux. Оценка вероятности взлома графического пароля. Буквенно-цифровые пароли. Схемы треугольника и подвижной рамки. Исследование удобства и простоты использования.

    дипломная работа [5,1 M], добавлен 25.01.2013

  • Метод дублирования кодов. Метод введения переменной состояния. Методология преобразования произвольной программы в структурированную. Замена функциональных блоков неструктурированной схемы функциональными блоками. Логические блоки исходной схемы.

    лабораторная работа [51,8 K], добавлен 15.03.2009

  • Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Выбор и обоснование методов расчета. Разработка основной программы. Блок-схемы алгоритмов. Распечатка листинга.

    курсовая работа [1,5 M], добавлен 21.11.2013

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

    курсовая работа [401,3 K], добавлен 14.03.2015

  • Алгоритм разработки программного обеспечения. Выбор оптимальной среды программирования. Использование регистров специального назначения. Листинг программы в кодах языка Assambler. Результаты ее компилирования. Блок схема основной программы и макроса RND.

    курсовая работа [416,5 K], добавлен 11.03.2015

  • Разработка игровой программы, моделирующей поведение мяча в закрытом безвоздушном пространстве. Изменение значения гравитации и трения о стены. Интерфейс программы, ее основная форма. Блок-схема программы и ее основной код. Добавление третьего измерения.

    контрольная работа [111,1 K], добавлен 27.08.2012

  • Разновидности конструктивных решений реализации весового оборудования. Разработка блок-схемы предустановок, блок-схемы измерения веса, блок-схемы вывода информации о весе в компьютер, блок-схемы устройства и программы работы микропроцессорного блока.

    курсовая работа [525,4 K], добавлен 13.02.2023

  • Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.

    курсовая работа [5,7 M], добавлен 26.06.2016

  • Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.

    курсовая работа [23,1 K], добавлен 24.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.