
Практические работы / 9091_Боброва_практ_3
.docxМИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
ОТЧЕТ
по практической работе №3 по дисциплине «Системное программирование»
Тема: «Ввод чисел. Перевод чисел в различные системы счисления»
Студентка гр. 9091 Боброва Н.Ю.
Преподаватель Кораблев Ю.А.
Санкт-Петербург
2024
Цель работы: Научиться вводить в ассемблерную программу числовую информацию. Разработка алгоритмов для перевода чисел в различные системы счисления.
Задание: Разработать программу перевода чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную. Числа должны вводиться в десятичной системе счисления, а выводятся – в двоичной, восьмеричной и шестнадцатеричной.
Код программы
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
LOOP1:
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 LOOP1
// перевод в двоичную СС
PUSH DI
LEA BX, BINBUF+1
MOV CX, 16
MOV [BX], CL
MOV AL, 31h
LOOP2:
MOV SI, CX
SHR DI, 1
JNC ZERO
MOV [BX+SI], AL
ZERO:
LOOP LOOP2
POP DI
//Перевод в восьмеричную СС
PUSH DI
LEA BX, OCTBUF+1
MOV CX, 6h
MOV [BX], CL
LOOP3:
MOV AX, DI
MOV SI, CX
AND AX, 111b
ADD AX, 30h
MOV [BX+SI], AL
PUSH CX
MOV CX, 3h
SHR DI, CL
POP CX
LOOP LOOP3
POP DI
//Перевод в шестнадцатеричную СС
PUSH DI
LEA BX, HEXBUF+1
MOV CX, 4h
MOV [BX], CL
LOOP4:
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
POP CX
LOOP LOOP4
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
Пример выполнения работы программы