Дано целое число х. Получить квадратную матрицу порядка n + 1 - Assembler

Узнай цену своей работы

Формулировка задачи:

1. Дано целое число х. Получить квадратную матрицу порядка n + 1:

Решение задачи: «Дано целое число х. Получить квадратную матрицу порядка n + 1»

textual
Листинг программы
@stack  segment para stack
        db      1024 dup(?)
@stack  ends
 
@data   segment
CrLf            db      0Dh, 0Ah, '$'
N               dw      6
X               dw      3
First           dw      ?
Last            dw      ?
@data   ends
 
@code   segment
        assume  cs:@code, ds:@data, ss:@stack
main    proc
        mov     ax,     @data   ; get segment address of data
        mov     ds,     ax      ; and move it into DS
 
 
        ;заполнение первой строки матрицы
        mov     ax,     1
        mov     [First],        ax
        mov     cx,     [N]
        inc     cx
        FirstLine:
                mov     [Last], ax
                call    Show_AX
                mul     word ptr[X]
        loop    FirstLine
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;заполнение до предпоследней строки включительно
        cmp     word ptr[N],       1
        jb      break
        je      ShowLastLine
        mov     cx,     [N]
        sub     cx,     1
        MiddleLines:
                mov     ax,     [First]
                mul     word ptr[X]
                mov     [First],        ax
                call    Show_AX
                push    cx
                mov     cx,     [N]
                sub     cx,     1
                mov     ax,     0
                Inner:
                        call    Show_AX
                loop    Inner
                pop     cx
                mov     ax,     [Last]
                mov     dx,     0
                div     word [X]
                mov     [Last], ax
                call    Show_AX
                mov     ah,     09h
                lea     dx,     [CrLf]
                int     21h
        loop    MiddleLines
        ;заполнение последней строки
ShowLastLine:
        mov     cx,     [N]
        inc     cx
        mov     ax,     [First]
        mul     word ptr[X]
        LastLines:
                call    Show_AX
                mov     dx,     0
                div     word ptr[X]
        loop    LastLines
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
;локальные метки начинаются с точки
break:
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
; выводит знаковое 16-разрядное число из регистра AX на экран
; с выравниванием на 8 позиций по правому краю
; входные данные:
; 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

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы