Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
В общем, лёг я спать только в 5 утра в очень расстроенных чувствах.
Ну, во-первых я узнал, что cmp корректно сравнивает только *х регистры, ибо если сравнивать *h или *l, то в итоге не получается правильного перехода по je и jne. Но это ладно, учимся, как говорится на опыте.
Но вот что меня реально доканало....
Короче, надо было поработать со строками и суть в том, чтобы поочерёдно вносить адрес строки в dx. Если написать просто, то усё работает. Но загвоздка в том, что надо это реализовать через подпрограмму.
И вот тут я напарываюсь на такую вот хрень:
Если писать mov dx,offset string3 в теле программы, то в dx оказывается адрес строки 3, как и должно.
Но! Если тоже самое написать в теле процедуры, то в dx всегда оказывается адрес той строки, которая первой описана в сегменте данных.
Итого - хотелось помочь человеку, но не получилось. Да и в самому обидно. Не, человеку я сразу сказал, чтобы он ни на что не расчитывал, ибо ассемблером я занимался последний раз во времена диплома и там усё происходило в разрезе MASM+WinAPI, а тут TASM, который некоторые вещи воспринимает несколько иначе, чем MASM. Например, тот же cmp. В MASMе у меня не было проблем с сравнением 8-битных регистров, а в TASMe он с меня только 16-битные требует, иначе сравнение то ли проходит некорректно, то ли вообще не проходит. Но je и jne, записанные после cmp просто тупо игнорятся.
В общем, я злой, противный и вообще лох.
Ну, во-первых я узнал, что cmp корректно сравнивает только *х регистры, ибо если сравнивать *h или *l, то в итоге не получается правильного перехода по je и jne. Но это ладно, учимся, как говорится на опыте.
Но вот что меня реально доканало....
Короче, надо было поработать со строками и суть в том, чтобы поочерёдно вносить адрес строки в dx. Если написать просто, то усё работает. Но загвоздка в том, что надо это реализовать через подпрограмму.
И вот тут я напарываюсь на такую вот хрень:
Если писать mov dx,offset string3 в теле программы, то в dx оказывается адрес строки 3, как и должно.
Но! Если тоже самое написать в теле процедуры, то в dx всегда оказывается адрес той строки, которая первой описана в сегменте данных.
Итого - хотелось помочь человеку, но не получилось. Да и в самому обидно. Не, человеку я сразу сказал, чтобы он ни на что не расчитывал, ибо ассемблером я занимался последний раз во времена диплома и там усё происходило в разрезе MASM+WinAPI, а тут TASM, который некоторые вещи воспринимает несколько иначе, чем MASM. Например, тот же cmp. В MASMе у меня не было проблем с сравнением 8-битных регистров, а в TASMe он с меня только 16-битные требует, иначе сравнение то ли проходит некорректно, то ли вообще не проходит. Но je и jne, записанные после cmp просто тупо игнорятся.
В общем, я злой, противный и вообще лох.