Консультация № 32331
28.12.2005, 13:03
0.00 руб.
0 4 2
доброе время суток, уважаемые эксперты!
Помогите разобраться в проге (см. прил.). она должна прятать курсор,затем восстанавливать его, вместо этого курсор устанавливается где-то на середину окна... Смотрел в отладчике- в переменную pos_cursor загружается число 1500h, т.е. dx=1500h, откуда оно?
(WinXP)

Приложение:
cseg segmentorg 100hstart: mov ah,3hxor bh,bhint 10hmov pos_cursor,dx ;dx=1500h ????mov ah,2hxor bh,bhmov dx,1900hint 10hmov ax,10hint 16hmov ah,2xor bh,bhmov dx,pos_cursorint 10hmov ax,10hint 16hint 20hpos_cursor dw ?cseg endsend start

Обсуждение

давно
Советник
419
1011
28.12.2005, 13:20
общий
это ответ
Здравствуйте, Macshm!
пиши ли вот так
<ul>
start:
push cs
pop ds
</ul>

или вот так

<ul>
mov [cs:pos_cursor],dx
mov dx,[cs:pos_cursor]
</ul>

удачи!
Неизвестный
28.12.2005, 13:37
общий
это ответ
Здравствуйте, Macshm!

При запуске программы регистры не обнуляются, а имеют предопределенное значение. В частности, в регистр DX заносится адрес кодового сегмента.
В Приложении - установка регистров для COM-программы.
Поэтому тебе нужно не заносить неизвестно что в свою переменную, а инициализировать вначале регистр.

Приложение:
al = bl = ff если первый параметр командной строки - путь к файлу с несуществующим именем диска (task.com Z:),иначе al = bl = 0.ah = bh = ff - то же для второго параметра.cx = 00FFhdx = cs = ds = es = sssi = ip = 100hdi = sp = 0FFFEhbp = 09??hWORD [FFFE] = 0000EFLAGS (binary) = xxxxxxxx xxxxxxxxxxxx0x1x xx0x0x1xDF = 0IF = 1
Неизвестный
30.12.2005, 01:54
общий
Дело здесь вот в чем:Курсор "прячется" путем помещения его в 25 строку. Для 3 режима экрана в досе это работает, ноcmd, через кторый ты верояно запускаешь прогу ставит режим экрана в 50 строк, в результате курсор не прячется, а выводится посреди экрана.Выводы:1) либо ставь курсор в 51 строку т.е.:xor bh,bhmov dx,3300hint 10h2) либо запускай прогу из более "корректных" оболочек, как DN, VC, NC, может быть FAR...
давно
Советник
419
1011
03.01.2006, 11:56
общий
Эй, Академик. а причём здесь регистры? в регистре DX будет выходное значение при вызове функции BIOS. это координаты.
Форма ответа