МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по практической работе №3
по дисциплине «Системное программирование»
Тема: “ Ввод чисел. Перевод чисел в различные системы счисления.”
Студент гр. 8391 |
|
Гоглев А.А. |
Студент гр. 8391 |
|
Шушков Д.А. |
Студент гр. 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
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
2. Пример выполнения работы программы
Рис.1 Пример выполнения работы программы