Міністерство освіти і науки Російської Федерації
Державна освітня установа вищої професійної освіти
«Волгоградський державний технічний університет»
Контрольна робота
з дисципліни: «Машинно-орієнтовані мови»
Варіант № 9
Виконав: студент 2 курсу ФПІК
групи АУЗ - 261с Тюляева І.А.
номер залікової книжки 20161639
Перевірив: ст. пр.Федоров М.А.
Волгоград 2011
Зміст
Завдання №1
Завдання №2
Завдання №3
Завдання №4
Завдання №5
Список літератури
Завдання №1
Арифметичні команди мови Assembler в архітектурі x86:
(A + C) * (B-D)/E.
.686; директива визначення типу мікропроцесора
.model flat, stdcall; завдання лінійної моделі пам'яті
; але угоди ОС Windows
.data; директива визначення даних
_a dw 1
_b dw 2
_c dw 3
_e dw 4
_d dw 5 dw 0; резервування пам'яті для збереження змінної
; res
.code; директива початку сегменту команд: edx, 0; очистка регістрів ebx, 0; очистка регістрів ecx, 0; очистка регістрів ах, _a; в регістр ах заносимо число _a ax, _c; складовими з _cedx, 16; зрушення на 16 dx, ax edx; заносимо значення в стек edx, 0 ах, _b ax, _d; віднімаємо від _b значення _d_e; ділимо ах на _eecx; викликаємо з стека значення
mul ecx; умножаемres, eax
ret; повернення управління ОС start; закінчення програми з ім'ям _start
Завдання №2
Організація розгалужень і циклів в програмах на мові Assembler. Вводити з клавіатури елементи масиву не потрібна, на екран виводити необхідно:
Обнулити всі елементи масиву, які по модулю менше 10.
.model tiny
.code100h: mov ax, 3
int 10h; очищення екранаcx, - 50: xor ax, axax, [massiv + cx + 50]; заносимо черговий символ
cmp ax, 10b1ax, ax
mov [massiv + cx + 50], ax; обнуляем елемент менше 10: bl, 10; переводимо число в рядок для виведення на
; екранbl [x + 2], ahblword ptr [x], axah, 9dx, offset string1
int 21h; виводимо на екранcx, 2; на наступний елемент масиву
jne a1ah, 016h; затримка екрану
retn; вихід з программиdw 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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50
string1 db result= db 000 $
END start
Завдання №3
Введення рядків з клавіатури і команди пакетної обробки (рядкові команди) в мові Assebmler. З клавіатури вводяться тільки символи латинського алфавіту. При виконанні кожного завдання необхідно використовувати команди пакетної обробки:
Ввести з клавіатури рядок і символ. Вивести номер позиції останнього входження введеного символу в рядок.
.model small
.stack 100h
.datadb 80 dup (?), $
symb db?, , $ ; можна і не виділяти пам'ять для символу
msg_inp db 0ah, 0dh, Vvedite stroku: , 0ah, 0dh, $ _in db 0ah, 0dh, Vvedite simvol: , 0ah, 0dh, $ db 0ah, 0dh, Simvol , $ db nayden! Ego index - , $ _err db ne nayden. Raquo;, $ dw 10dw?
.code: ax, @ datads, axdx, msg_inp; висновок msg_inpah, 09h21hbx, bx; в bx - індекс символу, що вводиться
input_loop: ah, 01h; зчитуємо символ
int 21hal, 13; якщо це enter
je for_find; то кінець вводаstroka [bx], al; інакше записуємо символ в строкуbx, 80; якщо ввели 80 сімволовfor_find; то кінець вводаbx; збільшуємо bxinput_loop
for_find: dx, msg_in; висновок msg_inah, 09h21hah, 01h; ввід потрібного сімвола21hbyte ptr symb, al; зберігаємо його в symb
mov cx, bx; в cx - довжина строкіcurlen, bxbx, bx; bx - індекс елементаah, byte ptr symb; в ah - потрібний символ: cmp ah, stroka [bx]; порівнюємо поточний елемент з потрібним
; сімволомfind; якщо збігаються, то jmp на finditer: ah, stroka [bx]; порівнюємо поточний елемент з потрібним
; сімволомvuvod; якщо збігаються, то jmp на vuvodnext ::; якщо знайдений символ
lea dx, msg; висновок msgah, 09h
int 21hdx, symb; висновок самого символу
int 21hdx, msg1; висновок msg1
int 21hax, bx; зберігаємо індекс в axcx, cx; cx - лічильник ціфр_to_string: dx, dx; підготовка до деленіюc10; деленіеdx, 30h; в dx - ASCII-код залишку від деленіяdx; зберігаємо його в стекеcx; інкремент лічильника...