Помощь - Поиск - Пользователи - Календарь
Полная версия: Контрольные задачки
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
corazon
Помогите пожалуйста решить задачки, они вроде простые, но у меня явно проблемы с их решением...

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

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

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

вот они. Эх.. их еще и макроопределениями надо сделать
я прицепила то что пыталась делать по первой (странно .asm у меня грузиться не захотел, пришлось .txt).
xds
Решения задач:
corazon
Спасибо, огромное!!!!!!!!!! smile.gif
Только вот...что за com файл?? мы как то без него делаем...
xds
*.com - это исполняемый модуль MS-DOS с моделью памяти "tiny" - почти то же самое, что и *.exe (запускается так же).
corazon
Ага, тока думаю препод меня не поймет, так как мы делаем тока экзешники, я попробую переделать, думаю получится....
а можно еще эти две решить?
1.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A2. Необходимо заменить все рядом стоящие символы ‘a’ и ‘b’ на символы ‘**’. После замены вывести полученную строку на экран.
2.Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется параметром компиляции A5. Необходимо определить, начиная с какой позиции, находится первый встречавшийся символ ‘a’ и вывести на экран введённую строку и найденный номер позиции.
xds
Вот первые три решения в модели памяти "small" (уже MZ EXE): Нажмите для просмотра прикрепленного файла.

Цитата
а можно еще эти две решить
Можно: Нажмите для просмотра прикрепленного файла.

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


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

к 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
Цитата
к 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.