• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

TASM, работа с файлами и матрицами...

shinenvice034

Active member
11.08.2020
42
0
BIT
0
Помогите пожалуйста с Ассемблером, ТАСМ, уже опускаются руки с этим заданием.
Нужно написать следующую задачку:
в текстовом файле записана квадратная матрица любого размера, разделителем между числами является «пробел».
Необходимо написать программу, которая:
1. считывает из файла Array.txt матрицу;
2. выводит на экран значения матрицы;
3. создает новый файл Result.txt;
4. сохраняет в первой строке файла имя текстового файла с матрицей, его дату и время создания;
5. в последующие строки файла сохраняет матрицу и рядом с каждой строчкой пишет минимальный элемент в ней
6. выводит на экран результат.

Пример файла array.txt для работы программы прикрепляю

Также у меня есть какие-то примеры программ, они не по этой задаче, но может вам это чем-то поможет.
Код:
masm
model small
stack 1000
.data
fileName db 'Array.txt',0
file_result db 'tyfile.txt',0
str_delitel db '; ',0 
Nice dd fileName
handle dw 0
handlety dw 0
buffer dw 81 dup('$')
SizeN dw ?
tmp dw ?
flag_negative db 0
m dw ?
n dw ?
Getlose dw 0
arr db 81 dup(?)
.code
start:
mov ax,@data
 mov ds, ax
   OpenFile:
  lds dx,Nice
  mov al,00h
  mov ah,3dh
  int 21h
  mov handle,ax
 
  ListingFile:
   mov bx,handle
   mov cx,100
   mov ah,3Fh
   mov dx,buffer
   int 21h
   mov SizeN,ax
  
  
   ;?????????? ?????????
  mov ah,42h
mov bx,handle
mov cx,0
mov dx,0
mov al,0
int 21h
 
;read n
mov ah,3fH
mov bx, handle
mov dx,offset n
mov cx,1 
int 21h     
        ;????? ?????????
mov ah,42H
mov bx,handle
mov cx,0
mov dx,1
mov al,1
int 21h
    ;read m
mov ah,3fH
mov bx, handle
mov dx,offset m
mov cx,1 
int 21h 
mov bx,m
  
;                   read array
mov si,0
mov cx,SizeN
sub cx,3
cycl:
push cx
;read 1 byte
mov ah,3fH
mov bx, handle
mov dx, offset tmp
mov cx,1 
int 21h
 
cmp tmp,48   ;if >= '0'
jge number
  jmp no_number
number:
cmp tmp,58   ;if <='9'
jge no_number
mov ax, tmp
mov ah,0
 
sub al,48
mov arr[si], al
;sub arr[si],48
 
cmp flag_negative,1
jne positive
neg ax
mov arr[si],al
mov flag_negative,0
positive:
inc si
no_number:
cmp tmp,'-'
jne no_negat
mov flag_negative,1
                      ; tmp='-' - up flag         
no_negat:
pop cx
loop cycl
 
mov ah,3cH
mov dx, offset file_result
mov cx,0
 int 21h
 mov handlety,ax
 
 
sub m,48
sub n,48
mov cx,m
Lilpump:
mov si,m
sub si,cx
mov ax,m
mul n
Lilpimp:
mov dl,arr[si]
cmp arr[si],0
jge Nonegativ
inc Getlose
Nonegativ:
mov dx,m
add si,dx
cmp si,ax
jg exix_cikl
jmp Lilpimp
 
 
exix_cikl:
mov sizeN,cx
add Getlose,48
mov ah,40H
mov bx,handlety
mov dx,offset Getlose
mov cx,1
int 21h
mov ah,40H
mov bx,handlety
mov dx, offset str_delitel
mov cx, 2
int 21h
mov Getlose,0
mov cx,sizeN
loop Lilpump
 
 
 
  exit:
mov ax,4c00h
int 21h
end start

Код:
masm
model small
stack 400
.data
fileName db 'Array.txt',0
file_result db 'result.txt',0
Nice dd fileName
handle dw 0
handle2 dw 0
buffer dw 81 dup('$')
Newline db 10,13,'$'
WorkString dw 81 dup('$')
NiceM dw ?
Count dw ?
counter dw 0
Getlose dw 0
n dw ?
m dw ?
SizeN dw ?
flag_negative db 0
arr db 81 dup(?)
tmp dw ?
numberMatrix dw ?
str_delitel db '; ',0   
str_for_date db '.',0
time dw ?
date dw ?
flages dw 0
.code
start:
  assume  ds:@data,es:@data
  mov ax,@data
  mov ds, ax
  mov count,0
  OpenFile:
  lds dx,Nice
  mov al,00h
  mov ah,3dh
  int 21h
  mov handle,ax
 
  ListingFile:
   mov bx,handle
   mov cx,100
   mov ah,3Fh
   mov dx,buffer
   int 21h
   mov SizeN,ax
  
  
   ;?????????? ?????????
  mov ah,42h
mov bx,handle
mov cx,0
mov dx,0
mov al,0
int 21h
 
;read n
mov ah,3fH
mov bx, handle
mov dx,offset n
mov cx,1 
int 21h     
        ;????? ?????????
mov ah,42H
mov bx,handle
mov cx,0
mov dx,1
mov al,1
int 21h
    ;read m
mov ah,3fH
mov bx, handle
mov dx,offset m
mov cx,1 
int 21h 
mov bx,m
mov NiceM,bx
  
;                   read array
mov si,0
mov cx,SizeN
sub cx,3
cycl:
push cx
;read 1 byte
mov ah,3fH
mov bx, handle
mov dx, offset tmp
mov cx,1 
int 21h
 
cmp tmp,48   ;if >= '0'
jge number
  jmp no_number
number:
cmp tmp,58   ;if <='9'
jge no_number
mov ax, tmp
mov ah,0
 
sub al,48
mov arr[si], al
;sub arr[si],48
 
cmp flag_negative,1
jne positive
neg ax
mov arr[si],al
mov flag_negative,0
positive:
inc si
no_number:
cmp tmp,'-'
jne no_negat
mov flag_negative,1
                      ; tmp='-' - up flag         
no_negat:
pop cx
loop cycl
 
 
 
mov numberMatrix,si
                    ;???????? ?????? ?????
mov ah,3cH
mov dx, offset file_result
mov cx,0
 int 21h
mov handle2,ax
 
;write name file
mov ah,40H
mov bx,handle2
mov dx, offset fileName
mov cx,9         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
int 21h
mov ah,40H
mov bx,handle2
mov dx, offset str_delitel
mov cx, 2
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ah,57H
mov al,0
mov bx,handle
int 21h
mov time,cx                        ;save time
mov date,dx
          ;day
mov dx,date
and dx, 001Fh
mov ax,dx
mov dx,0
;output
mov bx, 10
    push -1
digitIn:   
    div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitIn
              
digitOut:
    pop dx
    cmp dx, -1
    je exit_day
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOut
    
     exit_day:
      mov ah,40H
mov bx,handle2
mov dx, offset str_for_date
mov cx, 1
int 21h
          ;month
mov dx,date
And DX, 01E0h
Shr DX, 5
mov ax,dx
mov dx,0
;output
mov bx, 10
    push -1
digitInm:   div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitInm
              
digitOutm:  pop dx
    cmp dx, -1
    je exit_m
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOutm
 
 exit_m:
  mov ah,40H
mov bx,handle2
mov dx, offset str_for_date
mov cx, 1
int 21h
          ;year
mov dx,date
And DX, 0FC00h
Shr DX, 9
Add DX, 07BCh
mov ax,dx
mov dx,0
;output
mov bx, 10
    push -1
digitIny:   div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitIny
              
digitOuty:  pop dx
    cmp dx, -1
    je exit_y
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOuty
 
 exit_y:
  mov ah,40H
mov bx,handle2
mov dx, offset str_delitel
mov cx, 2
int 21h
 
                    ;TIME
;hours                   
mov cx,time
And CX, 0F800h
Shr CX, 11
mov ax,cx
mov dx,0
;output
mov bx, 10
    push -1
digitInh:   div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitInh
              
digitOuth:  pop dx
    cmp dx, -1
    je exit_h
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOuth
 
 exit_h:
 mov ah,40H
mov bx,handle2
mov dx, offset str_for_date
mov cx, 1
int 21h
;minutes
mov cx,time
And CX, 07E0h
Shr CX, 5
mov ax,cx
mov dx,0
;output
mov bx, 10
    push -1
digitInmin: div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitInmin
              
digitOutmin:    pop dx
    cmp dx, -1
    je exit_min
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOutmin
 
 exit_min:
 mov ah,40H
mov bx,handle2
mov dx, offset str_for_date
mov cx, 1
int 21h
;seconds
mov cx,time
And CX, 001Fh
shl CX, 1
mov ax,cx
mov dx,0
;output
mov bx, 10
    push -1
digitIns:   div bx
    push dx
    mov dx, 0
    cmp ax, 0
    jne digitIns
              
digitOuts:  pop dx
    cmp dx, -1
    je exit_s
    add dx, 30h
    mov tmp,dx
    mov dx, offset tmp
    mov cx,1
    mov bx,handle2
    mov ah, 40h
    int 21h
    jmp digitOuts
     mov ah,40H
     int 21h
 
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    exit_s:
;output array
mov ah,09h
mov dx,offset Newline
int 21h
mov si,0
mov cx,numberMatrix
zikl:
mov bx,0
mov bl,arr[si]
cmp bl,0
jl negativ
jmp positiv
negativ:
mov WorkString,'-'
mov ah,09h
mov dx,offset WorkString
int 21h
neg bx
mov bh,0
add bl,48
mov WorkString,bx
mov ah,09h
mov dx,offset WorkString
int 21h
jmp Boom
 
positiv:
add bl,48
mov WorkString , bx
mov ah,09h
mov dx,offset WorkString
int 21h
 
 
 
Boom:
mov bx,NiceM
sub bx,48
sub bl,1
 
cmp si,bx
je NewStr
jmp NiceZ
 
NewStr:
mov ah,09h
mov dx,offset Newline
int 21h
mov bx,m
sub bx,48
add NiceM,bx
 
NiceZ:
inc si
loop zikl
 
exit:
mov ax,4c00h
int 21h
end start

Заранее спасибо!!!
 

Вложения

  • Array.txt
    19 байт · Просмотры: 98
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!