сам код по себе лёгок как два пальца обо сфайл но не пойму в чём дело создал код который выводит сообщение "Hello" теперь в этот же код добавил еще операторы которые создают в теле кода ЦИКЛ кол-во раз цикла 3 т.е. цикл должен вывести 3 раза слово "Hello" но объектный файл не создается Почему??? без цикла код комплится и открывается но с в несением не работает!!! а вот КОД: CSEG segment ------------------------------------------------------- org 100h start: mov cx,3 ;здесь задается кол-во цикла label: ;метка цикла mov ah,9 mov dx,offset string int 21h ;прерывание вывода слова string db 'Hello$' loop label CSEG ends end start ------------------------------------------------------ пример взят с учебника!!!! Калашникова кто не логнал код пишется в MASM 6.11 под DOS
не читал Калашникова, но пример неверный: 1.где код завершения программы? 2.почему текстовая строка находится прямо внутри кода без обходов? 3.откуда уверенность, что cx после вызова int 21h не изменится?
не понятно: так компилится или не компилится, если да то работает или не работает? для начала нужно правильно описывать проблему: "не компилится, ассемблер выдаёт такое то сообщение об ошибке", - и желательно это сообщение тут полностью вставить, или хотя бы начало, если список ошибок очень длинный. и т.п. - не все ж тут ясновидцы. будешь так писать - никто помогать не будет
...однажды к поезду прицепили два 6-х вагона... Продублирую, ибо один удалят. Возможно, потому, что "label" - псевдооператор, зарезервированное слово? А ты им метку обозвал. Возможно, потому, что у программы нет конца? Где "ret" или "int 20h" или еще какой-нибудь способ завершения программы? Возможно, потому, что строка (то есть данные) неизбежно выполнится как код, и будет ли выполняться команда loop - еще бабушка надвое сказала. Потому что выполнится ... and al, e2h neg al ... (а loop'а не будет, его порвало как грелку). А учебник Калашникова все равно бяка, выкинь ))
Код (Text): CSEG segment ------------------------------------------------------- org 100h start: mov cx,3 ;здесь задается кол-во цикла label: ;метка цикла mov ah,9 mov dx,offset string int 21h ;прерывание вывода слова string db 'Hello$' <--------- loop label CSEG ends end start ------------------------------------------------------ ваш код содержит грубейшие ошибки 1. вы всунули кусок данных в код и допустили чтоб на них попало управление см на стрелку 2. после инструкции loop должен быть код возвращающий упраление ОС его у вас нету и здесь опять по завершению цикла управление получает "воздух" 3.
тряхнем стариной, итак Код (Text): CSEG segment ------------------------------------------------------- org 100h $start: mov cx,3 ;здесь задается кол-во цикла jmp $loop string db 'Hello$' $loop: ;метка цикла mov ah,9 mov dx,offset string int 21h ;прерывание вывода слова loop $loop ret ------------------------------------------------------ CSEG $ends end start эдак все должно компилиться только не забудь ключи поставить для com файлов(пример вроде как com программы)
короче я не забыл а промахнулся так что там ошибок тоже 2 пришлось исправить CSEG segment ------------------------------------------------------- org 100h $start: mov cx,3 ;здесь задается кол-во цикла jmp $loop string db 'Hello$' $loop: ;метка цикла mov ah,9 mov dx,offset string int 21h ;прерывание вывода слова loop $loop ret ------------------------------------------------------ CSEG ends end $start
мой вариант CSEG segment ------------------------------------------------------- org 100h start: mov ah, 09h mov dx, offset string mov cx,3 label: int 21h loop label int 20h string db 'Hello$' ------------------------------------------------------ CSEG ends end start
Microedition вы либо шутите, либо не понимаете, что ---------- это просто так, визуальное отделение, которое я тупо взял с первого поста, смысл то не в них...