Lazar
Гость
|
|
« : 22-05-2007 07:30 » |
|
Добрый день.
Для каких целей используют @DATA? Что это?
Вот фрагмент кода, который совершенно не могу понять:
mov ax,@DATA mov ds,ax mov es,ax
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 22-05-2007 07:52 » |
|
настройка регистра сегмента на адрес сегмента данных (тут ты настраиваешь два регистра сразу)
а где то до этого у тебя должен быть определён сегмент данных
.DATA db ... ...
|
|
« Последнее редактирование: 22-05-2007 07:54 от Алексей1153++ »
|
Записан
|
|
|
|
Lazar
Гость
|
|
« Ответ #2 : 22-05-2007 08:04 » |
|
Здорофф, Алексей. Скажи, @DATA используется только при компилировании на tasm или нечто подобное необходимо и в nasm'е?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 22-05-2007 08:24 » |
|
понятия не имею ) по идее общепринятый синтаксис
|
|
|
Записан
|
|
|
|
Lazar
Гость
|
|
« Ответ #4 : 22-05-2007 08:45 » |
|
Попытался покрасить строки в лабе. Однако почему-то при попытке сменить цвет в середине кода на экран попадают какие-то непонятные нули... Пытался обнулисть регистры, не выходит... В чем может быть дело? SEGMENT .text org 100h start: mov ah,09h mov bl,06 int 10h ;------------------------------ mov ah,40h mov bx,1 mov cx,48 mov dx,titl0 int 21h ;------------------------------ mov ah,09h mov bl,09 int 10h ;------------------------------ mov ah,40h mov bx,1 mov cx,32 mov dx,titl1 int 21h mov ah,3fh mov bx,0 mov cx,20 mov dx,buffer1 int 21h int 20h ;------------------------------ SEGMENT .data titl0 db ' LABORATE WORK NUMBER FOUR',13,10, ;48 titl1 db 'Enter the search area length: ',13,10 titl2 db 'You have entered invalid value...',13,10 titl3 db 'The minimum value on this area is: ',13,10 titl4 db 'Index of matrix minimum value is: ',13,10 buffer1 TIMES 20 db 0 maxArray equ 30 dataArray dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 22-05-2007 08:49 » |
|
Lazar, а комментарии напиши ещё )
|
|
|
Записан
|
|
|
|
Lazar
Гость
|
|
« Ответ #6 : 22-05-2007 09:09 » |
|
Sorry... SEGMENT .text org 100h start: mov ah,09h ;задаем функцию, которая управляет цветом mov bl,06 ;задаем цвет и фон строки int 10h ;устанавливаем прерывание ;------------------------------ Выводим на экран первое сообщение mov ah,40h mov bx,1 mov cx,48 mov dx,titl0 int 21h ;------------------------------ ;Снова перекрашиваем строки(здесь и возникает глюк) mov ah,09h mov bl,09 int 10h ;------------------------------ ;Выводим следующее сообщение(уже на фоне нулей) mov ah,40h mov bx,1 mov cx,32 mov dx,titl1 int 21h mov ah,3fh mov bx,0 mov cx,20 mov dx,buffer1 int 21h int 20h ;------------------------------ SEGMENT .data titl0 db ' LABORATE WORK NUMBER FOUR',13,10, ;48 titl1 db 'Enter the search area length: ',13,10 titl2 db 'You have entered invalid value...',13,10 titl3 db 'The minimum value on this area is: ',13,10 titl4 db 'Index of matrix minimum value is: ',13,10 buffer1 TIMES 20 db 0 maxArray equ 30 dataArray dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05 dw 01,02,03,04,05
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 22-05-2007 09:26 » |
|
для начала попробуй в конце строк поставить $
titl0 db ... ,13,10,'$' titl1 db ... ,13,10,'$' titl2 db ... ,13,10,'$' titl3 db ... ,13,10,'$' titl4 db ... ,13,10,'$'
|
|
|
Записан
|
|
|
|
Lazar
Гость
|
|
« Ответ #8 : 22-05-2007 09:32 » |
|
Поставил '$' Все равно выдает 000000000
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 22-05-2007 09:44 » |
|
нету щас справочника под рукой... после работы посмотрю
1) попробуй выполнить код без участка , где первая строка выводится
SEGMENT .text org 100h start: mov ah,09h ;задаем функцию, которая управляет цветом mov bl,06 ;задаем цвет и фон строки int 10h ;устанавливаем прерывание ;------------------------------ Выводим на экран первое сообщение ; ;------------------------------ ;Снова перекрашиваем строки(здесь и возникает глюк) mov ah,09h mov bl,09 int 10h
- то же самое ? Если нет, то глюк в заремленном участке.
2) Прерывания - из не устанавливают , их генерируют;)
|
|
« Последнее редактирование: 22-05-2007 09:47 от Алексей1153++ »
|
Записан
|
|
|
|
Starech
Гость
|
|
« Ответ #10 : 25-02-2008 16:03 » |
|
Всё обьясняеться просто, функция 09h прерывания 10h BIOS выводит символы в текущую позицию экрана и при этом: AH=09h AL=выводимый символ BH=номер страницы (текстовый режим) BL=атрибут символа CX=число повторений т. е. выводиться один и тот же символ, когда его запрашивали в первый раз он делал 256 (CX=0)повторений символа 00 (AL=0), а позже ты поверх изменённого атрибутами писал текст... изначально всё по нулям стояло, а дальше данные изменились... и CX и AL... удивительно что в нужную страницу попал...
|
|
|
Записан
|
|
|
|
|