На головну

Приклади програм

  1. II. Випишіть з тексту приклади вживання в англійському реченні неособистих форм дієслова.
  2. II. Випишіть з тексту приклади вживання в англійському реченні неособистих форм дієслова.
  3. II. Регіональна програма капітального ремонту
  4. III етап. Складання програмного коду
  5. IV етап - Запуск програми 1 сторінка
  6. IV етап - Запуск програми 2 сторінка
  7. IV етап - Запуск програми 3 сторінка

Приклад 1. Обчислити повну поверхню паралелепіпеда зі сторонами А, В і С. Вважати, що вихідні значення знаходяться в осередках ОЗУ. Результат також помістити в комірку пам'яті.

Рішення. Повна поверхня паралелепіпеда обчислюється за формулою

S = 2 * (A * B + A * C + B * C)

Для спрощення програми вираз зручно представити у вигляді S = 2 * [А * (В + С) + В * С]

програма 134

0000 01ЕО (22) => R0 В => R0

0002 0022

0004 0101 R0 => Rl В => Rl

0006 02Е0 R0 + (24) => R0 В + С

0008 0024

000А 05Е0 R0 * (20) => R0 A * (В + С)

000С 0020

000Е 05Е1 Rl * (24) => Rl В * С

0010 0024

0012 0210 R0 + Rl => R0 A * (В + С) + В * С

0014 0200 R0 + R0 => R0 2 * [A * (В + С) + В * С]

0016 010Е R0 => (26) результат => S

0018 0026

001A 0F00 останов

..........

0020 0002 А

0022 0003 В

0024 0004 З

0026 0034 S

Примітка. Не забувайте, що відповідь 34 в памятіЕВМ представленв шестнадцатеричной системі. У десятковій, як і належить, вийде 52.

Приклад 2. Організувати введення латинських букв таким чином: програма приймає латинську букву і обробляє її так, щоб вона завжди була заголовною.

Рішення. Головна «хитрість» рішення полягає в тому, щоб зрозуміти, чим відрізняються великі літери від малих. Для цього з таблиці ASCII, наведеної в розділі 1, виберемо навмання одну з букв і випишемо в двійковому вигляді коди заголовного і сатиричного символів. Наприклад, для літери R отримаємо

R 0101 0010

r 0111 0010

Повторивши аналогічні дії ще для кількох літер, зробимо висновок, що коди заголовних ч малих літер відрізняються єдиним бітом - п'ятим, якщо вважати молодший біт за нульовою. Запам'ятаємо цей факт, оскільки він справедливий для будь-якого сучасного комп'ютера.

Отже, для нашої задачі потрібно зберегти всі біти, крім п'ятого, значить потрібно виконати логічну операцію И з константою

1101 1111 = DF,

після чого будь-який код «втратить» непотрібний нам біт, зберігаючи всі інші.

Ще однією особливістю рішення є активне використання подпрограмміз ПЗУ. Оскільки при виклику підпрограм обов'язково використовується стековая пам'ять, то повинен бути коректно визначено покажчик стека SP; програма починає роботу з установки покажчика стека.

програма 135

0000 0E6D 26 => SP установка покажчика стека

0002 0026

0004 9C0D виклик п / п 40FE введення символу (без луна-друку!)

0006 40FE

0008 0101 R0 => Rl зберегти введений символ

000A 07D0 DF and R0 => R0 зробити букву заголовної

000C 00DF

000E 9C0D виклик п / п 4088 вивести результат

0010 4088

0012 0F00 останов

Приклад 3. Знайти максимум з трьох чисел, що знаходяться в регістрах Rl, R2 і R3. Переписати найбільше з них в R0.

Рішення. Спочатку максимальне з чисел в Rl і R2 занесемо в R0. Після цього, якщо R3 виявиться більше R0, «виправимо становище», переписавши як відповідь R3.

програма 136

0000 0412 порівняти R2 з Rl

0002 3D04 якщо <0, то РС = РС + 4 до запису Rl (до 0008)

0004 0120 R2 => R0 запам'ятати R2

0006 1D02 РС = РС + 2 обхід другої гілки (до 000A)

0008 0110 Rl => R0 запам'ятати Rl

000A 0403 порівняти R3 з R0

000C 3D02 якщо <0, то РC = РС + 2 до виходу (до 0010)

000E 0130 R3 => R0 запам'ятати R3

0010 0F00 останов

Приклад 4. Знайти суму перших 100 натуральних чисел.

Кажуть, таке завдання колись вирішив в розумі юний Гаусс, коли навчався в школі. Ми будемо вирішувати завдання «в лоб», т. Е. Чесно сумміровть за допомогою комп'ютера. Рішення. Помістимо в R3 обробляється в даний момент число N (змінюється від 1 до 100), а в R0 - результуючу суму S. Задамо їм початкові значення і будемо циклічно додавати до S поточне значення N. Ознакою закінчення циклу буде ситуація, коли N> 100.

програма 137

0000 2113 1 => R3 1 => N

0002 2100 0 => R0 0 => S

0С04 0230 R0 + R3 => R0 S = S + N

0006 2213 R3 + 1 => R3 N = N + 1

0008 04D3 порівняти R3 з 100 порівняти N і 100

000A 0064

000C 6DF6 якщо ?0, то PC = PC + F6 якщо N?100,

до повторення (000E + FFF6 = 0004)

000E 0F00 останов

Приклад 5. Вивести на екран весь латинський алфавіт від А до Z. Рішення. Розмістимо в RO виведений латинський символ, початкове значення якого буде «А» (код 65 = 41h). Висновок здійснюватимемо зверненням до відповідної підпрограми ПЗУ. Для переходу до наступного символу алфавіту досить додати 1 до коду поточного символу (дуже схоже на перехід до наступного числа в попередньому прикладі). Залишається тільки перевірити, чи не виходить знову отриманий символ за латинський алфавіт, т. Е. Не перевищує його код 5Ah ( «Z»), і, якщо відповідь буде «так» (перевищує), то закінчити процедуру.

програма 138

0000 0E6D 26 => SP установка покажчика стека

0002 0026

0004 01D0 41 => R0 код першого символу

0006 0041 ( «А»)

0008 9C0D виклик п / п 4088 висновок символу

000А 4088

000С 2210 R0 + 1 => R0 наступний символ

000Е 04D0 сравнітьR0 з 5А його код ? «Z»?

0010 005А ( «Z»)

0012 6DF4 якщо ?0, то PC = PC + F4 до повторення (0008)

0014 0F00 останов

Приклад 6. У пам'яті, починаючи з адреси 001А, зберігається деякий текст, довжина якого дорівнює 15 (Fh) байтам Визначити номер першого, збігається із зразком, символу в тексті. При відсутності необхідного символу результат дорівнює 0 (це практично повний аналог функції POS в Паскалі).

Рішення Помістимо в R1 лічильник символів, в R2 - адреса поточного символу. Потім будемо порівнювати кожен символ тексту зі зразком в R0 і в разі збігу перервемо виконання циклу. При розбіжності будемо продовжувати цикл до теx пір, поки лічильник не перевищить Fh, т. Е. Не стане рівним 10h Якщо цикл завершиться після виконання цієї умови, то символ-зразок знайти не вдалося і в якості відповіді в R1 слід занести 0.

програма 139

0000 2111 1 => R1 номер символу

0002 01D2 1А => R2 адреса початку тексту

0004 001А

0006 С460 порівняти R0b з (R2) b порівняти символ з зразком

0008 5D0C якщо = 0, то РC = РС + 2 вихід при збігу (до 0016)

000А 2211 R1 + 1 => R1 збільшити номер символу

000С 2212 R2 + 1 => R2 обчислити наступну адресу

000Е 04D1 порівняти R1 з 10 текст не закінчився?

0010 0010

0012 4DF2 якщо ? 0, то PC = PC + F4 немає - до повторення (до 0006)

0014 2101 0 => R1 при відсутності символу - 0

0016 0F00 останов

0018 0000

001А 4854 «ТН» текст

001С 5349 «IS» «THIS IS MY TEXT»

001E 4920 «I»

0020 2053 «S»

0022 594D «MY»

0024 5420 «Т»

0026 5845 «EX»

0028 0054 «Т»

 




ФОРМАТИ ДАНИХ | обробки переривання | РОБОТА МІКРОПРОЦЕСОРА З ЗОВНІШНІМИ ПРИСТРОЯМИ | ПРИКЛАД: СИСТЕМА КОМАНД ПРОЦЕСОРІВ РОДИНИ PDP | Найбільш важливі команди процесора PDP | Деякі способи вказівки операндів в командах | НАВЧАЛЬНА МОДЕЛЬ мікрокомп'ютер | СТРУКТУРА НАВЧАЛЬНОГО мікрокомп'ютер | СИСТЕМА КОМАНД | адресації ДАНИХ |

© um.co.ua - учбові матеріали та реферати