Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Макушкиной по МОЯ.doc
Скачиваний:
46
Добавлен:
16.11.2019
Размер:
1.33 Mб
Скачать

2.5 Пример

Рассмотрим простейший пример с использованием ввода, вывода и различных видов переходов.

Необходимо ввести с клавиатуры значение двух переменных a и x. Если а<x, то сложить их значения, а иначе из х отнять а.

data segment

a db ?

x db ?

per db 10,13,'$'

mesa db 10,13,'Input a: $'

mesx db 10,13,'Input x: $',10,13

data ends

s segment stack

db 128 dup(?)

s ends

code segment

main:

assume ss:s,ds:data,cs:code

mov ax,data

mov ds,ax

mov dx,offset mesa

mov ah,9 ;Приглашение на ввод а

int 21h

mov ah,1 ;Считывание нажатого символа

int 21h

mov a,al ;Запись считанного символа в а

mov dx,offset mesx

mov ah,9 ;Приглашение на ввод х

int 21h

mov ah,1 ;Считывание нажатого символа

int 21h

mov x,al ;Запись считанного символа в х

mov dx,offset per

mov ah,9 ;Перевод строки

int 21h

mov al,x

cmp a,al

jl Lower ;Если а<х,то перейти на метку Lower. Иначе на метку Higher

Higher:

mov al,a

sub al,x

add al,30h ;Коррекция по вычитанию

jmp short l1

lower:

mov al,x ;В регистр al записываем результат сложения а и х

add al,a

sub al,30h ;Корекция по сложению

l1:

mov dl,al

mov ah,2 ;Вывод содержимого dl на экран

int 21h

mov ah,0 ;Ожидание нажатия клавиши

int 16h

mov ah,4ch

int 21h

code ends

end main

Остановимся подробнее на строках, в которых происходит коррекция по сложению и вычитанию. Так как Ассемблер не способен обрабатывать просто десятичные числа, то необходимо придумывать алгоритмы обработки самостоятельно. Удобнее всего приводить их к нераспакованному десятичному виду.

При чтении с клавиатуры происходит чтение именно символа, и в регистр записывается его код. Например у чисел 1 и 5 коды соответственно 31h и 35h. Чтобы привести к нераспакованному десятичному виду необходимо привести их к виду 01h и 05h. Эти коды имеют символы отличные от 1 и 5, но над ними гораздо удобнее выполнять арифметические операции. Существуют специальные команды коррекции, но о них вы узнаете позже.

2.6 Задания к лабораторной работе

В соответствии с вариантом напишите программу на языке ассемблера с полным описанием сегментов для вычисления значения y. Используйте, где требуется, 32х-разрядные регистры.

1

; ; .

2

; ; .

3

; ; .

4

; ; .

5

; ; .

6

; ; .

7

; ; .

8

; ; .

9

; ; .

10

; ; .

11

; ; .

12

; ; .

13

; ; .

14

; ; .

15

; ; .

16

; ; .

17

; ; .

18

; ; .

19

; ; .

20

; ;

21

; ; .

22

; ; .

23

; ; .

24

; ; .

25

; ; .