Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2009, 14:58   #1
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию Ошибка в использовании сегмента

в чем ошибка подскажите пожайлуста(строка 13) - непонятно
Код:
      1					 .386P
      2	00000000			 .MODEL	FLAT, STDCALL
      3	00000000			 data segment dword public "data"
      4	00000000  C2 E2	E5 E4 E8 F2 E5+	 message db "Введите две шестнадцатеричные цифры,$"
      5		  20 E4	E2 E5 20 F8 E5+
      6		  F1 F2	ED E0 E4 F6 E0+
      7		  F2 E5	F0 E8 F7 ED FB+
      8		  E5 20	F6 E8 F4 F0 FB+
      9		  2C 24
     10	00000025			 data ends
     11	00000000			 stk segment stack
     12	00000000  0100*(3F)			 db 256	dup("?")
     13	00000100			 stk ends
     14	00000000			 code segment	 dword public "code"
     15	00000000			 start:
     16					 ;main proc
     17					 ;	 assume	cs:code,ds:data,ss:stk
     18	00000000  66| B8 0000s			 mov ax,data
     19	00000004  8E D8				 mov ds,ax
     20	00000006  B4 09				 mov ah,9
     21	00000008  66| B8 0000r			 mov ds,offset message
**Error** proba.asm(16)	Illegal	use of segment register
     22	0000000C  CD 21				 int 21h
     23	0000000E  66| 33 C0			 xor ax,ax
     24	00000011  B4 01				 mov ah,1h
     25	00000013  CD 21				 int 21h
     26	00000015  8A D0				 mov dl,al
     27	00000017  80 EA	30			 sub dl,30h
     28	0000001A  80 FA	09			 cmp dl,9h
     29	0000001D  7E 07	90 90 90 90		 jle M1
     30	00000023  80 EA	07			 sub dl,7h
     31	00000026			 M1:
     32	00000026  B1 04				 mov cl,4h
     33	00000028  D2 E2				 shl dl,cl
     34	0000002A  CD 21				 int 21h
     35	0000002C  2C 30				 sub al,30h
     36	0000002E  3C 09				 cmp al,9h
     37	00000030  7E 06	90 90 90 90		 jle M2
     38	00000036  2C 07				 sub al,7h
     39	00000038			 M2:
     40	00000038  02 D0				 add dl,al
     41	0000003A  66| B8 4C00			 mov ax,4c00h
     42	0000003E  CD 21				 int 21h
     43					 ;main endp
     44	00000040			 code ends
     45					 end start
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:06   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Цитата:
stk segment stack
0100*(3F) db 256 dup("?")
stk ends
Так вы объявили стэк
0100*(3F)- а что это?
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 10.06.2009, 15:18   #3
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию

ну это я лист вывел - так то он объявляется
stk segment stack
db 256 dup("?")
stk ends
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:19   #4
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию

если я убираю
message db "Введите две шестнадцатеричные цифры,$"
в Data - то он перестает ругаться
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:34   #5
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Цитата:
если я убираю...
Это может означать, что вы не проинициализировали data
А в строке 17 чё за улыбка вместо data!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 10.06.2009, 15:40   #6
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию

а это инет вставил
а инициализировать как?(в смысле не ввел ничего с клавиатуры?)
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:44   #7
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию

а как обойти инициализацию при компиляции? на Turbo Asm 5
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:48   #8
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

А точно, ступил! Извиняюсь!!!
Вот наверное ошибка:
mov ds,offset message
Нужно в dx класть!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 10.06.2009, 15:56   #9
Miller-1981
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 89
По умолчанию

да точно - спасибо
тока вот ща другая ошибка
21 000C 33 C0 xor ax,ax
22 000E B4 01 mov ah,1h
23 0010 CD 21 int 21h
24 0012 8A D0 mov dl,al
25 0014 80 EA 30 sub dl,30h
26 0017 80 FA 09 cmp dl,9h
27 001A 7E 03 jle M1
**Error** proba.asm(22) Near jump or call to different CS
28 001C 80 EA 07 sub dl,7h
29 001F M1:
30 001F B1 04 mov cl,4h
31 0021 D2 E2 shl dl,cl
32 0023 CD 21 int 21h
33 0025 2C 30 sub al,30h
34 0027 3C 09 cmp al,9h
35 0029 7E 02 jle M2
**Error** proba.asm(30) Near jump or call to different CS
36 002B 2C 07 sub al,7h
Miller-1981 вне форума Ответить с цитированием
Старый 10.06.2009, 15:59   #10
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

И опять же CS где?
Привожу полный рабочий код:
Код:
text segment
assume cs:text, ds:data

begin:
     mov ax,data
     mov ds,ax
     
     mov ah,9
     mov dx,offset message
     int 21h

     xor ax,ax
     mov ah,1h
     int 21h
     mov dl,al
     sub dl,30h
     cmp dl,9h
     jle M1
     sub dl,7h
M1:
     mov cl,4h
     shl dl,cl
     int 21h
     sub al,30h
     cmp al,9h
     jle M2
     sub al,7h
M2:
     add dl,al
     mov ax,4c00h
     int 21h



text ends

data segment
 message db "Введите две шестнадцатеричные цифры,$"
data ends
stk    segment stack
       db 256 dup (?)
stk ends
    end begin
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка List index out of bounds(0) при использовании запроса AdoQuery ArtInt БД в Delphi 14 15.04.2009 18:35
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
Помогите с алгоритмом построения сегмента DjDizzy Помощь студентам 4 10.02.2009 20:46
Подскажите, где ошибка в использовании ControlSource... Tooree Microsoft Office Access 2 18.08.2008 20:46