Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет_ук_Ассемблер.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
311.81 Кб
Скачать

-3- -4-

Целью лабораторных работ является изучение языка Ассемблер для персональных ЭВМ типа IBM PC, а также овладение навыками программирования на языке Ассемблера.

1.Оформление лабораторных работ.

Отчет должен содержать следующие пункты:

  1. Задание.

  2. Контрольный пример.

  3. Блок-схема (кроме лабораторной работы 1)

  4. Текст программы.

  5. Результаты выполнения программы.

2.Лабораторная работа 1. Вычисление арифметического выражения.

Целью работы является изучение команд, выполняющих основные арифметические действия, а также процедур: печати значений целых чисел и печати текстов.

Для выполнения этой работы следует взять за основу исходный текст программы “Labn1.ASM”. В сегмент данных вписать свои переменные и их значения. В сегмент кодов в процедуру MAIN ввести операторы, выполняющие действия, соответствующие индивидуальному заданию.

Ниже приведен пример заполнения текста программы для вычисления Y=(A+B)/C2.

DSEG SEGMENT

; индивидуальные переменные начало

a dw 3

b dw 8

c dw -2

;индивидуальные переменные конец

y dw ?

text1 db 10,13,'Вычисление значения функции y = (a + b) / c*с',10,13,'$'

text db 'ответ y=$'

buffer db 6 dup(?),'$'

DSEG ENDS

STACKSG SEGMENT

dw 100 dup(?)

stacksg ends

codes segment

main proc far

assume cs:codes,ds:dseg,ss:stacksg

mov ax,dseg

mov ds,ax

lea dx,text1

call prt

; индивидуальная часть программы начало

mov ax,c

imul ax

mov bx,ax

mov ax,a

add ax,b

cwd

idiv bx

mov y,ax

; индивидуальная часть программы конец

lea dx,text

call prt

mov ax,y

call prn

mov ah,1 ; задержка экрана

int 21h

mov ah,4ch ; конец программы, выход в операционную систему

int 21h

main endp

; ***********************************************

prt proc ; процедура печати текста

; в регистре dx хранится адрес начала текста, который нужно напечатать

push ax

mov ah,09h

int 21h

pop ax

ret

prt endp

; ***********************************************

prn proc ; процедура печати целого числа

; в регистре ax хранится целое число, которое нужно напечатать

push bx

push dx

push ax

lea bx,buffer

call convba

mov dx,bx

mov ah,09h

int 21h

pop ax

pop dx

pop bx

ret

prn endp

; **************************************************

convba proc ; процедура перевода двоичного числа в строку ASCII-кодов

; в регистре ax хранится целое число, которое нужно преобразовать в ;строку ASCII-кодов

;в регистре bx - адрес начала поля, в котором будет получено число

; в формате ASCII-кодов.

push cx

push dx

push si

push ax

mov cx,6

c10:

mov byte ptr[bx],' '

inc bx

loop c10

mov si,10

or ax,ax

jns c20

neg ax

c20:

xor dx,dx

div si

add dx,30h

dec bx

mov [bx],dl

or ax,ax

jnz c20

pop ax

or ax,ax

jns c30

dec bx

mov byte ptr[bx],'-'

c30:

pop si

pop dx

pop cx

ret

convba endp

; *************************************************

codes ends

end main

Для защиты лабораторной работы нужно знать

  1. Типы сегментов. Регистры. Загрузка сегментных регистров.

  2. Команды сложения, вычитания, умножения, деления.

  3. Команда CALL.

  4. Процедуры PRT, PRN,. CONVBA.

Варианты заданий:

  1. Y=(A+B*C)/2

  2. Y=(A+B)*(C-D)/S2

  3. Y=(A-B2)/ (C-D)

  4. Y=A/B2-100/D

  5. Y=(A-B+C)2/S

  6. Y=(A+B)3-C/D

  7. Y=A3+B*C/(A-D)

  8. Y=((A+B)/(C-D))*S

  9. Y=(A2+B*C)/D

  10. Y=(A+B+C)/(2*D)

  11. Y=(A3+B*C)/A-D

  12. Y=(A3+B)*C/A

  13. Y=(A+B2)/(C2-D3)

  14. Y=A+B2/(C-D3)

  15. Y=(A-B)/(C2+D3)

  16. Y=A/B+(C-D)/3

  17. Y=A*B-(C-D)/2

  18. Y=A3/B+C-D/3

  19. Y=(A*C-D)/(3*B)

  20. Y=3*A/(B+C-D)

  21. Y=A*B+C/D-L

  22. Y=(A*B+C)/D-L

  23. Y=A*B+C/(D-L)

  24. Y=A*(C+B)/D

  25. Y=(A*C+B)/D2

  26. Y=(A+C*B)/2*D

  27. Y=(A*C+B*D)/2

  28. Y=A2+(C+B)/(D-2)

  29. Y=A2*C+(B/D-5)

  30. Y=A*C+B2/D2

  31. Y=2*A*(C+B/(D+2))

  32. Y=(A*C+B)/(D2+10)

  33. Y=A*(C2-B)/D

  34. Y=A+(C-B)2/(D+4)