Решение задач по математике | Задача по ассемблеру | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Задача по ассемблеру


Текст задания

Задание 4.1. Создайте массив из 100 слов и программно заполните его последовательностью квадратов натуральных чисел (1, 4, 9 и т. д.). Выведите полученный массив на экран в виде таблицы 10×10 с фиксированной шириной столбцов:

Текст программы

.model small

.stack 100h

.386 ;Разрешение трансляции команд процессора 386

.data

mas db 100 dup (0) ;исходный массив

.code

start:

mov ax, @data

mov ds, ax

mov ax, 0 ;обнуление ax

mov cx, 100 ;значение счетчика цикла

mov al, 1 ; счётчик для значений массива

mov si, 0 ;индекс начального элемента в cx

go: ;цикл инициализации

mov mas[si], al ;запись в массив

inc al ;увеличение значения следуещего элемента массива на единицу

inc si ;переход к следующему элементу

loop go ;повторить цикл

mov si, 0 ;переход к 1-му элементу

mov cx, 10

show1: ;цикл вывода элементов массива на экран

push cx

mov cx, 10

show2:

mov al, mas[si] ;значение элемента массива помещается в AL

mov ah, 0 ;AH = 0

mul ax ;возведение в квадрат

call print ; вызов функции вывода числа в AX на экран

inc si ;переход к следующему элементу

loop show2

pop cx

mov dl, 0DDh ;переход на следующую строку

call pr

mov dl, 0DAh

call pr

loop show1

mov ax,4C00h ;завершение программы

int 21h

print proc ;процедура для вывода элеманта массива на экран

pusha

;вывод пробелов перед каждым числом

pusha

mov bx, 0

label0:

inc bx

mov dx, 0

mov cx, 10

div cx

cmp ax, 1

jnc label0

neg bx

add bx, 6

mov cx, bx

lab:

mov dl, 0D0h

call pr

loop lab

popa

;вывод символа на экран

mov cx, 0

label1:

mov dx, 0

mov bx, 10 ;Заносим основание системы счисления, равное 10, в регистр BX

div bx ;деление AX на BX

mov bx, 0

push dx

inc cx

cmp ax, 0 ;сравнение AX с нулём

jnz label1 ;если условие выполняется, то переход на метку label1

label2:

pop dx

call pr ;вывод на экран символа

inc bx

loop label2 ;повторение с метки label2, пока значение CX не станет равно нулю

popa

ret

print endp

pr proc ;процедура, выводящая символ на экран

mov ah, 02h

add dl, 30h

int 21h

ret

pr endp

end start

Контрольные вопросы

1.  Пусть имеется массив: simple DW 100 DUP(?). Для доступа к отдельным элементам массива используется адресное выражение simple[DI]. Как называется этот способ адресации и как с его помощью будет вычисляться адрес элементов массива?

Ответ: Косвенная адресация. База в DS + смещение в DI.

2.  Каким образом осуществляется перебор элементов некоторого массива A с помощью адресного выражения A[DI], если массив состоит из байтов, слов или двойных слов.

Ответ: К адресу базы прибавляется смещение. При переборе элементов, к смещению прибавляется 0Fh, 0FFh или 0FFFFh для байтов, слов и двойных слов соответственно.

3.  Для массива simple каким будет результат выполнения команды mov simple, BX?

Ответ: В регистр AX будет помещено значение того элемента массива, который указан в DS.

4.  Для некоторого массива A каким будет результат выполнения команды mov DI, A и команды mov DI, offset A?

Ответ: В 1-м случае в DI будет помещено значение элемента массива A, который указан в DS, а во 2-м случае – эго смещение.

5.  Какие действия выполняют команды организации цикла?

Ответ: При каждой встрече с оператором loop, ассемблер сравнивает регистр CX с нулём, и если он ему не равен, то значение CX уменьшается на 1 и происходит переход к нужной метке.

6.  Пусть в регистре BX находится адрес i-ого элемента байтового массива A, т. е. адрес A[i]. Как записать в BX индекс этого элемента, т. е. i?

Ответ: mov bx, si

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020