Я мог бы использовать вашу помощь в программе, которую я пишу, в качестве школьного проекта.Он должен открыть файл, который содержит около 3000 строк, который содержит пять полей, разделенных «;».Первое поле с буквами (оно может быть не более 10 символов), остальные поля - числа в диапазоне от -100 до 100. Это должно выглядеть примерно так:
DSGHAA; 12; 24; 55; -84
Задание состоит в том, что мне нужно открыть файл, содержащий эти строки, и проверить, соответствует ли строка некоторым требованиям, и, если она соответствует им, записать эту строку в другой файл, который будет создан.,Требования, которые необходимо выполнить: 1. В первом поле должно быть две буквы «А» (не больше, не меньше) (не более 10 символов);2. Второе и третье поля имеют положительные числа;3. Четвертое и пятое поля должны делиться из 11;Вот часть моего кода:
-----------------Reading characters--------------------
.beginning
inc di
mov bx, [bp]
mov cx, 1
mov dx, character
mov ah, 0x3F
int 0x21
mov cl, [character]
jnc .tikrinimas
macPutString 'Error reading file', crlf, '$'
---------Checking if it isn't end of reading file------
.startChecking
cmp ax, 0
jne .ifLineEnd
jmp .closing
---------Checking if it is the end of line-------------
.ifLineEnds
cmp cl, 0x0A
je .splitLine
mov [line+di], cl
jmp .beginning
---------Startting to split my line into "fields"------
.splitLine
mov [line+di], cl
mov si, 0
mov di, 0
.firstField
mov al, byte [line+di]
mov byte [field1+si], al
cmp byte [line+di], ';'
je .splitLine2
inc di
inc si
loop .firstField
.splitLine2
mov si, 0
inc di
.secondField
mov al, byte [line+di]
mov byte [field2+si], al
cmp byte [line+di], ';'
je .splitLine3
inc di
inc si
loop .secondField
.splitLine3
mov si, 0
inc di
.thirdField
mov al, byte [line+di]
mov byte [field3+si], al
cmp byte [line+di], ';'
je .splitLine4
inc di
inc si
loop .thirdField
.splitLine4
mov si, 0
inc di
.fourthField
mov al, byte [line+di]
mov byte [field4+si], al
cmp byte [line+di], ';'
je .splitLine5
inc di
inc si
loop .fourthField
.splitLine5
mov si, 0
inc di
.fifthField
mov al, byte [line+di]
mov byte [field5+si], al
cmp byte [line+di], ';'
je .howManyA <----This is where I have a problem..
inc di
inc si
loop .fifthField
-------counting how many "A" are in first field-------
.howManyA
mov si, 0
mov ch, 0
.check
cmp byte [field1+si], ';'
je .numberA
cmp byte [field1+si], 'A'
jne .next
inc ch
inc si
jmp .check
.next
inc si
jmp .check
.numberA
cmp ch, 2
je .isFirstPositive
jmp .toBeginning
--------checking if first number is positive----------
.isFirstPositive
mov ch, byte [field2]
cmp ch, 0x2D
jne .isSecondPositive
jmp .toBeginning
--------checking if second number is positive---------
.isSecondPositive
mov ch, byte [field3]
cmp ch, 0xD2
jmp .toBeginning
--------checking if third number divides from 11------
.firstDivide
mov ah, byte [field4]
cmp ax, 0
je .toBeginning
cmp ah, 0xD2
je .numbers
.numbers
mov ah, byte [laukas4+01]
mov al, byte [laukas4+02]
cmp ah, al
je .secondDivide
jmp .toBeginning
------checking if fourth number divides from 11------
.secondBeggining
mov ah, [field5+00]
cmp ax, 0
je .toBeginning
cmp ah, 0xD2
je .numbers2
.numbers2
mov ah, byte [field5+01]
mov al, byte [field5+02]
cmp ah, al
je .writeToFile
jmp .toBeginning
-----------jumping to beginning to read another line---------
.toBeginning
mov di, -1
jmp .beginning
---------------data----------------------------------
section .data
character: times 1 db 00
line: times 32 db 00
field1: times 11 db 00
field2: times 5 db 00
field3: times 5 db 00
field4: times 5 db 00
field5: times 5 db 00
Я пропустил части кода, где открываются, создаются, пишутся и закрываются файлы.Это работает.Я показал в своем коде, где есть проблема, и я не могу определить, почему .. У меня есть тестовый файл
input.txt, содержащий эту строку "AA; 12; 15; 55;-77
Теперь, когда я отлаживаю свою программу, все работает отлично, пока не достигнет первого значения «7.» Программа сравнивает «7» (ASCII 37) с «;» (ASCII 3B) и переходит к«.howManyA». Я не могу понять, почему он это делает и на что обращать внимание. Любая помощь будет принята с благодарностью.