Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prakticheskaya_rabota_4.docx
Скачиваний:
8
Добавлен:
27.09.2019
Размер:
727.3 Кб
Скачать

Уо “Гомельский торгово-экономический колледж Белкоопсоюза”

Отчёт по лабораторным и практическим работам по дисциплине ”Микропроцессорная техника”

Выполнила:

Учащаяся группы П-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. Кодирование и декодирование команд организации циклов и загрузки исполнительного адреса.

Цель работы: ознакомиться со структурой и реализацией циклов в программе.

Задание для выполнения:

  1. Выполните все примеры, что содержатся в описании данной лабораторной работы.

  2. Проанализируйте работу программы примера для практики.

  3. Изучить условия организации циклических переходов на языке Ассемблера.

  4. Напишите программу, выводящую на экран слово «!!!!!!!Hello!!!!!!!» используя команды циклических переходов (3 варианта).

  5. Получите задание у преподавателя (один из пяти вариантов табл.№1) и, пользуясь правилами оформления ассемблерных программ, создайте программу, выводящую на экран слово D, число раз.

  6. Программу ассемблируйте в файле типа *.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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]