Уо “Гомельский торгово-экономический колледж Белкоопсоюза”
Отчёт по лабораторным и практическим работам по дисциплине ”Микропроцессорная техника”
Выполнила:
Учащаяся группы П-22
Шаплыка Виталий
Проверила преподаватель:
Мартьянова Л.М.
2011-2012 Учебный год
Практическая работа №2
Изучение особенностей выполнения арифметических команд, их влияние на флаги состояния регистра флагов. Представление перечисленных команд в машинных кодах, декодирование команд.
Цель работы: Изучение особенностей выполнения арифметических команд, их влияние на флаги состояния регистра флагов. Представление перечисленных команд в машинных кодах, декодирование команд.
Задание №1
Составить арифметическое выражение в соответствии со своим вариантом.
Вариант №2
Y = (b + n) + (w – b) – (w * n) + (w / b) – (w + 1) – (w – 1).
Код программы:
.model small
.stack 256h
.data
a1 db 14h
a2 db 14h
a3 dw 7h
a4 db 2h
a5 dw 7h
a6 db 2h
a7 dw 4h
a8 db 2h
a9 dw 3h
a10 dw 4h
x dw ?
.code
sensey:
mov ax,@data
mov ds,ax
xor ax,ax
mov al,a1
add al,a2
cbw
mov bx,ax
mov al,a4
cbw
mov dx, ax
mov ax, a3
sub ax, dx
add bx, ax
mov ax,a5
mul a6
sub bx,ax
mov ax,a7
div a8
add bx,ax
mov ax,a9
inc ax
sub bx,ax
mov ax,a10
dec ax
sub bx,ax
mov x,bx
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov al,bh
int 21h
mov dl,bl
int 21h
mov ax,4c00h
int 21h
end sensey
Результат:
Практическая работа №3
Изучение особенностей выполнения команд пересылки кодов, их сравнения, их влияния на флаги состояния регистра флагов. Представление перечисленных команд в машинных кодах, декодирование команд.
Цель работы: Изучение особенностей выполнения команд пересылки кодов, их сравнения в ассемблерных программах.
Задание №1
Набрать и запустить в отладчике примеры программ (листинг 1 – 3).
Листинг 1:
code segment
assume cs:code,ds:code
exword label word
exbyte label byte
mov ax,bx
mov bx,ax
mov cx,exword
mov exword,dx
mov ch,exbyte
mov exbyte,dh
mov si,1000
mov bl,23
mov exword,2000
mov exbyte,46
mov ax,exword
mov al,exbyte
mov exword,ax
mov exbyte,al
mov ax,exword
mov ds,ax
mov exword,ds
mov ax,es
mov ax,code
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov al,bh
int 21h
mov dl,bl
int 21h
mov ds,ax
int 21h
code ends
end
Результат:
Листинг 2:
Задание №2
Создайте исполняемый файл в соответствии с текстом листинга 4.
.model small
.stack 256h
.data
message db 'Zapustite atu programmy v otladchike','$'
perem_1 db 0ffh
perem_2 dw 3a7fh
perem_3 dd 0f54d567ah
mas db 10 dup ('')
pole_1 db 5 dup(?)
adr dw perem_3
fin db 'Konec segmenta dannyx programmy','$'
.code
start:
mov ax,@data
mov ds,ax
mov ah,09h
mov dx,offset message
int 21h
mov ax,4c00h
int 21h
end start
Результат:
Задание №3
Создайте исполняемый файл в соответствии с текстом листинга 5.
.model small
.stack 256h
.data
b db 17h
c db 45h
sum db 2 dup(0)
.code
start:
mov ax,@data
mov ds,ax
xor ax,ax
mov al,b
add al,c
daa
jnc $+6
mov sum+1,ah
mov sum,al
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov al,bh
int 21h
mov dl,bl
int 21h
mov ax,4c00h
int 21h
end start
Результат:
Задание №4
Создайте исполнительный файл в соответствии с текстом листинга 6.
.model small
.stack 256
.data
a db ?
b db ?
c db ?
y dw 10
.code
main:
mov ax,@data
mov ds,ax
xor ax,ax
mov al,a
cbw
mov bx,bx
add ax,bx
idiv c
exit:
mov ax,4c00h
int 21h
end main
Результат:
Практическая работа №4
Изучение особенностей выполнения логических команд, команд арифметических, логических и циклических сдвигов, их влияние на флаги состояния регистра флагов. Представление перечисленных команд в машинных кодах, кодирование команд.
Цель работы: Изучить форматы и правила работы с командами манипулирования битами микропроцессора i8086.
Задание №1
Вариант 2
Разработайте программу пересылки блока битов из одной битовой строки (bit_str2 dd ᴓ12345678h) в другую (bit_str1 dd ᴓ abcdefabh). В результате выполнения программы получите строку (bit_str1 dd ᴓ abcdef12h).
.model small
.stack 256
.data
bit_s1 dd 012345678h
bit_s2 dd 0abcdefabh
.code
main:
mov ax,@data
mov ds,ax
xor ax,ax
.386
mov eax,bit_s1
shld eax,ebx,8
rol eax,24
mov ebx,bit_s2
shr ebx,8
shld ebx,eax,8
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
mov ax,4c00h
int 21h
end main
Результат:
Практическая работа №5
Изучение механизма передачи управления в нужную точку программы при внутрисегментном коротком переходе. Характеристика работы процессора по выполнению команд условных переходов.
Цель работы: Изучение механизма передачи управления в нужную точку программы при внутрисегментном коротком переходе.
Задание №01.
Набрать и запустить в отладчике примеры программ (листинг 1).
.model tiny
.code
org 100h
begin:
mov cx,10
mov bx,15
test cx,bx
jne label12
jne label12
ret
mov ah,9
mov dx,offset string
int 21h
ret
string db'Odno iz chisel =0','$'
label12:
mov ah,9
mov dx,offset string1
int 21h
ret
string1 db 'ne ravno 0','$'
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
end begin
Результат:
Задание №2
.model small
.stack 256
.data
n equ 10
s1 db 'Alina','$'
.code
start:
mov ax,@data
mov ds,ax
xor ax,ax
mov cx,n
lea bx,s1
m1:mov al,[bx]
cmp al,61h
jb next
cmp al,7ah
ja next
and al, 11011111b
mov [bx],al
next:
inc bx
dec cx
jnz m1
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
end start
Результат:
Задание 3
.model small
.stack 100h
.data
len equ 10
mas db 4,8,0,2,0,3,4,0,6,1
.code
start:
mov ax,@data
mov ds,ax
mov cx,len
xor ax,ax
xor si,si
cycl:
jcxz exit
cmp mas[si],0
jne m1
inc al
m1:
inc si
dec cx
jmp cycl
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
end start
Результат:
Задание №4
.model small
.stack 100h
.data
len equ 10
mas db 'qwerty','$'
.code
start:
mov ax,@data
mov ds,ax
mov cx,len
xor ax,ax
xor si,si
cycl:
jcxz exit
cmp mas[si],'y'
jne m1
inc al
m1:
inc si
dec cx
jmp cycl
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
end start
Результат:
Практическая работа №6
Изучение особенностей выполнения команд, организующих циклы и команды загрузки исполнительного адреса (LEA) . Характеристика работы процессора по выполнению группы команд LOOPx и LEA. Кодирование и декодирование команд организации циклов и загрузки исполнительного адреса.
Цель работы: Ознакомиться со структурой и реализацией циклов в программе.
Задание №1
Создайте исполняемый файл в соответствии с листингом 1.
.model small
.386
.stack 100h
.data
m dw L2
dw L3
.code
start:
mov ax,@data
mov ds,ax
xor ax,ax
jmp L1
db 4 dup ('0')
L1 label near
lea bx,m
jmp [bx]
db 5 dup ('1')
L2:
add bx,2
jmp[bx]
db 10 dup ('a')
L3:
mov word ptr[bx],offset exit
jmp [bx]
exit:
jmp $+2
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov dl,bh
int 21h
mov dl,bl
int 21h
end start
Результат:
Задание №2
cseg segment
assume cs:CSEG, mov ah,10h
int 16h
ret
wait_key endp
out_char proc
push cx
push ax
push es
push ax
mov ax,0B800h
mov es,ax
mov di,0
mov cx,2000
pop ax
mov ah,31
next_sym:
mov es:[di],ax
inc di
loop next_sym
pop es
pop ax
ds:CSEG,es:CSEG,ss:CSEG
org 100h
begin:
call wait_key
cmp al,27
je quit_prog
cmp al,0
je begin
call out_char
jmp begin
quit_prog:
mov al,32
call out_char
int 20h
Waiy_key proc
pop cx ret
out_char endp
CSEG ends
end begin
Результат:
Практическая работа №7
Изучение особенностей выполнения команд, организующих циклы и команды загрузки исполнительного адреса (LEA). Характеристика работы по выполнению группы команд LOOPx и LEA. Кодирование и декодирование команд организации циклов и загрузки исполнительного адреса.
Цель работы: ознакомиться со структурой и реализацией циклов в программе.
Задание для выполнения:
Выполните все примеры, что содержатся в описании данной лабораторной работы.
Проанализируйте работу программы примера для практики.
Изучить условия организации циклических переходов на языке Ассемблера.
Напишите программу, выводящую на экран слово «!!!!!!!Hello!!!!!!!» используя команды циклических переходов (3 варианта).
Получите задание у преподавателя (один из пяти вариантов табл.№1) и, пользуясь правилами оформления ассемблерных программ, создайте программу, выводящую на экран слово D, число раз.
Программу ассемблируйте в файле типа *.com или *.exe (на выбор).
№ варианта |
Выводимые данные |
Формула расчёта |
A |
B |
C |
2 |
Hello world |
D=A-B+c |
57 |
52 |
14 |
Задание №1.
Организация цикла с помощью команды JMP (Первый способ).
.model tine
.code
org 100h
begin:
mov cx,10
label1:
mov ah,9
mov dx,offset String
int 21h
dec cx
jnz label1
ret
string db 'privet',13,10,'$'
end begin'
Резульатат:
Организация цикла с помощью команды LOOP (Второй способ).
.model tine
.code
org 100h
begin:
mov cx,10
label1:
mov ah,9
mov dx,offset String
int 21h
dec cx
loop label1
ret
string db 'privet','$'
end begin'
Результат:
Организация цикла с помощью команд Dec и Jnz (третий способ).
.model tine
.code
org 100h
begin:
mov cx,10
label1:
mov ah,9
mov dx,offset String
int 21h
dec cx
jnz label1
ret
string db 'privet ','$'
end begin'
Результат:
Задание №2
Напишите программу, выводящую на экран все ACII-символы.
.model tiny
.code
org 100h
begin:
mov cx,256
mov dl,0
mov ah,2
cloop: int 21h
inc dl
test dl,0Fh
jnz continue_loop
push dx
mov dl,0Dh
int 21h
mov dl,0Ah
int 21h
pop dx
continue_loop
loop cloop
ret
end begin
Результат:
Задание №3
Напишите программу, выводящую на экран слово «!!!!! HELLO!!!!! ».
.model tiny
.code
org 100h
begin:
mov cx,1
label1:
mov ah,9
mov dx,offset String
int 21h
loop label1
ret
string db'!!!!!Hello!!!!! $'
end begin
Результат:
Задание №4
Вариант 2
Hello World (123)
.model tiny
.code
org 100h
begin:
mov cx,123
label1:
mov ah,9
mov dx, offset string
int 21h
loop label1
ret
string db'Hello World $'
end begin
Результат:
Лабораторная работа №8
Использование механизма функционирования команд работающих со стеком, запись, считывание информации в стек, вызов подпрограмм, возврат из подпрограмм.
Пример №1.
Фрагмент программы, содержащий вызов процедуры с передачей аргументов через стек:
s_s segment stack "stack"
dw 12 dup (?)
s_s ends
d_s segment
aa dw 10
d_s ends
c_s segment
assume ss:s_s,ds:d_s,cs:c_s
begin:
mov ax,d_s
mov ds,ax
push aa
call pr1
pop ax
mov ah,4ch
int 21h
pr1 proc near
;
push bp
mov bp,sp
;
mov ax,[bp+4]
add ax,158h
mov dx,ax
;
mov sp,bp
pop bp
ret
;
pr1 endp
c_s ends
end begin
Результат:
Пример №2.
Программа, использующая вызов процедуры:
s_s segment stack "stack"
dw 12 dup (?)
s_s ends
d_s segment
aa dw 10
d_s ends
c_s segment
assume ss:s_s,ds:d_s,cs:c_s
begin:
mov ax,d_s
mov ds,ax
call pr1
call pr1
mov ah,4ch
int 21h
pr1 proc near
push ax
mov ax,aa
pop ax
ret
pr1 endp
c_s ends
end begin
Результат:
Пример №3.
Программа на языке ассемблер для вычисления y. Значения у1 и у2 необходимо вычислить в программах; параметры в программы передавать через стек; результат также возвращать через стек.
.model small
.stack 100h
.data
a db 6
x db 2
c db 3
y1 db 0
y2 db 0
y db 0
.code
y_1 proc
push bp
mov bp,sp
mov al,[bp+4]
div c
mov bl,2
cmp al,bl
je m2
cmp al,bl
jne br2
m2:
mov bl,[bp+6]
mul al
mov y1,bl
pop bp
ret
br2:
mov bl,9
mov y1,bl
pop bp
ret
y_1 endp
y_2 proc
push bp
mov bp,sp
mov al,[bp+4]
mov bl,[bp+6]
cmp al,bl
jg ma
cmp al,[bp+6]
jng bra
ma:
sub bl,al
mov y2,al
pop bp
ret
bra:
add bl,2
mov y2,al
pop bp
ret
y_2 endp
begin:
mov ax,@data
mov ds,ax
xor ax,ax
mov al,a
push ax
mov al,x
push ax
call y_1
call y_2
mov al,y1
mul bl
mov y,al
mov ah,4ch
int 21h
end begin
Результат:
Практическая работа №9/1.
Разработка программ, вызывающих программное прерывание и передачу управления по заданному вектору.
Цель работы: изучить принцип работы программ управления прерываниями.
Задание 1
Составить программу, выводящую на экран запрос на ввод двух чисел, с выводом результата их сложения в десятичном коде.
.model tiny
.code
org 100h
.286
start:
mov dx,offset mes1
mov ah,9
int 21h
mov dx,offset buffer
mov ah,0ah
int 21h
mov dx,offset crlf
mov ah,9
int 21h
xor di,di
mov ax,0h
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx
mov cl,10
asc2hex:
mov bl,byte ptr bcontents[di]
sub bl,'0'
mul cx
add ax,bx
inc di
cmp di,si
jb asc2hex
push ax
mov dx,offset mes2
mov ah,9
int 21h
mov dx,offset buffer
mov ah,0ah
int 21h
mov dx,offset crlf
mov ah, 9
int 21h
xor di,di
mov ax,0h
xor ch,ch
xor bx,bx
mov si,cx
mov cl,10
asc2hex2:
mov bl,byte ptr bcontents[di]
sub bl,'0'
mul cx
add ax,bx
inc di
cmp di,si
mov bx,ax
mov dx,offset mes3
mov ah,9
int 21h
pop ax
add ax,bx
mov bx,10
xor di,di
l2:
xor dx,dx
div bx
add dl,030h
dec di
mov buf_end[di],dl
cmp ax,00h
jnz l2
lea dx,buf_end[di]
mov ah,09h
int 21h
el:
mov ah,0
int 16h
int 20
ret
buf db 16 dup(?)
buf_end db'$'
mes1 db "vvedite 1-e chislo: $"
mes2 db "vvedite 2e chislo : $"
mes3 db "summa chisel ravna: $"
crlf db 0dh, 0ah,'$'
buffer db 6
blength db ?
bcontents:
a dw 0
b dw 0
end start
Результат:
Задание №2
Ассемблер: вывод числа в десятичной форме.
model tiny
.code
org 100h
start:
mov ax,9
push -1
mov cx,10
l:mov dx,0
div cx
push dx
cmp ax,0
mov ah,2h
l2:pop dx
cmp dx,-1
je ex
add dl, '0'
int 21h
ex:mov ax,4c00h
int 21h
end start
Результат:
Задание №3
Напишите и выполните программу, которая определяет размер памяти компьютера (INT 12H), преобразует полученное значение в ASCII-формат и выводит результат на экран в следующем виде:
Размер памяти nnn байтов.
.model tiny
.code
.386
org 100h
start:
mov ah,9
mov dx,offset pr
int 21h
mov al,015h
out 070h,al
in al,071h
mov bl,al
mov ax,bx
mov bx,10
xor di,di
l1:
xor dx,dx
div bx
add dl,030h
dec di
mov buf_end[di],dl
mov ah,09h
int 21h
mov ah,9
mov dx,offset pr
int 21h
mov al,017h
out 070h,al
in al,071h
mov bh,al
mov ax,bx
mov bx,10
xor di,di
l2:
xor dx,dx
div bx
add dl,030h
dec di
mov buf_end[di],dl
cmp ax,00h
inz l2
lea dx,buf_end[di]
mov ax,09h
int 21h
int 20
ret
buf db 16 dup (?)
buf_end db '$'
pr db 'bait, razmer rasshirenoi pamati: ','$'
pr3 db 'bait','$'
end start
Результат:
Практическая работа №9/2.
Разработка программ, вызывающих программное прерывания и передачу управления по заданному вектору.
Цель работы: изучить принцип работы программ управления прерывания.
Задание №1
Ассемблировать программу. Исследовать поведение команды цикла с проверкой в отладчике.
;prg_10_4.asm
.model small
.stack 100h
.data
len equ 10
mas db 1,1,9,8,2,7,8,3,2,4
message db 'V pole mas net elementov =0, $'
.code
start:
mov ax,@data
mov ds,ax
mov cx,len
xor ax,ax
xor si,si
jcxz exit
mov si,-1
cycl:
inc si
cmp mas[si],0
loopnz cycl
jz exit
;
mov ah,9
mov dx,offset message
int 21h
exit:
aam
add ax,3030h
mov bx,ax
mov ah,02h
mov al,bh
int 21h
mov dl,bl
int 21h
mov ax,4c00h
int 21h
end start