Материал: Защита_ПР3_Орещенко_Перевертайло_Петрухина

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра АПУ

отчет

по практической работе №3

по дисциплине «Системное программирование»

Тема: “ Ввод чисел. Перевод чисел в различные системы счисления.”

Студенты гр. 8391

Орещенко Н.В.

Перевертайло Д.А.

Петрухина М.С.

Преподаватель

Кораблев Ю.А.

Санкт-Петербург

2021

Цель работы: Научиться вводить в ассемблерную программу числовую информацию. Разработка алгоритмов для перевода чисел в различные системы счисления.

Задание: Разработать программу перевода чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную. Числа должны вводиться в десятичной системе счисления, а выводятся – в двоичной, восьмеричной и шестнадцатеричной.

1. Код COM-программы с комментариями

CODE SEGMENT

ASSUME CS:CODE, DS:CODE, SS:CODE

ORG 100H

START:

;Ввод числа

MOV AH, 0AH

LEA DX, BUF

INT 21H

MOV AH, 02h

MOV DL, 0aH

INT 21H

;Перевод символов в десятичное число из МУ

MOV DI, 0

LEA BX, BUF+1

MOV CX, [BX]

XOR CH, CH

MOV SI, 1

met: PUSH SI

MOV SI, CX

MOV AL, [BX+SI]

XOR AH, AH

POP SI

SUB AL, 30h

MUL SI

ADD DI, AX

MOV AX, SI

MOV DX, 10

MUL DX

MOV SI, AX

LOOP met

;Перевод в двоичную СС

PUSH DI; сохраняем в стек десятичное число

LEA BX, BINBUF+1

MOV CX, 16; максимальное число 65535 (2 байта)

MOV [BX], CL; запись длины строки

MOV AL, 31h; единица в ASCII таблице

met2: MOV SI, CX ; двигаемся от младшего разряда к старшему

SHR DI, 1 ; сдвиг числа вправо на 1

JNC zero ; проверка флага CF

MOV [BX+SI], AL ; CF не равен 0 => записываем 1 (31h)

zero: LOOP met2

POP DI ; Достаем число из стека для перевода в другие СС

;Перевод в восьмеричную СС

PUSH DI

LEA BX, OCTBUF+1

MOV CX, 6h ; макс. длина строки в данной СС 6

MOV [BX], CL

met3: MOV AX, DI ; копируем число со сдвигом

MOV SI, CX

AND AX, 111b ; вычленяем младшие 3 бита

ADD AX, 30h ; переводим число в символ

MOV [BX+SI], AL

PUSH CX

MOV CX, 3h

SHR DI, CL ; смещаем число на 3 бита вправо

POP CX

LOOP met3

POP DI

;Перевод в шестнадцатеричную СС

PUSH DI

LEA BX, HEXBUF+1

MOV CX, 4h ; макс. длина строки в данной СС 4

MOV [BX], CL

met4: MOV AX, DI

MOV SI, CX

AND AX, 1111b ; Получаем смещение в таблице соответствия

PUSH SI

MOV SI, AX

MOV DL, [HEXSTR+SI] ; Достаем символ из таблицы

POP SI

MOV [BX+SI], DL

PUSH CX

MOV CX, 4h

SHR DI, CL; смещаем число на 4 бита вправо

POP CX

LOOP met4

POP DI

;Вывод

MOV AH, 09h

LEA DX, BINBUF+2 ; Двоичная запись

INT 21H

MOV AH, 02h

MOV DL, 0aH

INT 21H

MOV AH, 09h

LEA DX, OCTBUF+2 ; Восьмеричная запись

INT 21H

MOV AH, 02h

MOV DL, 0aH

INT 21H

MOV AH, 09h

LEA DX, HEXBUF+2 ; Шестнадцатеричная запись

INT 21H

; Завершение программы

MOV AH, 4CH

INT 21H

; Объявление буферов

BUF DB 6, 00, 6 DUP ('$')

BINBUF DB 16, 00, 16 DUP (30h), '$'

OCTBUF DB 6, 00, 6 DUP (?), '$'

HEXBUF DB 4, 00, 4 DUP (?), '$'

HEXSTR DB '0123456789ABCDEF'

CODE ENDS

END START

2. Пример выполнения работы программы

Рис.1 Пример выполнения работы программы

3. Задание на защиту

Введите с клавиатуры число в шестнадцатеричном формате и выведите его в десятичном виде.

Код программы:

CODE SEGMENT

ASSUME CS:CODE, DS:CODE, SS:CODE

ORG 100H

START:

MOV AH, 0AH

LEA DX, BUF

INT 21H

MOV DI, 0

LEA BX, BUF+1

MOV CX, [BX]

XOR CH, CH

MOV SI, 1

met: PUSH SI

MOV SI, CX

MOV AL, [BX+SI]

XOR AH, AH

MOV DL, 30h

CMP AL, 41h

JL num

ADD DL, 7h

num: POP SI

SUB AL, DL

MUL SI

ADD DI, AX

MOV AX, SI

MOV DX, 16

MUL DX

MOV SI, AX

LOOP met

LEA BX, decbuf+1

MOV CX, 5

MOV [BX], CL

MOV AX, DI

met2: PUSH BX

XOR DX, DX

MOV BX, 10

DIV BX

ADD DX, 30h

POP BX

MOV SI, CX

MOV [BX+SI], DL

LOOP met2

MOV AH, 02h

MOV DL, 0aH

INT 21H

MOV AH, 09h

INC BX

LEA DX, [BX]

INT 21H

MOV AH, 4CH

INT 21H

BUF DB 5, 0, 4 DUP ('$'), '$'

decbuf DB 5, 01, 5 DUP (?),'$'

CODE ENDS

END START

Рис.2 Пример выполнения работы программы на защиту

Источник: https://studfile.net/preview/16680785/