SP PR 3
.docxМинистерство цифрового развития, связи и массовых
коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное
бюджетное образовательное учреждение высшего образования
«Московский Технический Университет Связи и Информатики»
Кафедра математической кибернетики и информационных технологий
Практическое задание №3 по дисциплине «Системное программирование»:
«Работа с командами условного и безусловного перехода. Работа с командами ввода/вывода данных. Выполнение прерываний в программе»
Выполнил
Проверил:
Фатхулин Тимур Джалилевич
Москва 2021 г.
Цель работы
Научиться работать с командами условного и безусловного перехода, с командами ввода/вывода данных. Научиться выполнять прерывания в программе.
Выполнение работы
Задание №1
Вычислить выражение 18*z*x*y-15*x*y*z+30+19*(x-y). Если задать величины x, y, z=1, то ответ? Все величины в выражении однобайтовые. Результат выдать на экран.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 18*z*x*y-15*x*y*z+30+19* (x-y)= if ;x=y=z=1
cdb 7
.code
start:
xor AX,AX
xor dX,dX
MOV AL,18
MUL [x]
MUL [y]
MUL [z]
mov bx,ax
MOV AL,15
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
add bx,30
MOV CL,19
MOV al,[x]
sub al,[y]
MUL cl
add ax,bx
invoke wsprintf,result,format d,ax,dx ;Convert the number to the string
invoke MessageBox,0,result,"multiply,add and subtract bytes",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат, полученный при значениях x = y = z = 1, показан на рисунке 1:
Рисунок 1 – Результат работы программы
Задание №1.1
Аналогично составьте программу с величинами: x, y, z=2.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 2 ; 20h
y db 2 ; 40h
z db2 ; 50h ; 18*z*x*y-15*x*y*z+30+19* (x-y)= if ;x=y=z=1
cdb 7
.code
start:
xor AX,AX
xor dX,dX
MOV AL,18
MUL [x]
MUL [y]
MUL [z]
mov bx,ax
MOV AL,15
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
add bx,30
MOV CL,19
MOV al,[x]
sub al,[y]
MUL cl
add ax,bx
invoke wsprintf,result,format d,ax,dx ;Convert the number to the string
invoke MessageBox,0,result,"multiply,add and subtract bytes",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат выполнения программы показан на рисунке 2:
Рисунок 2 – Результат работы программы
Задание №2
Вычислить выражение 2-30*z*x*y-16*x*y*z-41+4*(х-y).
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 2-30*z*x*y-16*x*y*z-41+4* (x-y) if ;x=y=z=1
c db2
.code
start:
xor AX,AX
xor dX,dX
MOV AL,30
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
MOV AL,16
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
sub bx,41
MOV CL,4
MOV al,[x]
sub al,[y]
MUL cl
MOV bx, 2
sub bx, ax
not bx
inc bx
add ax,bx
invoke wsprintf,result,format d,ax,dx ;Convert the number to the string
invoke MessageBox,0,result,"Calculation result (negative number): ",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Рисунок 3 – Результат работы программы
Задание №3
Вычислить выражение 129- z*x*y+x/y+85.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 2-30*z*x*y-16*x*y*z-41+4* (x-y) if ;x=y=z=1
c db2
.code
start:
xor AX,AX
xor dX,dX
MOV AL, [x]
MUL [y]
MUL [z]
sub bx,ax
MOV AL,[x]
DIV [y]
add bx,ax
add bx,85
MOV ax, 129
sub ax, bx
invoke wsprintf,result,format d,ax,dx ;Convert a number to a string
invoke MessageBox,0,result,"Calculation result: ",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 4:
Рисунок 4 – Результат работы программы
Задание №4
Вычислить выражение 70-17*x-65*y+13*z.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 2-30*z*x*y-16*x*y*z-41+4* (x-y) if ;x=y=z=1
c db2
.code
start:
xor AX,AX
xor dX,dX
MOV bx,70
MOV AL,17
MUL [x]
MOV bx,ax
MOV AL,65
MUL [y]
add bx,ax
MOV AL,13
MUL [z]
sub bx,ax
MOV ax, 70
sub ax, bx
invoke wsprintf,result,format d,ax,dx ;Convert a number to a string
invoke MessageBox,0,result,"Calculation result: ",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 5:
Рисунок 5 – Результат работы программы
Задание №5
Вычислить выражение 88*z-76*y+51*x.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%0d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is stored in this line
; after its conversion
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 2-30*z*x*y-16*x*y*z-41+4* (x-y) if ;x=y=z=1
c db2
.code
start:
xor AX,AX
xor dX,dX
MOV AL,88
MUL [z]
MOV bx,ax
MOV AL,76
MUL [y]
sub bx,ax
MOV AL,51
MUL [x]
add bx,ax
invoke wsprintf,result,format d,ax,dx ;Convert a number to a string
invoke MessageBox,0,result,"Calculation result: ",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 6:
Рисунок 6 – Результат работы программы
Задание №6
Вычислить выражение x*x*x-y*y*y-z*z*z*z+137. Если задать величины x, y, z=1. Все величины в выражении однобайтовые. Результат выдать на экран.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is saved in this line
; after its conversion
x db 01h
y db 02h
z db 05h
.code
start:
xor AX,AX
xor dX,dX
MOV AL,[x] ;byte multiplied by byte
MUL [x] ;result in AH,
MUL [x]
mov bx,ax
MOV AL,[y] ;byte multiplied by byte
MUL [y] ;result in AH,
MUL [y]
sub bx,ax
MOV AL,[z] ;byte multiplied by byte
MUL [z] ;result in AH,
MUL [z]
sub bx,ax
;mov bx,z
add bx,137
invoke wsprintf,result,format,bx,dx ;ax,dx ;Convert the number
invoke MessageBox,0,result,"change and subtract bytes",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 7:
Рисунок 7 – Результат работы программы
Задание №7
Вычислить выражение Z3-T3. В выражении используются однобайтовые величины.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is saved in this line
; after its conversion
x db 01h
y db 02h
z db 05h
.code
start:
xor AX,AX
xor dX,dX
MOV AL,[t]
MUL [t]
MUL [t]
MOV bx, ax
MOV AL,[z]
MUL [z]
MUL [z]
sub bx,ax
invoke wsprintf,result,format,bx,dx ;ax,dx ;Convert the number
invoke MessageBox,0,result,"change and subtract bytes",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 8. Значения Z = 2 и T = 1:
Рисунок 8 – Результат работы программы
Задание №8
Вычислить выражение Z^3 - T^3 + 45. В выражении используются однобайтовые величины.
Программный код:
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Setting the output format 16
formatd db "%d",0 ; Setting the output format 10
result db 256 dup(?) ;The result is saved in this line
; after its conversion
x db 01h
y db 02h
z db 05h
.code
start:
xor AX,AX
xor dX,dX
MOV AL,[t]
MUL [t]
MUL [t]
MOV bx, ax
MOV AL,[z]
MUL [z]
MUL [z]
sub bx,ax
add bx, 45
invoke wsprintf,result,format,bx,dx ;ax,dx ;Convert the number
invoke MessageBox,0,result,"change and subtract bytes",MB_OK ;Output
invoke ExitProcess,0 ;Exit the program
.end start
Результат показан на рисунке 9:
Рисунок 9 – Результат работы программы
Вывод
Я научился работать с командами условного и безусловного перехода, с командами ввода/вывода данных, а также выполнять прерывания в программе.