- •Оглавление
- •Введение
- •1.Системный анализ
- •2.Структурное программирование. Схема алгоритма. Программа на языке Си для int, float
- •3. Программирование
- •3.1 Программа на Ассемблере ум
- •3.2 Подпрограмма ввода и вывода целых чисел на Ассемблере ibm
- •3.3 Программа на языке программирования Ассемблер ibm pc
- •4.Тестирование и отладка
- •5. Инструкция пользователя
- •6. Параметры программы
- •Заключение
- •Список использованной литературы
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 ПЗ