Консультация № 186382
17.06.2012, 23:43
138.54 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужна помощь в решении задач по Операционным системам на ассемблере.
Задание 5. Написать фрагмент программы на ассемблере (описание переменных и команды вычислений) в соответствии с указанным вариантом. Использовать операторы организации цикла и индексирование.
Поменять местами соседние (первый со вторым, третий с четвертым и т.д.) элементы массива 10 целых без знака типа байт.
А так же. Оформить в виде процедур фрагмент программы из задания №5:
1. С передачей параметров через регистры.
2. Через стек.

Обсуждение

давно
Посетитель
7438
7205
18.06.2012, 01:33
общий
это ответ
Здравствуйте, Flawless!
5)
[code h=200];Поменять местами соседние (первый со вторым, третий с четвертым и т.д.)
;элементы массива 10 целых без знака типа байт
SStack SEGMENT STACK
DW 64 DUP(?)
SStack ENDS
Data SEGMENT ; сегмент данных
ar db 2,4,0,40,50,0,255,40,40,10
Data ENDS
Code SEGMENT
ASSUME SS:SStack,CS:Code,DS:Data
Start PROC FAR
; Выполнение соглашений DOS и настройка регистра DS
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, Data
MOV DS, AX

LEA SI, ar ;адрес массива
MOV CX, 5 ;число пар элементов массива
CH_LOOP: ;цикл
MOV AX, [SI] ;читаем слово, по два элемента
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP ;циклим по CX

RET
Start ENDP
Code ENDS
END Start[/code]
6,7)
[code h=200];Поменять местами соседние (первый со вторым, третий с четвертым и т.д.)
;элементы массива 10 целых без знака типа байт
SStack SEGMENT STACK
DW 64 DUP(?)
SStack ENDS
Data SEGMENT ; сегмент данных
ar db 2,4,0,40,50,0,255,40,40,10
Data ENDS
.186
Code SEGMENT
ASSUME SS:SStack,CS:Code,DS:Data
Start PROC FAR
; Выполнение соглашений DOS и настройка регистра DS
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, Data
MOV DS, AX

LEA SI, ar ;адрес массива
MOV CX, 5 ;число пар элементов массива
CALL CHANGE1

PUSH OFFSET ar
PUSH 5
CALL CHANGE2

RET
Start ENDP

CHANGE1 PROC
CH_LOOP1: ;цикл
MOV AX, [SI] ;читаем слово
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP1 ;циклим по CX
RET
CHANGE1 ENDP

CHANGE2 PROC
PUSH BP
MOV BP, SP
MOV CX, [BP+4];число пар элементов
MOV SI, [BP+6];адрес массива

CH_LOOP2: ;цикл
MOV AX, [SI] ;читаем слово
xchg AL, AH
MOV [SI], AX
INC SI ;на следующее слово
INC SI
LOOP CH_LOOP2 ;циклим по CX

POP BP
RET
CHANGE2 ENDP

Code ENDS
END Start[/code]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа