Обмен местами главной и побочной диагонали квадратной матрицы - Assembler

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

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

помогите решить! программа меняет местами главную и побочную диагональ квадратной матрицы М*М, М<=6. Матрица вводится с файла, указанного оператором, а результат выводится в новый файл.

Решение задачи: «Обмен местами главной и побочной диагонали квадратной матрицы»

textual
Листинг программы
.model small
.386
 
.data
        db  'Bebin Of Data$'
arr     db   4Ch dup(?)
file1   db   'D:\matrix.txt',0
file2   db   'D:\result.txt',0
mes1    db   'File Wasn''t Found!$'
mes2    db   'Information Wasn''t Read!$'
mes3    db   'File Wasn''t Closed!$'
mes4    db   'File Wasn''t Created!$'
diag1   db   06h dup(?)
diag2   db   06h dup(?)
M       db   06h
hnd     dw   ?
check   db   'Check Is OK!$'
        db  'End Of Data$'
 
.stack
    db  0FFh
 
.code
start:
    mov ax,@data
    mov ds,ax
    
    ;открываем файл, запоминаем дискриптор
    mov ah,3Dh
    mov al,00h
    lea dx,file1
    int 21h
    jc  fault1
    mov hnd,ax
    
    ;читаем файл
    mov bx,ax
    mov ah,3Fh
    lea dx,arr
    mov cx,4Ch
    int 21h
    jc  fault2
    
    ;в ax количество реально прочитанных байт
    ;этим мы делаем проверку на размерность матрицы
    ;(учитываются возврат коретки и перенос строки)
    ;cmp ax,4Ch
    ;jnz exit
    
    push ds
    pop es
    
    ;сохраняем главную диагональ матрицы 6*6 в diag1
    lea si,arr
    lea di,diag1
    mov cx,06h
    d1_save:
        lodsb
        stosb
        add si,0Eh
    loop d1_save
    
    ;сохраняем побочную диагональ матрицы 6*6 в diag2
    lea si,arr
    add si,0Ah
    lea di,diag2
    mov cx,06h
    d2_save:
        lodsb
        stosb
        add si,0Ah
    loop d2_save
 
    ;заполняем главную диагональ матрицы 6*6 побочной диагональю
    lea si,diag2
    lea di,arr
    mov cx,06h
    d1_fill:
        lodsb
        stosb
        add di,0Eh
    loop d1_fill
    
    mov ah,09h
    lea dx,check
    int 21h
    
    ;заполняем побочную диагональ матрицы 6*6 побочной диагональю
    lea si,diag1
    lea di,arr
    add di,0Ah
    mov cx,06h
    d2_fill:
        lodsb
        stosb
        add di,0Ah
    loop d2_fill
    
    ;закрываем файл из которого читали
    mov ah,3Eh
    mov bx,hnd
    int 21h
    jc  fault3
    
    ;создаем другой файл для записи
    mov ah,3Ch
    lea dx,file2
    mov cx,00h
    int 21h
    jc fault4
    mov hnd,ax
    
    ;пишем в этот файл
    mov bx,ax
    mov ah,40h
    lea dx,arr
    mov cx,4Ch
    int 21h
    
    ;закрываем наш второй файл
    mov ah,3Eh
    mov bx,hnd
    int 21h
    jc fault3
    
    
    jmp exit
    
    fault1:
    mov ah,09h
    lea dx,mes1
    int 21h
    
    jmp exit
    
    fault2:
    mov ah,09h
    lea dx,mes2
    int 21h
    
    jmp exit
    
    fault3:
    mov ah,09h
    lea dx,mes3
    int 21h
    
    jmp exit
    
    fault4:
    mov ah,09h
    lea dx,mes4
    int 21h
    
    exit:
    mov ah,4Ch
    int 21h
end start

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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