powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите_с_Ассемблером
7 сообщений из 7, страница 1 из 1
Помогите_с_Ассемблером
    #35046495
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет:)
Помогите пжста с задачей по ассемблеру, всё почти в задаче получилось, только работает коряво, т.к. я плохо ещё в этом "машинном" языке освоился и не знаю как удалить по нажатию клавиши буквы из строки.
Вывожу я красными буквами произвольную строку, допустим слово "privet", через каждые пол-секунды, т.е. у меня получается privet privet privet и так далее, а как вот удалить при нажатии конкретной клавиши один символ из строки, чтобы получилось rivet rivet rivet, я не знаю, поэтому прошу вашей помощи.
Для наглядности выкладываю код своей задачки:
Код: plaintext
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.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
.model small
        .stack 100h
        .data
ende	db	 10 , 13 ,'End!', 10 , 13 
endelen	equ	$-ende
star	db	'*'
msg11	db	'Enter word='
len11	equ	$-msg11
buf	db	 80  dup( 0 )
buflen	dw	?
;buflen	equ	$-buf
;buflen	dw	 0 
ln	dw	 0 	
x1	db	 0 
y1	db	 0 
	
;Ввод строки функцией 0x3Fh
inmes	macro	mes,len
	mov	ah,3fh
	mov	bx, 0 
	mov	cx, 80 
	mov	dx,offset mes
	int	21h
	sub	ax, 2 
	mov	len,ax
endm


;макрос задержки на time условных тактов
delay	macro	time
	local	inner,outer
	mov	cx,time
outer:	push	cx
	xor	cx,cx
inner:	loop	inner
	pop	cx
	loop	outer
endm
	
;макрос файлового вывода строки mes длиной len
outmes	macro	mes,len	
	mov	ah,40h
        mov     bx, 1 
        mov     cx,len
        mov     dx,offset mes
        int 	21h
	endm

	
;макрос консольной приостановки до нажатия клавиши
;после нажатия клавиши два байта поступают в регистр АХ;
;макрос может использоваться для очистки консольного буфера
stop	macro
	mov	ah, 0 
	int	16h
	endm

;макрос очистки экрана
clrscr	macro
	mov	ax, 3 
	int	10h
endm

slovo	macro	buf3,len,x,y,atr
	push	es
	mov	ax,ds
	mov	es,ax
	mov	ah,13h
	mov	al, 1 
	mov	bh, 0 
	mov	bl,atr
	mov	cx,len
	mov	dh,y
	mov	dl,x
	mov	bp,offset buf3
	int	10h
	pop	es
endm

        .code
        mov     ax,@data
        mov     ds,ax
	clrscr
	outmes	msg11,len11
	inmes	buf,ln
	stop	;после нажатия любой клавиши
	clrscr
again:	slovo	buf,ln,x1,y1, 12 
	add	x1, 2 
	cmp	x1, 73 
;	ja	
	add	x1, 0 
	cmp	y1, 0 
	jne	next
	add	x1, 0 
	mov	dx,ln
	add	x1,dl
	mov	y1, 0 	
next:	delay	 1000 
	mov	ah, 1 
	int	16h
	jz	again
	stop
	cmp	ax,011Bh	;Escape Code
	je	endprog
	jmp	again	
endprog:outmes	ende,endelen
	stop
	mov	ax,4C00h
	int	21h
end
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35046617
Фотография Ban Me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитай в techhelp про порт [60H] , прямой обработчик клавиатуры.
int 16 - говешка.

Continue_Prog:
;
Keyb:
IN AX, 60h
CMP AL, 01h
JZ Exit
CMP AL, 1Ch
JZ Exit
JMP Continue_Prog ;or goto Keyb
Exit:
MOV AX, 4C00h
INT 21h
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35046655
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то всё равно ничего не получается...у кого нить есть хорошая ссылка на проверенные доки ассемблера, а то в инете смарю, одна бяка неполноценная.
P.S. Ban Me , поясни пжста приведённый тобой скрипт и как он вяжется в моём случае...Спасибо.
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35046681
Фотография Ban Me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор;макрос консольной приостановки до нажатия клавиши
;после нажатия клавиши два байта поступают в регистр АХ;
;макрос может использоваться для очистки консольного буфера
stop macro
mov ah,0
int 16h
endm
замени в макросе обработку через 16ый int на обработку через опрос порта -
и обрабатывай клавиши через него, задержек на опрос клавы не будет, делаешь цикл опроса с ответвлениями на действия и возврат обратно к опросу. Твою прогу распутаешь только от обработки клавиатуры. Вобще,прямо скажу, код не красавец. Заводи переменные - плин , ООП же проходили полюбому. Структурно мыслить учись. МАсм в последних версиях даж под дос, реально мощная система для написания нелинейных программ.

Насчёт ресурсов - лезь на wasm.ru
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35047006
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ban Me , спасибо тебе, что помогаеж от души!:)
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35048224
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladaoу кого нить есть хорошая ссылка на проверенные доки ассемблера
Ban Me уже ж написал - TechHelp - это самое то что тебе нужно. Была 4-я версия на русском, и более полная 6 - на английском

По поводу того кода, что он написал - думаю тебе ещё рано с портами разбираться. Лучше всё-таки сначала с 16-м прерыванием разберись
Ban MeНасчёт ресурсов - лезь на wasm.ru+1024 Лучше ресурса по асму нет

По твоему вопросу:
Если ты хочешь чтоб было так: privet, rivet, ivet... то нужно просто передавать адрес строки + смещение. mes + 1, mes +2 и т.д. ну и len соответственно уменьшать
Если всё же нужно что было так:
Сначала: privet
После нажатия: rivet rivet
ivet ivet
То проще всего очищать строку, ну и выводить несколько раз с правильным смещением.
Если же нужно удалять произвольные символы из строки, то нужно выводить посимвольно, а не построчно
...
Рейтинг: 0 / 0
Помогите_с_Ассемблером
    #35048958
Vladao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо тебе, Гэтмэн за хороший ответ-совет:)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите_с_Ассемблером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]