Сформировать матрицу (emu8086) - Assembler
Формулировка задачи:
Сформировать матрицу порядка n по заданному образцу(Заранее спасибо):
Решение задачи: «Сформировать матрицу (emu8086)»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment N dw 7 Matrix dw 100 dup(?) Msg db 'Matrix:', 0Dh, 0Ah, '$' CrLf db 0Dh, 0Ah, '$' @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc ;инициализация сегментного регистра данных mov ax, @data mov ds, ax ; mov ah, 09h lea dx, [Msg] int 21h ;заполнение матрицы по образцу lea bx, [Matrix] mov si, 0 mov cx, [N] @@FillForI: mov di, 0 push cx mov cx, [N] @@FillForJ: mov dx, si xor dx, di mov ax, 0 sub ax, dx mov ax, 0 sbb ax, 0 not ax and ax, si mov [bx], ax add bx, 2 call Show_AX inc di loop @@FillForJ mov ah, 09h lea dx, [CrLf] int 21h pop cx inc si loop @@FillForI ;завершение программы mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push si push di mov cx, 10 ;основание системы счисления xor di, di ; di - кол. цифр в числе xor si, si ; si - признак отрицательного числа ; если число в ax отрицательное, то ;1) напечатать (запомнить в стеке) символ '-' ;2) сделать ax положительным or ax, ax jns @@Conv mov si, 1 neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ;если число отрицательное - помещаем символ "-" в строку or si, si jz @@Positive mov dx, '-' push dx inc di @@Positive: ; выводим из стека на экран ; - сначала пробелы для выравнивания по правому краю mov cx, 8 sub cx, di mov ah, 02h mov dl, ' ' @@LeftPad: int 21h loop @@LeftPad ;сохранённые символы цифр @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop si pop dx pop cx pop bx pop ax ret Show_AX endp @code ends end main
Объяснение кода листинга программы
- Код написан на ассемблере для процессора emu8086.
- Задачей программы является формирование матрицы.
- В сегменте данных определены следующие переменные:
- N - содержит число 7.
- Matrix - содержит матрицу размером 100x100, заполненную по образцу.
- Msg - содержит строку 'Matrix:'.
- CrLf - содержит строку символов перевода строки '\r\n'.
- В сегменте кода определены следующие процедуры:
- main - основная процедура программы.
- Show_AX - процедура вывода знакового 16-разрядного числа на экран.
- В основной процедуре происходит инициализация сегментного регистра данных, затем выводится сообщение 'Matrix:', после чего происходит заполнение матрицы по образцу.
- При заполнении матрицы используется цикл двойной вложенности, который проходит по всем элементам матрицы.
- Для каждого элемента матрицы выполняются следующие действия:
- Содержимое регистра AX (в котором хранится число для отображения) выводится на экран с помощью процедуры Show_AX.
- Если число в AX отрицательное, то перед выводом на экран добавляется символ '-'.
- После вывода числа на экран, в стек добавляется символ пробела для выравнивания по правому краю.
- После заполнения матрицы программа завершается.
- Процедура Show_AX выводит знаковое 16-разрядное число на экран.
- Если число отрицательное, то перед выводом на экран добавляется символ '-'.
- Число выводится в виде строки цифр, начиная с самого старшего разряда.
- Для выравнивания по правому краю перед выводом каждого числа в стек добавляется символ пробела.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д