Подпрограмма ввода и вывода целых чисел на Ассемблере IBM
На языке Си для int, float
Программа на языке программирования Си для int
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
const int N = 4;
void raschet(int a, int c, int d[])
{int g, k, l, z;
int Y = 0;
g = 2 * c;
k = a*a + 1;
cout << "g = " << "2 * " << c << " = " << g << endl;
cout << "k = " << a*a << " + 1" << " = " << k << endl;
for (int i = 1; i <= N; i++)
{l = d[i] / 4;
cout << i << ") " << "l[" << d[i] << "] = " << d[i] << " / 4 = " << l << endl;
z = (g - l) / k;
cout << " z[" << d[i] << "] = " << z << endl;
Y = Y + z;
cout << endl;}
cout << "Y = " << Y << endl;}
int main()
{setlocale(LC_ALL, "Russian");
int a, c, d[N];
cout << "Введите a = ";
cin >> a;
cout << "Введите с = ";
cin >> c;
cout << "Введите элементы массива" << endl;
for (int i = 1; i <= N; i++)
{cout << "d[" << i << "] = ";
cin >> d[i];}
raschet(a, c, d);
_getch();
return 0;}
Программа на языке программирования Си для float
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
const int N = 4;
void raschet(float a, float c, float d[])
{float g, k, l, z;
float Y = 0;
g = 2 * c;
k = a*a + 1;
cout << "g = " << "2 * " << c << " = " << g << endl;
cout << "k = " << a*a << " + 1" << " = " << k << endl;
for (int i = 1; i <= N; i++)
{l = d[i] / 4;
cout << i << ") " << "l[" << d[i] << "] = " << d[i] << " / 4 = " << l << endl;
z = (g - l) / k;
cout << " z[" << d[i] << "] = " << z << endl;
Y = Y + z;
cout << endl;}
cout << "Y = " << Y << endl;}
ВЛГУ. 230100.7.1.00 ПЗ |
int main()
{setlocale(LC_ALL, "Russian");
float a, c, d[N];
cout << "Введите a = ";
cin >> a;
cout << "Введите с = ";
cin >> c;
cout << "Введите элементы массива" << endl;
for (int i = 1; i <= N; i++)
{cout << "d[" << i << "] = ";
cin >> d[i];}
raschet(a, c, d);
_getch();
return 0;}
Блок схема
нет |
z=(2*c-d[i]/4)/(a*a-1) y=y+z |
да |
i<5 |
i=0, y=0 |
Ввод a, c, d[i] |
Изм. |
Лист |
№ докум. |
Подпись |
Дата |
Лист |
Вывод y |
ВЛГУ. 230100.7.1.00 ПЗ |
3. Программирование
Изм.
Лист
№ докум.
Подпись
Дата
Лист
Программа на Ассемблере УМ
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 ПЗ |
Подпрограмма ввода и вывода целых чисел на Ассемблере IBM
Подпрограмма ввода
Блок схема
Изм. |
Лист |
№ докум. |
Подпись |
Дата |
Лист |
![](images/image-006-2050.jpg)
ВЛГУ. 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 ПЗ |
блок схема
ВЛГУ. 230100.7.1.00 ПЗ |
Изм. |
Лист |
№ докум. |
Подпись |
Дата |
Лист |