Обмен местами главной и побочной диагонали квадратной матрицы - 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