19.07.2019, 05:56 [+3 UTC]
в нашей команде: 3 748 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
19.07.2019, 04:09
Всего: 149940

Последний ответ:
18.07.2019, 12:04
Всего: 258705

Последняя рассылка:
17.07.2019, 22:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
11.11.2012, 05:33 »
Посетитель - 386361
Спасибо большое! [вопрос № 186794, ответ № 271685]
08.07.2010, 04:54 »
Kalina777
Спасибо за оперативный ответ! [вопрос № 179436, ответ № 262458]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 198
Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 143
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 48

Перейти к консультации №:
 

Консультация онлайн # 195928
Раздел: • Assembler
Автор вопроса: Matvey (Посетитель)
Отправлена: 01.07.2019, 15:10
Поступило ответов: 1

Здравствуйте! smile Прошу помощи в следующем вопросе:

Я не дружу с Ассемблером, вот вообще не понимаю его. я пытался учить его, но видимо не дано мне. По этому рассчитываю на вашу помощь с этой заданием.
Пожалуйста помогите smile

есть задание: нужно продублировать согласные буквы слова или текста , но текст считать из файла, а потом записать обратно в файл.

вот код, который просто дублирует согласные буквы:

Код (Assembler) :: выделить код
.model small
 
.stack 200h
 
.data
        CrLf            db      0Dh, 0Ah, '$'
        msgSource       db      0Dh, 0Ah, 'The source string:', 0Dh, 0Ah, '$'
        msgResult       db      0Dh, 0Ah, 'The Result string:', 0Dh, 0Ah, '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        Consonants      db      'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'
        Len             =       $-Consonants
        Text            db      'Global trade losing momentum as trade tensions persist - WTO'
        N               =       $-Text
.code
 
main    proc
        ;инициализация сегментного регистра ds адресом сегмента данных
        mov     ax,     @data
        mov     ds,     ax
        ;вывод исходной строки
        mov     ah,     09h
        lea     dx,     [msgSource]
        int     21h
        mov     ah,     40h
        mov     bx,     1
        mov     cx,     N
        lea     dx,     [Text]
        int     21h
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [msgResult]
        int     21h
        ;обработка строки и вывод результата
        lea     si,     [Text]
        mov     cx,     N
        mov     ax,     ds
        mov     es,     ax
        cld
        @@for:
                lodsb
                push    cx
                int     29h
                lea     di,     [Consonants]
                mov     cx,     Len
                repne   scasb
                jnz     @@next
                int     29h
        @@next:
                pop     cx
        loop    @@for
 
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

Последнее редактирование 01.07.2019, 15:26 Зенченко Константин Николаевич (Старший модератор)

Состояние: Консультация закрыта

Здравствуйте, Matvey!

Смотрите приложение:

Код (Assembler) :: выделить код
model	small
.code
begin:	mov	ax,@data
	mov	ds,ax
	mov	es,ax
	cld
	mov	ax,3D42h
	lea	dx,dbInp
.data
dbInp	db	'190711i.txt',0
.code
	int	21h
	mov	dwHndl1,ax
.data
dwHndl1	dw	-1
.code
	jnc	@@01
	lea	dx,dbErr1
.data
dbErr1	db	10,13,'error dont open first file$'
	jmp	@@07
.code
@@01:	mov	ah,3Ch
	xor	cx,cx
	lea	dx,dbOut
.data
dbOut	db	'190711o.txt',0
.code
	int	21h
	mov	dwHndl2,ax
.data
dwHndl2	dw	-1
.code
	jnc	@@02
	lea	dx,dbErr2
	jmp	@@07
.data
dbErr2	db	10,13,'error dont open second file$'
.code
@@02:	mov	ah,3Fh
	mov	bx,dwHndl1
	mov	cx,1
	lea	dx,dbBuff
.data
dbBuff	db	?
.code
	int	21h
	or	al,al
	jz	@@06
@@04:	lea	di,dbCheck
.data
dbCheck	db	'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'
szCheck	equ	$-dbCheck
.code
	mov	cx,szCheck
	mov	al,dbBuff
	repne	scasb
	jnz	@@05
	mov	ah,40h
	mov	bx,dwHndl2
	mov	cx,1
	lea	dx,dbBuff
	int	21h
@@05:	
	mov	ah,40h
	mov	bx,dwHndl2
	mov	cx,1
	lea	dx,dbBuff
	int	21h
	jmp	@@02
@@06:	lea	dx,dbPress
.data
dbPress	db	10,13,'press any key . . .$'
.code
@@07:	mov	ax,dwHndl1
	cmp	ax,-1
	jz	@@08
	mov	ah,3Eh
	int	21h
@@08:	mov	ax,dwHndl2
	cmp	ax,-1
	jz	@@09
	mov	ah,3Eh
	int	21h
@@09:	mov	ah,9
	int	21h
	xor	ax,ax
	int	16h
	mov	ax,4C00h
	int	21h
.stack	200h
	end	begin


Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 11.07.2019, 14:08

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 195928

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 1

= общий = | 05.07.2019, 22:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Matvey:

© Цитата: Matvey
Я не дружу с Ассемблером, вот вообще не понимаю его. я пытался учить его, но видимо не дано мне.


Внимательно это прочитайте и скажите, что поняли, а что нет.

Тут нужно запомнить простую схему:
  • данные как-то попадают в программу(введены с клавиатуры, прочитаны с файла, прочитаны с сети, уже есть в программе с сегменте данных);
  • с данными, что-то делается(не важно что, тут зависит все, только от Вашей фантазии: +-/*, можно биты менять, можно байты сушить smile );
  • результат всех Ваших махинаций с даными, где-то сохраняется(выводится на экран, записывается в файл, отправляются куда-то в сеть, просто остаются в памяти).


Это схема ЛЮБОЙ программы, повторяю ЛЮБОЙ, даже ЛЮБОЙ ОСи, т.к. она тоже программа.

Если Вы поняли эту схему, то дальше все просто.

Ввод и вывод происходит с помощью разных функций DOS, и все они - надстройка над работой с портами. Но т.к. Вы начинающий, то "железную" сотавляющую опустим, и перейдем к самой близкой к работе с портами функциям:
Код (Assembler) :: выделить код
AH = 40h
BX = file handle
CX = number of bytes to write
DS : DX -> data to write

или
Код (Assembler) :: выделить код
AH = 3Fh
BX = file handle
CX = number of bytes to read
DS : DX -> buffer for data

Заметили разницу, только номер функции указывает, что делает функция, остальное одинаково.

file handle - это некоторое число, которое указывает на некоторую системную область и указавает ей(DOS) с каким устройством будет работать функция.

DOS - для любой программы открывает 5-ть стандартных каналов(программа-железо)-файлов-устройств-потоков(не важно какое именно название Вам ближе, важно - есть программа, есть "железо" и между ними есть связь, с помощью file handle):

© Цитата: см. тут
Стандартные потоки: stdin, stdout, stderr, stdaux, stdprn.

Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки — стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и стандартное устройство печати (stdprn).
По умолчанию стандартный ввод/вывод и стандартный вывод сообщений об ошибках связывается с консольным терминалом.


Их нумерация начинается с нуля, т.е. stdin=0, stdout=1, . . . , stdprn=4. Практически все компиляторы понимают stdin, stdout, stderr, stdaux, stdprn, но бывают и "тугодумы", которым нужно пальцем тыкать.

-----
Последнее редактирование 05.07.2019, 22:29 Зенченко Константин Николаевич (Старший модератор)

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14586 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35