1   2   3   4   5   6   7
Ім'я файлу: Арх_комп_КСД12_Гайдук_КР.pdf
Розширення: pdf
Розмір: 997кб.
Дата: 13.02.2022
скачати
Пов'язані файли:
пояснительная_записка.doc
{ p = i; break;
} p = 15-p;
// Машинный порядок. unsigned char mash_por = p + 127;
// Знак. int sign; if (x >= 0) sign = 0; else sign = 1;
// Мантисса. Первый разряд пропускаем. bool mant[23]; for(int i=0;i<23;i++) mant[i] = dw[15-p+1+i];
// Округление последнего разряда. if (dw[15-p+24] == 1) mant[22] = 1;
// Заносим знак. out[0] = bool(sign);
// Заносим порядок. for(int i=8;i>=1;i--) out[i] = bool((mash_por >> (8-i)) & 1);

74
// Заносим мантиссу. for(int i=0;i<23;i++) out[i+9] = mant[i];
// Результат как число. for(int i=0;i<32;i++)
{ tmp = out[i]; tmp = tmp << 31-i;
*res = *res | tmp;
}
// Печать результата. printf("HEX = %08x",*res);
} int main()
{ setlocale(0,""); printf("\n "); float x; bool out[32];
DWORD res; while(1)
{ printf("DEC = "); scanf("%f",&x); printf("\n "); format(x,out,&res); printf("\n\n ");
} printf("\n\n "); system("PAUSE"); return 0;
} Приложение 2. Программа преобразования чисел из машинного кода в десятичное представление

#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "windows.h"
// Печать в двоичном представлении. void print_as_bin (int x, int d)
{ if (d == 0) return; print_as_bin(x >> 1,--d); printf("%d",x & 1);
}
// Преобразование целого числа в массив битов. void int_to_bin (int x, int d, bool* mas)
{ if (d == 0) return;

75 mas[d-1] = bool(x & 1); int_to_bin(x >> 1,--d,mas);
}
// max = 65535 min = 0 void int_to_bin16 (int x, bool* mas)
{ int_to_bin(x,16,mas);
}
// Преобразование дробной части числа в массив битов. void fract_to_bin (float x, int d, bool* mas, int cap)
{ if (d == 0) return; mas[cap-d] = bool(int(x*2)); fract_to_bin(x*2-int(x*2),--d,mas,cap);
}
// 16+23. Разряды дробной части вычисляем с запасом. void fract_to_bin39 (float x, bool* mas)
{ fract_to_bin(x,39,mas,39);
}
// Представление числа по стандарту IEEE-754. void format (float x, bool* out, DWORD* res)
{ bool cel[16], drobn[39]; bool dw[55];
DWORD tmp;
*res = 0;
// Если ноль, то результат выдаем сразу. if (x == 0)
{ printf("HEX = %08x",0); for(int i=0;i<32;i++) out[i] = 0; return;
}
// Получение целой и дробной части модуля. int c = int(abs(x)); float d = abs(x)-int(abs(x));
// Переводим их в двоичную систему. int_to_bin16(c,cel); fract_to_bin39(d,drobn);
// Загоняем в рабочий массив. for(int i=0;i<16;i++) dw[i] = cel[i]; for(int i=0;i<39;i++) dw[i+16] = drobn[i];
// Определяем порядок. int p = 0; for(int i=0;i<32;i++) if (dw[i] == 1)
{ p = i; break;
} p = 15-p;

76
// Машинный порядок. unsigned char mash_por = p + 127;
// Знак. int sign; if (x >= 0) sign = 0; else sign = 1;
// Мантисса. Первый разряд пропускаем. bool mant[23]; for(int i=0;i<23;i++) mant[i] = dw[15-p+1+i];
// Округление последнего разряда. if (dw[15-p+24] == 1) mant[22] = 1;
// Заносим знак. out[0] = bool(sign);
// Заносим порядок. for(int i=8;i>=1;i--) out[i] = bool((mash_por >> (8-i)) & 1);
// Заносим мантиссу. for(int i=0;i<23;i++) out[i+9] = mant[i];
// Результат как число. for(int i=0;i<32;i++)
{ tmp = out[i]; tmp = tmp << 31-i;
*res = *res | tmp;
}
// Печать результата. printf("HEX = %08x",*res);
}
// Машинное представление в вещественное число. float repack (unsigned int x)
{ int sign; unsigned int tmp, mant; // 4 bytes;
// Определяем знак. sign = (x >> 31) & 1;
// Определяем порядок. int pzn; tmp = x; tmp = tmp << 1; // Порядок – последние 8 бит. tmp &= 0xFF000000; tmp = tmp >> 24; // Вычленили порядок. pzn = (int)tmp; pzn -= 127;
// Выделяем мантиссу, не забывая про первую единицу. tmp = x; tmp &= 0x007FFFFF; tmp |= 0x00800000; mant = tmp;

77
// Выделяем целую и дроб. части в двоичном представлении. unsigned int cel, drob; cel = mant >> (23 - pzn); // Целая часть. drob = mant << 9 + pzn; // Дроб. часть (по правому краю.
// Считаем дроб. часть. float drch = 0; float pw = 1.0/2; for(int i=0;i<32;i++)
{ drch += (((drob << i) & 0x80000000) >> 31) * pw; pw /= 2;
}
// Устанавливаем знак. float res; res = cel + drch; if (sign) res *= -1; return res;
} int main()
{ setlocale(0,""); printf("\n "); float x; unsigned long h; while(1)
{ printf("HEX = "); scanf("%8x",&h); printf("\n "); x = repack(h); printf("DEC = %f",x); printf("\n\n ");
} printf("\n\n "); system("PAUSE"); return 0;
} Приложение 3. Подпрограммы пересылки данных

;*******************************************************************************
;
; Макросы и подпрограммы пересылки данных.
;
;*******************************************************************************
;*******************************************************************************
; Настройка верхушки стека.
;*******************************************************************************
.macro InitStack ldi temp, High(RAMEND) out sph, temp ldi temp, Low(RAMEND) out spl, temp
.endm

78
;*******************************************************************************
; PUSH A
;*******************************************************************************
.macro PushA push pA push mAH push mAM push mAL
.endm
;*******************************************************************************
; POP A
;*******************************************************************************
.macro PopA pop mAL pop mAM pop mAH pop pA
.endm
;*******************************************************************************
; PUSH B
;*******************************************************************************
.macro PushB push pB push mBH push mBM push mBL
.endm
;*******************************************************************************
; POP B
;*******************************************************************************
.macro PopB pop mBL pop mBM pop mBH pop pB
.endm
;*******************************************************************************
; PUSH C
;*******************************************************************************
.macro PushC push _pC push mCH push mCM push mCL
.endm
;*******************************************************************************
; POP C
;*******************************************************************************
.macro PopC pop mCL pop mCM pop mCH pop _pC
.endm
;*******************************************************************************
; Сохранение 4-хбайтного регистра A в буфер.
;*******************************************************************************
AToBuf:

79 sts buff, pA sts buff+1, mAH sts buff+2, mAM sts buff+3, mAL ret
;*******************************************************************************
; Восстановление А из буфера.
;*******************************************************************************
BufToA: lds pA, buff lds mAH, buff+1 lds mAM, buff+2 lds mAL, buff+3 ret
;*******************************************************************************
; Копирование из буфера в В.
;*******************************************************************************
BufToB: lds pB, buff lds mBH, buff+1 lds mBM, buff+2 lds mBL, buff+3 ret
;*******************************************************************************
; CLR для регистра A.
;*******************************************************************************
ClrA: clr pA clr mAH clr mAM clr mAL ret
;*******************************************************************************
; CLR для регистра B.
;*******************************************************************************
ClrB: clr pB clr mBH clr mBM clr mBL ret
;*******************************************************************************
; CLR для регистра C.
;*******************************************************************************
ClrC: clr _pC clr mCH clr mCM clr mCL ret
;*******************************************************************************
; MOV A -> B
;*******************************************************************************
MovAToB: mov pB, pA mov mBH, mAH mov mBM, mAM mov mBL, mAL

80 ret
;*******************************************************************************
; MOV A -> C
;*******************************************************************************
MovAToC: mov _pC, pA mov mCH, mAH mov mCM, mAM mov mCL, mAL ret
;*******************************************************************************
; MOV C -> A
;*******************************************************************************
MovCToA: mov pA, _pC mov mAH, mCH mov mAM, mCM mov mAL, mCL ret
;*******************************************************************************
; MOV C -> B
;*******************************************************************************
MovCToB: mov pB, _pC mov mBH, mCH mov mBM, mCM mov mBL, mCL ret
;*******************************************************************************
; MOV B -> A
;*******************************************************************************
MovBToA: mov pA, pB mov mAH, mBH mov mAM, mBM mov mAL, mBL ret
;*******************************************************************************
; MOV B -> C
;*******************************************************************************
MovBToC: mov _pC, pB mov mCH, mBH mov mCM, mBM mov mCL, mBL ret
;*******************************************************************************
; Load Time To B
;*******************************************************************************
LoadTimeToB: lds pB, time lds mBH, time+1 lds mBM, time+2 lds mBL, time+3 ret
;*******************************************************************************
; Load YYYY To N

81
;*******************************************************************************
LoadYYYYToN: lds temp, year sts n_jd, temp lds temp, year+1 sts n_jd+1, temp lds temp, year+2 sts n_jd+2, temp lds temp, year+3 sts n_jd+3, temp ret
;*******************************************************************************
; Load A To M
;*******************************************************************************
LoadAToM: sts m_jd, pA sts m_jd+1, mAH sts m_jd+2, mAM sts m_jd+3, mAL ret
;*******************************************************************************
; Load M To A
;*******************************************************************************
LoadMToA: lds pA, m_jd lds mAH, m_jd+1 lds mAM, m_jd+2 lds mAL, m_jd+3 ret
;*******************************************************************************
; Load A To N
;*******************************************************************************
LoadAToN: sts n_jd, pA sts n_jd+1, mAH sts n_jd+2, mAM sts n_jd+3, mAL ret
;*******************************************************************************
; Load N To A
;*******************************************************************************
LoadNToA: lds pA, n_jd lds mAH, n_jd+1 lds mAM, n_jd+2 lds mAL, n_jd+3 ret
;*******************************************************************************
; Load A To P
;*******************************************************************************
LoadAToP: sts p_jd, pA sts p_jd+1, mAH sts p_jd+2, mAM sts p_jd+3, mAL ret

82
;*******************************************************************************
; Load P To A
;*******************************************************************************
LoadPToA: lds pA, p_jd lds mAH, p_jd+1 lds mAM, p_jd+2 lds mAL, p_jd+3 ret
;*******************************************************************************
; Load A To JD
;*******************************************************************************
LoadAToJD: sts jdate, pA sts jdate+1, mAH sts jdate+2, mAM sts jdate+3, mAL ret
;*******************************************************************************
; Load JD To A
;*******************************************************************************
LoadJDToA: lds pA, jdate lds mAH, jdate+1 lds mAM, jdate+2 lds mAL, jdate+3 ret
;*******************************************************************************
; Load A To T
;*******************************************************************************
LoadAToT: sts jcent, pA sts jcent+1, mAH sts jcent+2, mAM sts jcent+3, mAL ret
;*******************************************************************************
; Load T To A
;*******************************************************************************
LoadTToA: lds pA, jcent lds mAH, jcent+1 lds mAM, jcent+2 lds mAL, jcent+3 ret
;*******************************************************************************
; Star0 <- A
;*******************************************************************************
AToStar0: sts star0, pA sts star0+1, mAH sts star0+2, mAM sts star0+3, mAL ret

83
;*******************************************************************************
; Star0 -> A
;*******************************************************************************
Star0ToA: lds pA, star0 lds mAH, star0+1 lds mAM, star0+2 lds mAL, star0+3 ret
;*******************************************************************************
; Load A To TimeP
;*******************************************************************************
LoadAToTimeP: sts ptime, pA sts ptime+1, mAH sts ptime+2, mAM sts ptime+3, mAL ret
;*******************************************************************************
; Load TimeP To A
;*******************************************************************************
LoadTimePToA: lds pA, ptime lds mAH, ptime+1 lds mAM, ptime+2 lds mAL, ptime+3 ret
;*******************************************************************************
; Load A To Longitude
;*******************************************************************************
LoadAToLongitude: sts longt, pA sts longt+1, mAH sts longt+2, mAM sts longt+3, mAL ret
;*******************************************************************************
; Load Longitude To A
;*******************************************************************************
LoadLongToA: lds pA, longt lds mAH, longt+1 lds mAM, longt+2 lds mAL, longt+3 ret
;*******************************************************************************
; Load A To StarTime
;*******************************************************************************
LoadAToStarTime: sts tstar, pA sts tstar+1, mAH sts tstar+2, mAM sts tstar+3, mAL

84 ret
;*******************************************************************************
; Load StarTime To A
;*******************************************************************************
LoadStarTimeToA: lds pA, tstar lds mAH, tstar+1 lds mAM, tstar+2 lds mAL, tstar+3 ret
;*******************************************************************************
; Load A To Latitude
;*******************************************************************************
LoadAToLatit: sts lattd, pA sts lattd+1, mAH sts lattd+2, mAM sts lattd+3, mAL ret
;*******************************************************************************
; Load Latitude To A
;*******************************************************************************
LoadLatitToA: lds pA, lattd lds mAH, lattd+1 lds mAM, lattd+2 lds mAL, lattd+3 ret
;*******************************************************************************
; Load A To Decline
;*******************************************************************************
LoadAToDecl: sts decln, pA sts decln+1, mAH sts decln+2, mAM sts decln+3, mAL ret
;*******************************************************************************
; Load Decline To A
;*******************************************************************************
LoadDeclToA: lds pA, decln lds mAH, decln+1 lds mAM, decln+2 lds mAL, decln+3 ret
;*******************************************************************************
; Load A To RisgSun
;*******************************************************************************
LoadAToRisgSun: sts rgsun, pA sts rgsun+1, mAH

85 sts rgsun+2, mAM sts rgsun+3, mAL ret
;*******************************************************************************
; Load RisgSun To A
;*******************************************************************************
LoadRisgSunToA: lds pA, rgsun lds mAH, rgsun+1 lds mAM, rgsun+2 lds mAL, rgsun+3 ret
;*******************************************************************************
; Load A To TmAng
;*******************************************************************************
LoadAToTmAng: sts tmang, pA sts tmang+1, mAH sts tmang+2, mAM sts tmang+3, mAL ret
;*******************************************************************************
; Load TmAng To A
;*******************************************************************************
LoadTmAngToA: lds pA, tmang lds mAH, tmang+1 lds mAM, tmang+2 lds mAL, tmang+3 ret
;*******************************************************************************
; Степень х в память.
;*******************************************************************************
AToPowX: sts powx, pA sts powx+1, mAH sts powx+2, mAM sts powx+3, mAL ret
;*******************************************************************************
; Степень х из памяти.
;*******************************************************************************
PowXToA: lds pA, powx lds mAH, powx+1 lds mAM, powx+2 lds mAL, powx+3 ret
;*******************************************************************************
; Факториал в память.
;*******************************************************************************
AToFact:

86 sts fact, pA sts fact+1, mAH sts fact+2, mAM sts fact+3, mAL ret
;*******************************************************************************
; Факториал из памяти в регистр B.
;*******************************************************************************
FactToB: lds pb, fact lds mbH, fact+1 lds mbM, fact+2 lds mbL, fact+3 ret
;*******************************************************************************
; Значение сумматора в память.
;*******************************************************************************
AToSum: sts sumr, pA sts sumr+1, mAH sts sumr+2, mAM sts sumr+3, mAL ret
;*******************************************************************************
; Значение сумматора в регистр Виз памяти.
;*******************************************************************************
SumToB: lds pb, sumr lds mbH, sumr+1 lds mbM, sumr+2 lds mbL, sumr+3 ret
;*******************************************************************************
; A -> X
;*******************************************************************************
AToX: sts acc_x, pA sts acc_x+1, mAH sts acc_x+2, mAM sts acc_x+3, mAL ret
;*******************************************************************************
; X -> A
;*******************************************************************************
XToA: lds pa, acc_x lds maH, acc_x+1 lds maM, acc_x+2 lds maL, acc_x+3 ret
;*******************************************************************************
; A -> Y

87
;*******************************************************************************
AToY: sts acc_y, pA sts acc_y+1, mAH sts acc_y+2, mAM sts acc_y+3, mAL ret
;*******************************************************************************
; Y -> A
;*******************************************************************************
YToA: lds pa, acc_y lds maH, acc_y+1 lds maM, acc_y+2 lds maL, acc_y+3 ret
;*******************************************************************************
; A -> Z
;*******************************************************************************
AToZ: sts acc_z, pA sts acc_z+1, mAH sts acc_z+2, mAM sts acc_z+3, mAL ret
;*******************************************************************************
; Z -> A
;*******************************************************************************
ZToA: lds pa, acc_z lds maH, acc_z+1 lds maM, acc_z+2 lds maL, acc_z+3 ret
;*******************************************************************************
; A -> Azimuth
;*******************************************************************************
AToAzimuth: sts azim, pA sts azim+1, mAH sts azim+2, mAM sts azim+3, mAL ret
;*******************************************************************************
; Azimuth -> A
;*******************************************************************************
AzimuthToA: lds pa, azim lds maH, azim+1 lds maM, azim+2 lds maL, azim+3 ret

88
;*******************************************************************************
; A -> Height
;*******************************************************************************
AToHeight: sts heig, pA sts heig+1, mAH sts heig+2, mAM sts heig+3, mAL ret
;*******************************************************************************
; Azimuth -> A
;*******************************************************************************
HeightToA: lds pa, heig lds maH, heig+1 lds maM, heig+2 lds maL, heig+3 ret

1   2   3   4   5   6   7

скачати

© Усі права захищені
написати до нас