@data

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
lazar_es
Сообщения: 3
Зарегистрирован: 22 май 2007, 11:44

Добрый день.

Для каких целей используют @DATA? Что это?

Вот фрагмент кода, который совершенно не могу понять:

mov ax,@DATA
mov ds,ax
mov es,ax
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

@data - директива-константа, указывает на сегмент данных в коде, если не объявлен другой сегмент с типом Data
It's a long way to the top if you wanna rock'n'roll
lazar_es
Сообщения: 3
Зарегистрирован: 22 май 2007, 11:44

Как для nasm написать этот блок?
При компилировании этого кода в nasm выдает ошибку...

mov ax,seg DATA
тоже выдает ошибку...
nasm под DOS.
Если можно - с коментами после каждой строчки. Необходимо именно понять.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

тогда нужен код, я же не знаю какая модель кода...
It's a long way to the top if you wanna rock'n'roll
lazar_es
Сообщения: 3
Зарегистрирован: 22 май 2007, 11:44

Эта программа прекрасно работает после компиляции tasm. Надо перевести ее для компиляции в nasm под ДОС.


MODEL small
stack 50
maxArray equ 30
.186
DATASEG
;массив чисел
dataArray dw 10,20,30,40,50
dw 10,20,30,40,50
dw 10,20,30,40,50
dw 10,20,01,40,50
dw 10,20,30,40,50
dw 10,20,30,40,50
dw 10,20,40,40,50
;сообщения
errorNumber db 13,10,'Invalid Number$'
outFirst db 13,10,'Minimum:$'
outSecond db 13,10,'Index:$'
CODESEG
start: mov ax,@DATA
mov ds,ax
mov es,ax
;вводим число
xor bx,bx
input_numb: mov ah,07h
int 21h
cmp al,13
jz stop_input
;контроль ввода
cmp al,'0'
jl input_numb
cmp al,'9'
jg input_numb
push ax
int 29h
pop ax
;умножаем на 10 и суммируем
and ax,0fh
xchg ax,bx
mov cx,10
mul cl
add bx,ax
;проверка введенного числа
cmp bx,maxArray
jle input_numb
;вывод ошибки
mov ah,09h
mov dx,offset errorNumber
int 21h

exit: mov ah,4ch
int 21h
;начинаем проверку массива
stop_input: mov si,offset dataArray
cld
mov cx,bx
push bx
lodsw
mov dx,ax
;поиск минимального числа
loop_find: lodsw
cmp dx,ax;проверка на минимум
jle loop_next
mov dx,ax;запоминаем минимальное число
mov bx,cx
loop_next: loop loop_find
;преобразуем обратный индекс в нормальный
pop ax
sub ax,bx
inc ax
push ax
push dx
;выводим сообщение и число
mov ah,09h
mov dx,offset outFirst
int 21h
pop ax
call out_dec
;выводим сообщение и число
mov ah,09h
mov dx,offset outSecond
int 21h
pop ax
call out_dec
jmp short exit
;вывод в 10-ой форме
out_dec: xor cx,cx
mov bx,10
out_dec_div: xor dx,dx
div bx
or dx,30h ;остаток от деления
push dx ;сохраняем в стеке
inc cx
or ax,ax ;пока не 0 делим
jnz out_dec_div
out_dec_out: pop ax ;извлекаем из стека
int 29h ;и выводим пoсчитанное кол-во цифр
loop out_dec_out
ret
end start
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

mov ax, DATASEG

вообще с учетом модели, можно и так

mov ax, cs
It's a long way to the top if you wanna rock'n'roll
Ramzey
Сообщения: 52
Зарегистрирован: 12 дек 2006, 12:56

somewhere писал(а):mov ax, DATASEG

вообще с учетом модели, можно и так

mov ax, cs
Наверное, с учетом модели так нельзя это же не Tiny.
Ответить