Расположить данные в заданном адресе - Assembler
Формулировка задачи:
Здравствуйте!
Есть задание:
Я составил программу, которая находит сумму чётных элеметнов и их количесвто в массиве.
Вот код программы:
Программа работает правильно.
Вопрос про память:
Составить программу для определения суммы и числа четных элементов в массиве данных, содержащем 10 байт и расположенном начиная с адреса $00C0.
data segment mas db 12, 1, 3, 4, 7, 9, 11, 14, 15, 17 ; исходный массив len dw $-mas ; размер массива null_string db 13,10, '$' ; пробельная строка data ends code segment start: assume cs:code, ds:data mov ax, data mov ds, ax lea bx, mas ; помещаем в bx адрес первого элемента массива mov cx, len ; помещаем в cx размер массива, так как loop "идёт" по cx xor ax, ax ; обнуляем регистр xor dx, dx ; обнуляем регистр push ax ; сохраняем нулевую сумму for_: test ax, 01h ; проверка на чётность jnz not_sum_and_count ; если элемент массива не чётный, то сложение пропускается pop ax ; вытащить предыдущую сумму из стека add ax, [bx] ; сложить предыдущую сумму с новым элементом push ax ; сохранить новую сумму inc dx ; увеличить счётчик чётных элементов на единицу not_sum_and_count: inc bx ; увеличить адрес массива на единицу <=> перейти к следующему элементу массива mov ax, [bx] ; занести в ax следуюший элемент массива loop for_ ; проверить условие цикла: cx != нулю pop ax ; вытащить конечеую сумму call OutInt ; вывод суммы call OutNullString ; вывод пробельной строки mov ax, dx ; поместить в ax количество чётных элементов call OutInt ; вывести количество чётных элементов mov ax, 4c00h ; завершить программу int 21h OutInt proc ; процедура для вывода беззнакового десятичного числа push ax push dx aam add ax,3030h mov dl,ah mov dh,al mov ah,02 int 21h mov dl,dh int 21h pop dx pop ax ret OutInt endp OutNullString proc ; процедура для вывода пробельной строки push ax push dx mov ah,9 lea dx, null_string int 21h pop dx pop ax ret OutNullString endp code ends end start
как расположить данные начиная с адреса памяти $00C0?
Решение задачи: «Расположить данные в заданном адресе»
textual
Листинг программы
times 00C0 db 0
Объяснение кода листинга программы
В данном коде используется язык Assembler. Ниже представлен список действий, которые выполняются в коде:
times
- это команда, которая выполняет повторение указанного действия определенное количество раз.00C0
- это адрес, куда необходимо поместить данные.db
- это команда, которая помещает данные в память по указанному адресу.0
- это значение, которое помещается в память по указанному адресу. Таким образом, в данном коде происходит следующее:- Команда
times
выполняет повторение действияdb
0 раз. - Значение
0
помещается в память по адресу00C0
.
- Команда