Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Контрольные задачки

Автор: corazon 30.11.2005 9:49

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

1.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A1. Необходимо заменить все символы ‘a’ строки на символ, вводимый с клавиатуры. После замены вывести полученную строку на экран.

2.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A4. Необходимо из введённой строки сформировать новую строку так, чтобы после символа ‘.’ был вставлен один пробел. Вывести полученную строку на экран.

3.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A3. Необходимо определить количество символов ‘.’ и вывести на экран введённую строку и найденное количество.

вот они. Эх.. их еще и макроопределениями надо сделать
я прицепила то что пыталась делать по первой (странно .asm у меня грузиться не захотел, пришлось .txt).


Прикрепленные файлы
Прикрепленный файл  p1.txt ( 2.24 килобайт ) Кол-во скачиваний: 333

Автор: xds 30.11.2005 15:05

Решения задач:


Прикрепленные файлы
Прикрепленный файл  sol.zip ( 3.75 килобайт ) Кол-во скачиваний: 258

Автор: corazon 1.12.2005 9:01

Спасибо, огромное!!!!!!!!!! smile.gif
Только вот...что за com файл?? мы как то без него делаем...

Автор: xds 2.12.2005 5:05

*.com - это исполняемый модуль MS-DOS с моделью памяти "tiny" - почти то же самое, что и *.exe (запускается так же).

Автор: corazon 2.12.2005 9:01

Ага, тока думаю препод меня не поймет, так как мы делаем тока экзешники, я попробую переделать, думаю получится....
а можно еще эти две решить?
1.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A2. Необходимо заменить все рядом стоящие символы ‘a’ и ‘b’ на символы ‘**’. После замены вывести полученную строку на экран.
2.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A5. Необходимо определить, начиная с какой позиции, находится первый встречавшийся символ ‘a’ и вывести на экран введённую строку и найденный номер позиции.

Автор: xds 2.12.2005 16:39

Вот первые три решения в модели памяти "small" (уже MZ EXE): Прикрепленный файл  sol_small.zip ( 4.07 килобайт ) Кол-во скачиваний: 448
.

Цитата
а можно еще эти две решить
Можно: Прикрепленный файл  sol2.zip ( 2.82 килобайт ) Кол-во скачиваний: 457
.

Постарайся разобраться в их работе самостоятельно. Если что-нибудь непонятно - пиши... smile.gif

Автор: corazon 3.12.2005 3:22

Огроменное спасиба, надеюсь теперь контрольную напишу =)
и появились некоторые вопросы: там я так поняла там есть переход на следующую строку почему 10,13 мы вроде как писали 0ah,0dh? ну это наверно не так важно?
пасиба еще раз буду разбираться дальше..
и кстати, странный бат-файл, мы по другому пишем =)

Автор: xds 3.12.2005 11:20

Цитата
там есть переход на следующую строку почему 10,13 мы вроде как писали 0ah,0dh? ну это наверно не так важно?
Правильно так: 13, 10 (0Dh, 0Ah - то же самое, но в шестнадцатеричной системе счисления) - сначала CR (символ с кодом 13 (дес.) / 0D (шест.)), а затем LF (символ с кодом 10 (дес.) / 0A (шест.)). Хотя, в данном случае последовательность не важна.


Цитата
странный бат-файл, мы по другому пишем =)
Так удобно - "make" и готово! =) (можешь попробовать, только измени путь в первой строке).

Автор: corazon 3.12.2005 23:36

Вот я все задачи изучила и теперь вопросы =)

к sol1:
что такое DGROUP?

Цитата
write	macro s
lea dx,s
mov ah,9 ; почему именно 9?
int 21h
endm


к sol2_1:
что делает процедура getchar?
а зачем buf1 и buf2?

по sol3:
не поняла что делают div10 и write_dig
n dw 0 ; зачем такой большой

по sol2_2:
write msg3
pop ax
mov cx,-1
push cx
mov cx,10
div10:
xor dx,dx
div cx
push dx
or ax,ax
jnz div10
write_dig:
pop dx
or dx,dx
js done
add dl,'0'
mov ah,2
int 21h
jmp write_dig

можно это разъяснить...?

Автор: xds 5.12.2005 5:48

Цитата
к sol1:
что такое DGROUP?
DGROUP (Data GROUP) - группа, состоящая из сегментов данных (_DATA, _BSS, CONST) и сегмента стека (STACK). В данном случае, то же самое, что и @data.

Цитата
Код
mov ah,9; почему именно 9?
int 21h

ah = 9 / int 21 - системный вызов MS-DOS, выводящий на стандартный вывод (по-умолчанию - на экран) строку текста. В ds:dx должен находиться начальный адрес строки ("lea dx,s"), а сама строка должна завершаться символом '$' (наследие CP/M smile.gif).

Цитата
к sol2_1:
что делает процедура getchar?
а зачем buf1 и buf2?
getchar - не процедура, а макроопределение - читает символ со стандартного ввода (по умолчанию - с клавиатуры), выводит его на стандартный вывод (экран) и возвращает код символа в al.

Цитата
по sol3:
не поняла что делают div10 и write_dig
Это вывод на экран положительного целого числа в десятичном виде. Цикл "div10:" последовательно делит число на 10 ("div cx") и сохраняет остатки (цифры числа) в стеке (" push dx"). Затем, цикл "write_dig:" извлекает цифры из стека и выводит их на экран (стандартный вывод).

Цитата
n dw 0 ; зачем такой большой
В целях повышения эффективности кода (по скорости выполнения), рекомендуется оперировать словами, совпадающими по длине с разрядностью АЛУ (в его текущем режиме, если их несколько, как у x86). В данном случае у нас 16-разрядная среда, поэтому лучше работать с 16-битными данными, даже если число заведомо помещается в байт. Из тех же соображений, в ЯВУ всегда есть абстракный "целый" тип, подстраиваемый компилятором под длину слова целевой среды (той, в которой будет выполняться код).

P. S.
Цитата
Хороший человек =)
Спасибо! smile.gif