ВУЗы и колледжи

Рассчитать контрольную сумму строки, введённой пользователем. Задача на Ассемблере.

Разработать программу на языке Ассемблера Intel x86 для ОС MS-DOS. Модель памяти – не регламентируется. Программа при запуске выводит приветствие с ФИО исполнителя, НОМЕР ЗАЧЕТНОЙ КНИЖКИ и текст задания. Программа ожидает ввода строки от пользователя, затем выполняет действия в соответствии с заданием (расчёт контрольной суммы). Результат отобразить на экране.

По сути мне в большей степени непонятна часть касательно контрольной суммы и команды которые нужны для её расчёта.
Остальное думаю смогу сам подставить
Не совсем понятно, по какому алгоритму должна вычисляться контрольная сумма.

В примере ниже вычисляется циклическая контрольная сумма CRC-16 с порождающим полиномом C002h:

.286
.model small
.stack 100h

.data
  Prompt db 'Исполнитель: SanKira', 13, 10
    db 'Номер зачётной книжки: 186815090', 13, 10
    db 'Текст задания', 13, 10, 10
    db 'Введите строку текста: ', 13, 10, 36
  Result db 10, 'Контрольная сумма текста: $'
  WaitText db 10, 10, 'Для завершения работы нажмите любую клавишу... $'

.data?
  CRC_Table dw 256 dup (?)
  Txt_Buff db 82 dup (?)

.code
N186815090:
    mov ax, @data
    mov ds, ax
    mov es, ax
    call Create_CRC_Table
    mov ah, 9
    lea dx, Prompt
    int 21h

    mov Txt_Buff, 80
    inc ah
    lea dx, Txt_Buff
    int 21h
    dec ah
    lea dx, Result
    int 21h
    lea si, Txt_Buff + 2
    xor cx, cx
    mov cl, [si - 1]
    call Get_CRC16
    call Out_Hex

    lea dx, WaitText
    mov ah, 9
    int 21h
    mov ax, 0C08h
    int 21h
    mov ax, 4C00h
    int 21h

Create_CRC_Table proc
    mov cx, 256
    xor dx, dx
    lea di, CRC_Table
Create_Loop:
    push cx
    mov cx, 8
    mov ah, dl
    mov al, ch
Shift_Loop:
    shl ax, 1
    jnc No_XOR
    xor ax, 0C002h
No_XOR:
    loop Shift_Loop
    stosw
    pop cx
    inc dx
    loop Create_Loop
    ret
Create_CRC_Table endp

Get_CRC16 proc
    mov dx, -1
    jcxz End_CRC16
Get_Loop:
    mov bl, dh
    xor bl, [si]
    xor bh, bh
    shl bx, 1
    shl dx, 8
    xor dx, CRC_Table[bx]
    inc si
    loop Get_Loop
End_CRC16:
    mov ax, -1
    xor ax, dx
    ret
Get_CRC16 endp

Out_Hex proc
    mov cx, 4
Hex_Loop:
    mov dl, ah
    shl ax, 4
    shr dl, 4
    cmp dl, 9
    jna Less_10
    add dl, 7
Less_10:
    add dl, 30h
    push ax
    mov ah, 2
    int 21h
    pop ax
    loop Hex_Loop
    ret
Out_Hex endp

    end N186815090

U&n )))
U&n )))
51 590
Лучший ответ