Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект.docx
Скачиваний:
16
Добавлен:
21.03.2015
Размер:
1.57 Mб
Скачать

3. Программирование

3.1 Программа на Ассемблере ум

Ex77 start 0

lda c

mul c2

sta p

ldx c0

lda c0

usl comp c12

jgt art

jeq art

jsub inc

rmo x,a ;i:=i+1

add c3

rmo a,x

j usl

art lda y

hlt

c word 20

e word 2

c0 word 0

c1 word 1

c3 word 3

c4 word 4

c12 word 12

c2 word 2

y word 0

d word 20

word 12

word 4

word -16

o resb 3

k resb 3

p resb 3

inc lda e

mul e

add c1

sta k

lda d,x

div c4

sta o

lda p

sub o

div k

add y

sta y

rsub

end Ex77

ВЛГУ. 230100.7.1.00 ПЗ

Блок схема

inc

ВЛГУ. 230100.7.1.00 ПЗ

3.2 Подпрограмма ввода и вывода целых чисел на Ассемблере ibm

Подпрограмма ввода

Блок схема

ВЛГУ. 230100.7.1.00 ПЗ

Подпрограмма на языке программирования Ассемблер IBM PC

InputInt proc

mov ah, 0ah

xor di, di

mov dx, offset buff ; адрес буфера

int 21h ; принимаем строку

mov dl, 0ah

mov ah, 02

int 21h

; выводим перевод строки и обрабатываем

; содержимое буфера

mov si, offset buff+2 ; берем адрес начала строки

cmp byte ptr [si], "-" ; если первый символ минус

jnz ii1

mov di, 1 ; устанавливаем флаг

inc si ; и пропускаем его

ii1: xor ax, ax

mov bx, 10 ; основание сc

ii2: mov cl, [si] ; берем символ из буфера

cmp cl, 0dh ; проверяем не последний ли он

jz endin

; если символ не последний, то проверяем его

; на правильность

cmp cl, '0' ; если введен неверный символ <0

jl er

cmp cl, '9' ; если введен неверный символ >9

ja er

sub cl, '0' ; делаем из символа число

mul bx ; умножаем на 10

add ax, cx ; прибавляем к остальным

inc si ; указатель на следующий символ

jmp ii2 ; повторяем

er: mov dx, offset error ; если была ошибка, то выводим сообщение об

; этом и выходим

mov ah,09

int 21h

int 20h ; все символы из буфера обработаны число

; находится в ax

endin: cmp di,1 ; если установлен флаг, то

jnz ii3

neg ax ; делаем число отрицательным

ii3: ret

error db "incorrect number$"

buff db 6,7 Dup(?)

InputInt endp

ВЛГУ. 230100.7.1.00 ПЗ

Подпрограмма на языке программирования Ассемблер IBM PC

Процедура вывода

OutInt proc near ;=====Процедура вывода

test ax, ax ; проверяем число на знак.

jns oi1

mov cx, ax ; eсли оно отрицательное, выведем минус и

; оставим его модуль

mov ah, 02h

mov dl, '-'

int 21h

mov ax, cx

neg ax

oi1: xor cx, cx ; количество цифр будем держать в CX

mov bx, 10 ; основание сс. 10 для десятеричной и т.п.

oi2: xor dx, dx

div bx ; делим число на основание сс, в остатке

; получается последняя цифра

push dx ; сразу выводить её нельзя, поэтому сохраним

; её в стэке

inc cx

; а с частным повторяем то же самое, отделяя

; от него очередную

test ax, ax ; цифру справа, пока не останется ноль, что

;значит, что дальше

jnz oi2 ; слева только нули

;========Вывод=========

mov ah, 02h

oi3: pop dx

add dl, '0' ; извлекаем очередную цифру, переводим её в

; символ и выводим

int 21h

loop oi3 ; повторим ровно столько раз, сколько цифр

; насчитали

ret

OutInt endp

ВЛГУ. 230100.7.1.00 ПЗ

12

блок схема

ВЛГУ. 230100.7.1.00 ПЗ