Консультация № 57394
02.10.2006, 02:34
0.00 руб.
0 6 4
Здравствуйте.. обьясните пожалуйсто в чем тут дело?
Есть такая программа:

----------------------------------------------------------------------------------------

include userv.mac

data segment
x dw 10 dup(?)
s dw ?
data ends

code segment
assume cs: code, ds: data
start:
mov ax,data
mov ds,ax
mov cx,10
mov bx,0
vvodx:
u_key_bin<13,10,‘Vvedite x: ‘>
mov x[bx],ax
add bx,2
dec cx
jcxz sump
jmp vvodx
sump:
mov cx,10
mov bx,0
mov s,0
cikl:
cmp x[bx],0
jle menshe
mov ax,x[bx]
add s,ax
menshe:
add bx,2
loop cikl
mov ax, s
u_show_bin<13,10,‘Summa polojitelnih chisel=‘>
mov ah,4Ch
int 21h
code ends

stack segment stack
dw 64 dup(?)
stack ends

end start

----------------------------------------------------------------------------------------

Сама программа компилируется, но почемуто при создании *.EXE возникает ошибка:
----------------------------------------------------------------------------------------

LINK : fatal error L1127: far segment references not allowed with /TINY

----------------------------------------------------------------------------------------

большое спасибо ))

Обсуждение

Неизвестный
02.10.2006, 09:27
общий
это ответ
Здравствуйте, Глеб!

Модель памяти TINY предпологает что все данные и код находяться в одном сегменте. Поменяй модель памяти ключами в файле userv.mac или сгруппируй их (DGROUP) или сам перенеси все в один сегмент.
Неизвестный
02.10.2006, 13:14
общий
я еще начинаюций... поведайте плиз что за ключи.. и как все это сделать... Пасибо...
Неизвестный
02.10.2006, 15:21
общий
это ответ
Здравствуйте, Глеб!
Размер кода не велик, можно все разместить в одном сегменте (*.com файл, модель - TINY)
----------------/Результат зависит от userv.mac/----------------------------------
include userv.mac

code segment
assume cs: code, ds: data
start:
mov ax,data
mov ds,ax
mov cx,10
mov bx,0
vvodx:
u_key_bin<13,10,‘Vvedite x: ‘>
mov x[bx],ax
add bx,2
dec cx
jcxz sump
jmp vvodx
sump:
mov cx,10
mov bx,0
mov s,0
cikl:
cmp x[bx],0
jle menshe
mov ax,x[bx]
add s,ax
menshe:
add bx,2
loop cikl
mov ax, s
u_show_bin<13,10,‘Summa polojitelnih chisel=‘>
mov ah,4Ch
int 21h

x dw 10 dup(?)
s dw ?

code ends
end start
----------------//----------------------------------
Тогда ключи менять не надо.
Неизвестный
02.10.2006, 15:31
общий
это ответ
Здравствуйте, Глеб!
Скорее всего ошибка происходит мз-за того, что вы запускаете ml.exe с параметром /AT. Компилятор пытается создать .COM файл, а это невозможно при наличии нескольких сегментов. Попробуйте запускать ml.exe без параметров.
Неизвестный
02.10.2006, 18:43
общий
всем огромное спасибо, все получилось, надо просто было без AT компилировать...
Неизвестный
02.10.2006, 20:01
общий
это ответ
Здравствуйте, Глеб!
Когда не ставят модель подразумевается TINY т.е. данные, код в одном сегменте.А у Вас все в разных - это small.
Ставьте диррективу .model small .
С уважением, ENS.
Форма ответа