Автор работы: Пользователь скрыл имя, 14 Января 2013 в 19:54, контрольная работа
Задание №1. Вариант №9. Арифметические команды языка Assembler в архитектуре x86\
Вычислите значение выражения: (A+C)*(B-D)/E
Задание №2. Вариант №9. Организация ветвлений и циклов в программах на языке Assembler
Вводить с клавиатуры элементы массива не требуется, на экран выводить необходимо.
Обнулить все элементы массива, которые по модулю меньше 10
Задание №3. Вариант №9 Ввести с клавиатуры строку и символ. Вывести номер позиции последнего вхождения введенного символа в строку
Министерство образования и науки Российской Федерации
«ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Контрольная работа
по дисциплине «Машиноориентированные языки»
Выполнил: студент гр. АУЗ-361
Анисимов М.А.
Шифр 20092079
Волгоград 2012
Задание №1. Вариант №9. Арифметические команды языка Assembler в архитектуре x86\
Вычислите значение выражения: (A+C)*(B-D)/E
Текст программы
include '%include%/win32ax.inc'
.data
a db 2
b db 7
c db 1
d db 4
e db 3
Caption db 'Результат.',0
buffer rb 40
.code
start:
xor eax,eax
xor ecx,ecx
mov al,[a] ;al=A
mov ah,[b] ;ah=B
add al,[c] ;al=A+C
sub ah,[d] ;ah=B-D
imul ah ;ax=al*ah
mov cl,[e] ;переместить в cl значение переменной е
div cl ;деление ax на E
mov edi, buffer
call IntToStr
invoke MessageBox,0,buffer,Caption,
invoke ExitProcess,0
IntToStr:
;eax = number, ebx = base(основание системы счисления=10), edi = buffer(буфер для хранения строки ;результата)
push ecx edx
cmp eax,0
jnl no_neg
neg eax
mov [edi], byte '-'
inc edi
no_neg:
xor ecx,ecx
mov ebx,10
.new:
xor edx,edx
div ebx
push edx
inc ecx
test eax,eax
jnz .new
.loop:
pop eax
add al,'0'
mov [edi], al
inc edi
loop .loop
mov al,0
mov [edi],al
pop edx ecx
ret
.end start
Задание №2. Вариант №9. Организация ветвлений и циклов в программах на языке Assembler
Вводить с клавиатуры элементы массива не требуется, на экран выводить необходимо.
Обнулить все элементы массива, которые по модулю меньше 10
Текст программы
include 'win32ax.inc'
.data
caption db 'Lab 3',0
buffer db 250 dup(0)
NUM dw 10
array dw 10, 17, -8, 89, 1, 0, 15, 22, -8, 45
length dw 10
.code
start:
mov ecx,0
mov eax,0
mov ax, [NUM] ; ах = NUM (ax = 10)
; Теперь обнулим все элементы, которые по модулю меньше NUM (10)
mov cx, [length]
mov ebx, array
m3: cmp ax, [ebx] ;сравним NUM с текущим элементом массива
jng m4 ;если ax < NUM по модулю, значит нужно обнулить этот элемент массива
mov [ebx], word 0
m4: add ebx, 2
loop m3
mov eax, array
mov ebx, buffer
mov cx, [length]
call array_to_hex_str
invoke MessageBox,0,buffer,caption,
invoke ExitProcess,0
proc array_to_hex_str
push eax
push ebx
push edx
push ecx
push esi
mov esi, eax ;адрес очередного элемента будет в esi
.lm1: mov ax, [esi]
call to_hex_str
mov [ebx+4], byte ' '
add ebx, 5
add esi, 2
loop .lm1
pop esi
pop ecx
pop edx
pop ebx
pop eax
ret
endp
proc to_hex_str
push eax
push ebx
push edx
push ecx
push esi
mov ecx, 4
mov si, 0Fh
mov edx, ebx
add edx, 4
mov byte [edx], 0
dec edx
.m1: mov bx, ax
and bx, si
cmp bl, 9
ja .m2
add bl, '0'
jmp .m3
.m2: add bl, 'A'-10
.m3: mov byte [edx], bl
dec edx
shr ax, 4
loop .m1
pop esi
pop ecx
pop edx
pop ebx
pop eax
ret
endp
.end start
Задание №3. Вариант №9 Ввести с клавиатуры строку и символ. Вывести номер позиции последнего вхождения введенного символа в строку
Текст программы
include 'win32ax.inc'
.data
buffer db 'Helo! Are you gain some experiense?',0
buffer_len db $-buffer
Caption db 'Результат.',0
buffer1 db 10 dup(0)
buffer2 db 'H'
.code
start:
xor eax,eax
xor ecx,ecx
xor ebx,ebx
xor edi,edi
mov cl, [buffer_len]
mov edi, buffer
mov al,[buffer2]
m:
scasb
jne next
mov ebx, edi
sub ebx, buffer
next:
loop m
mov edi, buffer1
mov eax,ebx
call IntToStr
invoke MessageBox,0,buffer1,Caption,
invoke ExitProcess,0
IntToStr:
;eax = number, ebx = base(основание системы счисления=10), edi = buffer(буфер для хранения строки ;результата)
push ecx edx
cmp eax,0
jnl no_neg
neg eax
mov [edi], byte '-'
inc edi
no_neg:
xor ecx,ecx
mov ebx,10
.new:
xor edx,edx
div ebx
push edx
inc ecx
test eax,eax
jnz .new
.loop:
pop eax
add al,'0'
mov [edi], al
inc edi
loop .loop
mov al,0
mov [edi],al
pop edx ecx
ret
.end start
Информация о работе Контрольная работа по «Машиноориентированные языки»