Контрольная работа по «Машиноориентированные языки»

Автор работы: Пользователь скрыл имя, 14 Января 2013 в 19:54, контрольная работа

Краткое описание

Задание №1. Вариант №9. Арифметические команды языка Assembler в архитектуре x86\
Вычислите значение выражения: (A+C)*(B-D)/E
Задание №2. Вариант №9. Организация ветвлений и циклов в программах на языке Assembler
Вводить с клавиатуры элементы массива не требуется, на экран выводить необходимо.
Обнулить все элементы массива, которые по модулю меньше 10
Задание №3. Вариант №9 Ввести с клавиатуры строку и символ. Вывести номер позиции последнего вхождения введенного символа в строку

Прикрепленные файлы: 1 файл

Машиноориентированные_языки.doc

— 43.50 Кб (Скачать документ)

Министерство образования  и науки Российской Федерации

 «ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

 

 

 

 

 

 

 

 

 

 

 

 

Контрольная работа

по дисциплине «Машиноориентированные языки»

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнил: студент  гр. АУЗ-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,MB_OK

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,MB_OK

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,MB_OK

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


Информация о работе Контрольная работа по «Машиноориентированные языки»