Собственно не работает под 2000 и XP а под 98 все работает отлично. В чем может быть проблемма? Код (Text): org 100h mov si,mess2 mov ax,0B800h mov es,ax mov di,0 mov cx,3 mov ah,31h outscr: lodsb stosw loop outscr xor ax,ax int 16h ret mess2 db 'new',24h
Код (Text): mov ax,3 int 10h А что эта команда значит? Почему ее нужно использовать? Код (Text): mov si,offset mess2 - я в Fasm пишу этого в нем нет
Возник следующий вопрос. Код (Text): org 100h mov ah,3 int 10h mov ax,0B800h mov es,ax mov si,mess mov di,6 ; <---- mov cx,3 mov ah,31h new: lodsb stosw loop new xor ax,ax int 16h ret mess db 'hi' Выводится не просто "hi" а 'hiS' почему так происходит? Откуда берется лишний символ? Я понимаю что т.к. в cx,3 но почему именно S ? Если изменить чисто в di (смещение) на нечетное то выводится "111" в разной цветовой гамме. Почему?
Просто S - это первый байт мусора после твоей проги. Формат видеопамяти: [символ][атрибут][символ][атрибут][символ][атрибут]... Так что, если смещение в di нечетное, то в качестве атрибута пишется очередной символ твоей строки, а в качестве символа - 31h
И еще вопрос. Наткнулся в книге на пример цикла. Но походу в нем допущена ошибка Код (Text): mov cx,200 out: push cx mov cx,0 in: loop in ; вычитаем из 0 1 получаем 65565 pop cx loop out Тогда получается что уменьшенное значение 65535 нигде не сохраняется, и цикл вечен? Или я не в ту сторону думаю?
Код выполнится 200*65536 раз. Код (Text): mov cx,200 ; Пишем в cx число итераций out: push cx ; Сохраняем счетчик внешнего цикла mov cx,0 ; in: loop in ; Выполняем внутренний цикл (65536 раз) pop cx ; Восстанавливаем счетчик внешнего цикла loop out