Skip to content

Solutions Generator for 2nd Informatics Laboratory in ITMO

Notifications You must be signed in to change notification settings

glebskix/informatics_lab2_solver

Repository files navigation

Информатика. Лабораторная работа №2. Генератор решений

Выполнение арифметических операций над двоичными числами

####Полное условие находится ниже примеров использования

Пример использования

Input

python solver.py 3

Output

Variant #3; Input Numbers: (2297, 20869)
Task #3
X1 = A = 2297
X2 = C = 20869
X3 = A + C = 2297 + 20869 = 23166
X4 = A + C + C = 2297 + 20869 + 20869 = 44035
X5 = C - A = 20869 - 2297 = 18572
X6 = 65536 - X4 = 65536 - 44035 = 21501
X7 = -X1 = -2297
X8 = -X2 = -20869
X9 = -X3 = -23166
X10 = -X4 = -44035
X11 = -X5 = -18572
X12 = -X6 = -21501

Task #4; Task #5
B1(2) = X1(10) = 2297(10) = 1000 1111 1001(2)
B2(2) = X2(10) = 20869(10) = 101 0001 1000 0101(2)
B3(2) = X3(10) = 23166(10) = 101 1010 0111 1110(2)
B4(2) = X4(10) = 44035(10) = 1010 1100 0000 0011(2)
B5(2) = X5(10) = 18572(10) = 100 1000 1000 1100(2)
B6(2) = X6(10) = 21501(10) = 101 0011 1111 1101(2)
B7(2) = -B1(2) = 1111 0111 0000 0111(2)
B8(2) = -B2(2) = 1010 1110 0111 1011(2)
B9(2) = -B3(2) = 1010 0101 1000 0010(2)
B10(2) = -B4(2) = 0101 0011 1111 1101(2)
B11(2) = -B5(2) = 1011 0111 0111 0100(2)
B12(2) = -B6(2) = 1010 1100 0000 0011(2)

Task #6
ОДЗ = [2^15; 2^15 - 1] = [32768; 32767]
Task #7
B1(2) -> Y1(10) = 2297(10) = X1(10)
B2(2) -> Y2(10) = 20869(10) = X2(10)
B3(2) -> Y3(10) = 23166(10) = X3(10)
B4(2) -> Y4(10) = -21501(10) ≠ X4(10) ≠ 44035(10)
B5(2) -> Y5(10) = 18572(10) = X5(10)
B6(2) -> Y6(10) = 21501(10) = X6(10)
B7(2) -> Y7(10) = -2297(10) = X7(10)
B8(2) -> Y8(10) = -20869(10) = X8(10)
B9(2) -> Y9(10) = -23166(10) = X9(10)
B10(2) -> Y10(10) = 21501(10) ≠ X10(10) ≠ -44035(10)
B11(2) -> Y11(10) = -18572(10) = X11(10)
B12(2) -> Y12(10) = -21501(10) = X12(10)

Task #8
Expression #1
  B1(2) 0000 1000 1111 1001(2)                   X1(10)   2297(10)
+ B2(2) 0101 0001 1000 0101(2)                 + X2(10)  20869(10)
 ------ ----------------------                          ----------
        0101 1010 0111 1110(2)   = 23166(10) =           23166(10)

SF = 0		ZF = 0		PF = 1		AF = 0		CF = 0		OF = 0


Expression #2
  B2(2) 0101 0001 1000 0101(2)                   X2(10)  20869(10)
+ B3(2) 0101 1010 0111 1110(2)                 + X3(10)  23166(10)
 ------ ----------------------                          ----------
        1010 1100 0000 0011(2)  = -21501(10) ≠           44035(10)

SF = 1		ZF = 0		PF = 1		AF = 1		CF = 0		OF = 1


Expression #3
  B2(2) 0101 0001 1000 0101(2)                   X2(10)  20869(10)
+ B7(2) 1111 0111 0000 0111(2)                 + X7(10)  -2297(10)
 ------ ----------------------                          ----------
    (1) 0100 1000 1000 1100(2)   = 18572(10) =           18572(10)

SF = 0		ZF = 0		PF = 0		AF = 0		CF = 1		OF = 0


Expression #4
  B7(2) 1111 0111 0000 0111(2)                   X7(10)  -2297(10)
+ B8(2) 1010 1110 0111 1011(2)                 + X8(10) -20869(10)
 ------ ----------------------                          ----------
    (1) 1010 0101 1000 0010(2)  = -23166(10) =          -23166(10)

SF = 1		ZF = 0		PF = 1		AF = 1		CF = 1		OF = 0


Expression #5
  B8(2) 1010 1110 0111 1011(2)                   X8(10) -20869(10)
+ B9(2) 1010 0101 1000 0010(2)                 + X9(10) -23166(10)
 ------ ----------------------                          ----------
    (1) 0101 0011 1111 1101(2)   = 21501(10) ≠          -44035(10)

SF = 0		ZF = 0		PF = 0		AF = 0		CF = 1		OF = 1


Expression #6
  B1(2) 0000 1000 1111 1001(2)                   X1(10)   2297(10)
+ B8(2) 1010 1110 0111 1011(2)                 + X8(10) -20869(10)
 ------ ----------------------                          ----------
        1011 0111 0111 0100(2)  = -18572(10) =          -18572(10)

SF = 1		ZF = 0		PF = 1		AF = 1		CF = 0		OF = 0


Expression #7
 B11(2) 1011 0111 0111 0100(2)                  X11(10) -18572(10)
+ B3(2) 0101 1010 0111 1110(2)                 + X3(10)  23166(10)
 ------ ----------------------                          ----------
    (1) 0001 0001 1111 0010(2)    = 4594(10) =            4594(10)

SF = 0		ZF = 0		PF = 0		AF = 1		CF = 1		OF = 0


Условие

  1. Переписать в отчёт (рукой, а не копированием в электронном виде) формулировку заданий 4–10! Это требуется для того, чтобы корректно и в полном объёме выполнить все необходимые пункты задания. Данную лабораторную надо выполнять как вычислительная машина, которая действует строго по инструкции.

  2. Определить свои числа А и С исходя из варианта. Вариант выбирается как сумма последнего числа в номере группы и номера в списке группы согласно ISU.

  3. По заданному варианту исходных данных получить набор десятичных чисел: X1 = A, X2 = C, X3 = A+C, X4 = A+C+C, X5 = C-A, X6 = 65536-X4, X7 = -X1, X8 = -X2, X9 = -X3, X10 = -X4, X11 = -X5, X12 = -X6.

    Пример:

    A = 2187
    C = 30327
    X1 = 2187
    X2 = 30327
    X3 = A + C = 2187 + 30327 = 32514
    X7 = -X1 = -2187
    X8 = -X2 = -30327
    X9 = -X3 = -32514
    
  4. Выполнить перевод десятичных чисел X1,…,X6 в двоичную систему счисления, получив их двоичные эквиваленты B1,…,B6 соответственно. Не использовать при этом никакой формат представления данных, не использовать никакую разрядную сетку.

    Пример:

    X1(10) → B1(2) = 1000 1000 1011
    X2(10) → B2(2) = 111 0110 0111 0111
    X3(10) → B3(2) = 111 1111 0000 0010
    
  5. Используя 16-разрядный двоичный формат со знаком и полученные в предыдущем пункте задания двоичные числа B1,…,B6 (т.е. при необходимости дополнить числа B1…B6 ведущими нулями и однозначно интерпретировать эти числа в 16-разрядном двоичном формате со знаком), вычислить двоичные числа B7,…,B12: B7 = -B1, B8 = -B2, B9 = -B3, B10 = -B4, B11 = -B5, B12 = -B6. Отрицательные числа представлять в дополнительном коде.

    Пример:

    B7(2) = -B1(2) = 1111 0111 0111 0101
    B8(2) = -B2(2) = 1000 1001 1000 1001
    B9(2) = -B3(2) = 1000 0000 1111 1110
    
  6. Найти область допустимых значений для данного двоичного формата.

  7. Выполнить обратный перевод всех двоичных чисел B1…B12 (используя 16-разрядный двоичный формат со знаком) в десятичные и прокомментировать полученные результаты.

    Пример:

    B1(2) → Y1(10) = 2187(10) = X1(10) Результат обратного перевода из двоичного числа
     в десятичное равен исходному десятичному числу
    B2(2) → Y2(10) = 30327(10) = X2(10) Результат обратного перевода из двоичного числа
     в десятичное равен исходному десятичному числу
    B3(2) → Y3(10) = 32514(10) = X3(10) Результат обратного перевода из двоичного числа
     в десятичное равен исходному десятичному числу
    B7(2) → Y7(10) = -2187(10) = X7(10) Результат обратного перевода из двоичного числа
     в десятичное равен исходному десятичному числу
    B8(2) → Y8(10) = -30327(10) = X8(10) Результат обратного перевода из двоичного
     числа в десятичное равен исходному десятичному числу
    B9(2) → Y9(10) = -32514(10) = X9(10) Результат обратного перевода из двоичного
     числа в десятичное равен исходному десятичному числу
    
  8. Выполнить следующие сложения двоичных чисел: B1+B2, B2+B3, B2+B7, B7+B8, B8+B9, B1+B8, B11+B3 (итого, 7 операций сложения). Для представления слагаемых и результатов сложения использовать 16-разрядный двоичный формат со знаком. Результаты сложения перевести в десятичную систему счисления, сравнить с соответствующими десятичными числами (т.е. сравнить с суммой слагаемых, представленных в десятичной системе: B1 + B2 vs X1 + X2).

    Примеры:

    B1(2) 0000 1000 1000 1011              X1(10) 2187
    + B2(2) 0111 0110 0111 0111          + X2(10) 30327
    ---------------------------------- = --------------
    0111 1111 0000 0010(2) = 32514(10)            32514(10)
    CF = 0 PF = 1 AF = 1 ZF = 0 SF = 0 OF = 0
    При сложении двух положительных слагаемых получено положительное число.
    Результат выполнения операции верный и корректный, совпадает с суммой десятичных эквивалентов.
    
      B1(2) 0000 1000 1000 1011            X1(10)  2187
    + B8(2) 1000 1001 1000 1001          + X8(10) -30327
    ---------------------------------- = ---------------
    1001 0010 0001 0100(2) = -28140(10)           -28140(10)
    CF = 0 PF = 1 AF = 1 ZF = 0 SF = 1 OF = 0
    При сложении положительного и отрицательного слагаемых получено отрицательное число. 
    Результат выполнения операции верный и корректный, совпадает с суммой десятичных эквивалентов.
    
  9. В отчёте (письменно, а не устно при ответе) дать подробные комментарии полученным результатам (к каждому результату сложения), как показано в таблице 2.6 книги «Введение в микроЭВМ». Расставить 6 флагов состояния.

  10. При выставлении вспомогательного флага переноса (межтетрадный перенос – AF=Auxiliary Carry Flag) учитывать перенос не между 7-м и 8-м битами, а между 3-м и 4-м битами результата. При выставлении флага чётности PF учитывать только младший байт.

  11. Проверить, что все пункты задания выполнены и выполнены верно.

About

Solutions Generator for 2nd Informatics Laboratory in ITMO

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages