Главная
Популярная публикация
Научная публикация
Случайная публикация
Обратная связь
ТОР 5 статей:
Методические подходы к анализу финансового состояния предприятия
Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века
Ценовые и неценовые факторы
Характеристика шлифовальных кругов и ее маркировка
Служебные части речи. Предлог. Союз. Частицы
КАТЕГОРИИ:
|
Приклад програми з використанням IO.ASM
Формулювання завдання
Розробити програму обчислення Z залежно від значення символу ch по формулі:
(3v) / (2d)якщо ch ≥ 'n'
55, якщо ch < 'n'
де: v (байт) - вік студента (кількість повних років);
d (байт) - день народження студента.
Значення символу ch вводиться з клавіатури.
При тестуванні програми для виведення набутих значень Z використовувати модуль IO.ASM
Постановка завдання Для визначення типу величини Z проаналізуємо формулу її розрахунку. У першій, найбільш складній частині формули, Z - результат ділення чисел, означає під розміщення Z необхідно виділити масив з двох елементів (неповна частка і залишок). Тип обох результатів ділення співпадає з типом дільника, в даному випадку, цей твір 2*d, причому d по умові завдання - байт. Твір співмножників - байтів дає результат розміром слово. Таким чином, Z слід описати як масив з двох елементів-слів.
На початку програми треба передбачити виведення запрошення на введення будь-якого ASCII -символа. Для введення символу використовувати можливості переривання int 21h, причому для контролю за правильністю введення використовувати функцію 1h.
Після порівняння введеного символу із заданим виконати обчислення Z за відповідною формулою і перейти на блок виведення результату. Блок виводу має забезпечувати виведення двох результатів, якщо розрахунок виконується по першій частині формули, і одного - якщо по другій. Для коректної роботи блоку виводу ввести допоміжну змінну - прапор, що має деяке початкове значення (наприклад, 0), що задається при її описі, і що змінюється (наприклад, на 1), якщо розрахунок виконується по першій частині формули. Блок в обох випадках забезпечує безумовне виведення одного результату (неповної частки або 55), а далі після аналізу прапора або виводить другий результат (залишок), або відразу виконує перехід на завершення програми. Перед виведенням залишку передбачити табуляцію - переведення курсора вправо на 8
При виконанні розрахунку по першій частині формули в цілях скорочення пересилок даних при діленні спочатку вирахувати знаменник 2*d, а потім чисельник 3*v. Треба врахувати, що дільник має тип - слово, отже, ділиме (чисельник) розміщується в подвійному слові DX: AX. В той же час чисельнику, який є результатом множення байтів 3*v, фактично вистачає слова, а саме, АХ. Означає в цьому конкретному випадку для отримання правильного результату перед діленням необхідно очистити регістр DX.
Для виведення чисел підключити до програми модуль IO.ASM.
2.12.3 Тестування програми
Початкові дані: d=28, v=20. При введенні символу f розрахунок робиться по першій частині формули, неповна частка дорівнює 1, а залишок 4. Якщо ввести символ t, то результат дорівнює 55
2.12.4 Лістинг програми
model small
include io.asm; підключення модуля
io.asm .stack 100h
.data d db 28v db 20
z dw?,?; для результату
zaprosh db 'Введіть символ-> ','$'
rez db 'Результат розрахунку -> ','$'
flag db 0;початкове значення прапора
.code start:; точка входу в програму
mov ax, @data; завантаження адреси сегмента данних
mov ds, ax
mov dx, offset zaprosh; вивод рядка
mov ah, 9h
int 21h
mov ah, 1h; ввод символа
int 21h; код символа в al
cmp al, ‘n’; порівняння кодів символів
jb menshe; якщо введенний символ менший, перейти на мітку на menshe
;********* ch≥s' - розрахунок першої частини *********
mov flag, 1; нове значення прапорця =1
mov al, 2; підготовка множення (знаменник)
mul d; [ax]=2d
mov bx, ax; копіювання 2d в bx
mov al, 3; чисельник
mul v; [ax]=3v
; для ділення чисельник має бути: в dx - старше слово,
; в ax - моладше слово (вже знаходиться)
mov dx, 0; очистка dx
div bx; неповна частка в ax, залишок в dx
mov z, ax; неповна частка в перше слово масива z
mov z+2, dx; залишок во друге слово масива z
jmp vivod; безузмовний перехід на блок виводу
; ************* розрахунок другої частини ***************
menshe: mov z, 55; результат в перше слово масива z
; ******************** блок виводу ************************
vivod: mov dx, offset rez; вивід рядка - повідомлення
mov ah, 9h
int 21h
outint z; вивод першого слова масива z
cmp flag, 0; якщо прапор=0, вивід завершено
je finish
; прапор змінився, продолженння виводу
mov dl, 9; вивод символа «табуляція»
mov ah, 2h
int 21h
outint z+2; вивод другого слова масива z
; завершення роботи
finish: mov ah, 1; затримка для вивчення результату
int 21h
mov ax, 4C00h
int 21h
end start
Варінти Завдань
| 1) (2X+3Y)Z, Y<2 та X>5
F= (3XX-Z)/Y, Y>0 або z<8
3Z, в інших випадках
2) 5/y+3x, x=>5 та y<>0
F= 4x-3z, z<2 або x<3
x+y+z в інших випадках
3) (4xx-3)/5+7y, x>5 або в>0
F=(y-3)/z, z<>0 та x<=5
5y+7, в інших випадках
4) (3x+9y)/(2+3z), z<>3 та в>10
F=7y+5x-z, y<8 або x<5
zz-3, в інших випадках
5) 6x+2y, x=5 або z>0
F=z-3/5y, y<>0 та x=0
4x+5y-z, в інших випадках
6) (7x-5)/7, y>0 або z=0
F= y-3+z, y<=10 та x=0
x+z+zz-2, в інших випадках
7) 4x+z, y=0 або x<5
F= 5y-3+6z/(z-1), x=0 та z<>1
x+y, в інших випадках
8) 3x+5, x>5 або y=0
F= 7y-7+6x/z, x<3 та z<>0
zz, в інших випадках
9) 4x/5y, y<>0 та x>5
F= 6y-3z, z>3 або x<3
6xx, в інших випадках
10) 7x+xx-1, x<10 та z=0
F= 5y/z, x>5 або y=0
5x+3y+3, в інших випадках
11) (2X+3Y)Z, Y<2 та X>5
F= (3XX-Z)/Y-1, x>0 або z<8
3Z в інших випадках
12) 5/y+3x, x=5 або y<>0
F= 4x-3z, y<2 та x>3
x+y+z в інших випадках
25) a/b-37 a>b
3 a=b
(a3-b)/a в інших випадках
|
13) (3xx+9y)/2+3*в, z<>3 та в>0
F=7y+5x-6z, z>1 або x<5
zz-5x, в інших випадках
14) 6x+2y+1, x=5 або z=0
F=z-3+4x, y=0 та z>10
4x+5y-z, в інших випадках
15) (3x-5)/7+1, y>15 або z=0
F= y-3+z, y<10 та x=0
x+z+2y, в інших випадках
16) 4x+z/7, y=0 або x<5
F= 5y+6z/(z-1), x=0 та z<>1
x+y-z, в інших випадках
17) 3x+2z+5, x>5 або y=0
F= 7y-7+6x/z, x<3 та z<>0
z+3x, в інших випадках
18) 4x/5y+3z, y<>0 та x>15
F= 8y-3z-1, z>3 або x<3
6x+y, в інших випадках
19) 7x+yx-1, x<12 та z=0
F= 5y/z+2, x>5 або y>=10
4x+3y+7, в інших випадках
20) (2XY+3Y)Z, Y<2 та X>5
F= (3XX-Z)/3+Y, Y>0 або z<=8
3Z+1, в інших випадках
21) y/2+3x, x>=5 або y<>0
F= (4x-3z)/(2x+1), z<2 та x>3
x+y+z в інших випадках
22) (4x-3)/5+7yz, x>=5 або в>0
F=(y-3)/z+x, z<>0 та x<=5
5y+7, в інших випадках
23) (3x+9)/(3+3z), z<>-1 та в>10
F=7y+5x-z, z>3 або x<5
(z-3)x, в інших випадках
24) 6x+2y-1, x<=5 або z>6
F=z-3/5y, y<>0 та x=0
4x+5y-z, в інших випадках
26) b/a-55 a>b
F=7y+5x-z, z>3 або x<5
6x+y, в інших випадках
27) 7x+5, x>5 або y=0
F= 7y-7+6x/z, x<3 та z<>0
2z-4x, в інших випадках
|
ДОДАТОК
Система команд мікропроцесора Intel 8086
| Мнемокод
| Дія
| |
|
| | AAA
| Коригування додавання для представлення в кодах ASCII
| | FFD
| Коригування ділення для представлення в кодах ASCII
| | AAM
| Коригування множення для представлення в кодах ASCII
| | AAS
| Коригування віднімання для представлення в кодах ASCII
| | ADC
| Додавання з переносом
| | ADD
| Додавання
| | AND
| Логічне І
| | CALL
| Виклик процедури
| | CBW
| Перетворення байта в слово
| | CLC
| Обнулення прапора переносу
| | CLI
| Обнулення прапора переривання
| | CMC
| Обернення прапора переносу
| | CMP
| Порівняння значень
| | CMPS, CMPSB, CMPSB
| Порівняння рядків
| | CWD
| Перетворення слова в подвійне слово
| | DAA
| Коригування додавання для представлення в десятичній формі
| | DAS
| Коригування віднімання для представлення в десятичній формі
| | DEC
| Зменшення значення на 1
| | DIV
| Ділення
| | ECS
| Передача команди співпроцесору
| | HLT
| Зупинка програми
| | IDIV
| Ділення цілих чисел
| | IMUL
| Множення цілих чисел
| | IN
| Зчитування значення з порту
| | INC
| Прирощення значення на 1
| | INT
| Переривання
| | INTO
| Переривання при переполнении
| | IRET
| Повернення після переривання
| | JA, JNBE
| Перехід, якщо більше
| | JAE, JNB
| Перехід, якщо більше або дорівнює
| | JNC
| Перехід, якщо нема переносу
| | JB, JNAE
| Перехід, якщо нижче
| | JC
| Перехід, якщо є перенос
| | JBE, JNA
| Перехід, якщо ниже або дорівнює
| | JCXZ
| Перехід, якщо значення регістра CX дорівнює 0
| | JE, JZ
| Перехід, якщо дорівнює
| | JG, JNLE
| Перехід, якщо більше
| | JGE, JNL
| Перехід, якщо більше або дорівнює
| | JL, JGNE
| Перехід, якщо менше
| | JLE, JNG
| Перехід, якщо менше або дорівнює
| | JMP
| Перехід безумовний
| | JNE, JNZ
| Перехід, якщо не дорівнює
| | JNO
| Перехід, якщо нема переполнення
| | JNP, JPO
| Перехід, якщо нема четности
| | JNS
| Перехід, якщо знакови й разряд = 0
| | JO
| Перехід, якщо переповнення
| | JP, JPE
| Перехід, якщо есть парність
| | JS
| Перехід, якщо знаковий разряд =1
| | LAHF
| Завантаження регістра AH прапори
| | LDS
| Завантаження вказівникя с використанням регістра DS
| | LEA
| Завантаження виконавчої адреси
| | LES
| Завантаження вказівника с використаням регістра ЕS
| | LOCK
| Блокування шини
| | LODS, LODSB, LODSW
| Завантаження рядка
| | LOOP
| Повторення цикла до кінця лічильника
| | LOOPE, LOOPZ
| Повторення цикла, якщо дорівнює
| | LOOPNE, LOOPNZ
| Повторення цикла, якщо не дорівнює
| | MOV
| Пересилка значення
| | MOVS, MOVSB, MOVSW
| Пересилка рядка
| | MUL
| Множення
| | NEG
| Обернення знака
| | NOP
| Нема операції
| | NOT
| Обернення бітів
| | OR
| Логічне АБО
| | OUT
| Вивід значення в порт
| | POP
| Видобування значення из стека
| | POPF
| Видобування прапорів із стека
| | PUSH
| Розміщення значення в стек
| | PUSHF
| Розміщення прапорів в стек
| | RCL
| Зсув вліво циклічно с прапорцем переносу
| | RCR
| Зсув вправо циклічно с прапорцем переносу
| | REP, REPE, REPZ
| Повторення, доки дорівнює
| | REPNE, REPNZ
| Повторення, доки не дорівнює
| | RET
| Повернення в модуль (процедуру)
| | ROL
| Зсув вліво циклічно
| | ROR
| Зсув вправо циклічно
| | SAHF
| Завантажити прапори з регістра AH
| | SAL, SHL
| Зсув вліво арифметично
| | SAR
| Зсув вправо арифметично
| | SBB
| Віднімання с зайомом
| | SCAS, SCASB, SCASW
| Сканування рядка
| | SHR
| Зсув вправо логічний
| | STC
| Установка прапора переносу
| | STD
| Установка прапора направлення
| | STI
| Установка прапора переривання
| | STOS, STOSB, STOSW
| Збереження рядка
| | SUB
| Віднімання
| | TEST
| Перевірка
| | WAIT
| Очікування
| | XCHG
| Обмін значень
| | XLAT
| Вибір значень из таблиці
| | XOR
| Логічне АБО що виключає
|
Не нашли, что искали? Воспользуйтесь поиском:
|