Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211

Dos сдвиг курсора

23.10.2011, 00:44. Показов 4905. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cmp al,backspace
jne bspace
mov ah,3h{;berem piziciu kursora}
mov bh,0
int 10h
mov ah,2h{;ystanavlivaem poz kurspra}
cmp dl,0
je bspace
dec dl {;sdvigaem na 1 poziciu vlevo }
int 10h
mov ah,2h{;vivod zatiranij  }
mov dl,0FFh
int 21h
mov ah,3h
mov bh,0
int 10h
mov ah,2h
dec dl
int 10h
bspace:
как сделать что бы сдвигал на 1 символ потому что у меня перескакивает через 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2011, 00:44
Ответы с готовыми решениями:

Интерфейс выбора курсора мыши в MS DOS
Привет. Нужно организовать интерфейс выбора курсора мыши. Чтобы пользователь сам мог выбрать из 2 вариантов. Может у кого есть код? ...

Установка позиции курсора средствами DOS
какая функция отвечает для установки позиции курсора в dos и какой регистр?

Сдвиг курсора в любом окне
Нужно что-то такое, в определённом окне (которое я выберу), каждую секунду сдвигать курсор на 1 пексел, тобишь: 1-я секунда x -= 1 2-я...

8
247 / 205 / 26
Регистрация: 03.02.2009
Сообщений: 785
23.10.2011, 08:47
Попробуйте вместо mov dl,0FFh {;vivod zatiranij }
написать mov dl,32 (это пробел)
0
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
23.10.2011, 15:19  [ТС]
Цитата Сообщение от o-user Посмотреть сообщение
Попробуйте вместо mov dl,0FFh {;vivod zatiranij }
написать mov dl,32 (это пробел)
ничего не изменилось
0
 Аватар для zzzyyyxxx
768 / 312 / 11
Регистрация: 27.05.2011
Сообщений: 703
23.10.2011, 15:40
выложи целиком, прога + задание. а там видно будет.
0
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
23.10.2011, 15:59  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
uses crt;
label a1,exit,bspace,bspace1,r_exit;
const esc=27;
const enter=13;
const backspace=8;
var
s:array[1..80] of byte;
i:byte;
begin
clrscr;
writeln('enter interrupt sign');
asm
mov ah,8h {vvod znaka prerivani9I }
int 21h
mov i,al
 
lea bx,byte ptr s {;bx=addres masiva }
mov cx,8
a1:
mov ah,1h{;vvod elementov masiva       }
int 21h
 
cmp al,i
je exit
 
cmp al,esc
je exit
 
cmp al,enter
je exit
 
cmp al,backspace
jne bspace
 
push cx
 
mov ah,3h{;berem poziciu kursora}
mov bh,0
int 10h
 
mov ah,2h{;ystanavlivaem poz kurspra}
cmp dl,0
je bspace1
dec dl {;sdvigaem na 1 poziciu vlevo }
int 10h
 
mov ah,2h{;vivod zatiranij  }
mov dl,20h
int 21h
 
mov ah,3h
mov bh,0
int 10h
 
mov ah,2h
dec dl
int 10h
bspace1:
pop cx
bspace:
mov [bx],ax
inc bx
loop a1
 
exit:
or cx,cx
jz r_exit
mov byte ptr [bx],0 
inc bx
dec cx
or cx,cx
jnz exit
r_exit:
end;
readln;
 
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,908
Записей в блоге: 12
23.10.2011, 16:02
vetal10, а зачем после того, как передвинул курсор на 1 символ назад, опять выводить символ, опять брать позицию, опять переустанавливать курсор назад?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    cmp al,backspace
    jne bspace
    mov ah, 3h  ; позиция курсора
    mov bh, 0
    int 10h
    mov ah,2h   ; установка новой позиции
    cmp dl, 0
    je bspace
    dec dl      ; на 1 назад
    int 10h
    mov ah, 9   ; а теперь выводим символ (пробел)
    mov al, 32  ; без изменения позиции курсора
    mov cx, 1
    mov bx, 7
    int 10h
не проще будет?
0
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
23.10.2011, 16:15  [ТС]
задание:

Задание: Создать программу на языке высокого уровня с ассемблерным кодом для ввода и отображения текстовой строки до 80 символов. Код ассемблера вставить в процедуру языка высокого уровня. Перед вводом строки кодом ассемблера должны быть реализованы запрос на клавиши для выхода из редактирования и считывание этих клавиш (от 1 до 10 по желанию пользователя). Стандартными клавишами для выхода - ESC и ENTER. При редактировании строки должно быть реализовано: работа клавиши BACKSPACE, перемещение курсора по написанной строке, стирание и вставка символов с позиции курсора (в том числе и в середине строки). Строка должна запоминаться в строковой переменной или массиве целочисленных переменных. После завершения редактирования строки ее значение вывести на экран с помощью языка высокого уровня.

Добавлено через 7 минут
Цитата Сообщение от UI Посмотреть сообщение
vetal10, а зачем после того, как передвинул курсор на 1 символ назад, опять выводить символ, опять брать позицию, опять переустанавливать курсор назад?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    cmp al,backspace
    jne bspace
    mov ah, 3h  ; позиция курсора
    mov bh, 0
    int 10h
    mov ah,2h   ; установка новой позиции
    cmp dl, 0
    je bspace
    dec dl      ; на 1 назад
    int 10h
    mov ah, 9   ; а теперь выводим символ (пробел)
    mov al, 32  ; без изменения позиции курсора
    mov cx, 1
    mov bx, 7
    int 10h
не проще будет?
хорошее замечание))я незнал про такую возможность
а как насчет того что бы он на 1 символ смещался??
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,908
Записей в блоге: 12
23.10.2011, 16:58
Так у тебя Паскаль, оказывается... Отладчиком пройдись по программе. В тот момент, как ты нажал Backspace, и получил это нажатие с помощью
Assembler
1
2
mov ah, 1h
int 21h
, курсор уже перепрыгнул на одну позицию назад. То есть, тебе ничего не надо перемещать, достаточно сразу стереть символ в текущей позиции курсора и всё.
1
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
23.10.2011, 19:23  [ТС]
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2011, 19:23
Помогаю со студенческими работами здесь

Написать код,чтобы при нажатии клавиши D и d был сдвиг курсора на один символ вправо
Написать код,чтобы при нажатии клавиши D и d был сдвиг курсора на один символ вправо,а при нажатии А и а,по аналогии влево. #include...

Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг
Битовые сдвиги.FW4,msstudio 13,на C# 1)Реализовать быстрое умножение на 2(логический сдвиг влево) 2)Реализовать быстрое деление на...

Как в DOS-BOX написать BAT-файл чтобы ЛЕГКО запустить DOS-программу ?
ВСЕМ ДОБРОГО ВРЕМЕНИ ! Надо на Windows_7 СРОЧНО запустить старую программу, написанную еще под DOS c базами данных DBASE ... Для этого...

Написать программу, выводящую на экран номер версии DOS, а также системную дату и время на языке MS-DOS
написать программу,выводящую на экран номер версии DOS,а также системную дату и время на языке MS-DOS

Когда DOS был жив, можно ли было переделать windows98 и > драйвера звуковой карты под DOS?
Если я правильно понимаю там прямая запись в порты(если на самом низком уровне) это ведь можно повторить на любой ОС?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru