Вход | Регистрация

Информационные технологии ::

Метки:

Помомгите пожалуйста написать прогу на АССЕМБЛЕРЕ

Я
   m_arhangel
 
19.05.04 - 00:38
Помомгите пожалуйста написать прогу на АССЕМБЛЕРЕ, которая удаляет все пробелы в начале и в конце строки. Очень надо. Сесия через неделю....
 
 
   romix
 
1 - 19.05.04 - 11:15
Код не отлажен (у меня здесь нет асма) - если будут баги напиши.  


.model tiny
.data

str: db  '   Это п...ая строка с пробелами в начале и в конце   ', 0

.code


start:
     CLD              ;будем двигаться в прямом направлении
     MOV   AL, 0      ;будем сравнивать с 0
     LEA   DI, str    ;засылаем в DI стартовый адрес строки
     MOV   CX, -1     ;сравнивать будем максимум 65535 байтов (-1 = 65535)
     REPNE SCASB      ;понеслась...
;теперь DI показывает на заверш. 0
up1:
     DEC DI; уменьшаем указатель на конец нашей строки (теперь он
;показывает не на 0, а на предыдущий символ)
     mov al, byte ptr [di]; берем символ по адресу DI
     cmp al, 32; сравниваем с пробелом
     jle up1  ; если меньше или равно пробелу делаем переход на метку up1


     ; приехали - теперь DI показывает на последний непробельный символ
     inc di ; идем на один символ вперед
     mov al, 0
     mov byte ptr[di], al ; пишем туда завершающий строку 0

     ;теперь найдем начало строки
     LEA   DI, str    ;засылаем в DI стартовый адрес строки
     dec DI; идем на один символ назад
up2:  inc DI ; идем на один символ вперед
     mov al, byte ptr [di]; берем символ по адресу di и кладем его в al
     cmp al, 32 ; сравниваем al с числом 32 (код пробела)
     jle up2; ; переход на метку up2, если al <= 32
     
;; теперь di указывает на начало очищенной строки

;; ну и надо ее как-то вывести на экран (или все видно в отладчике)

end start
   romix
 
2 - 19.05.04 - 11:19
И еще в конце надо поставить команду ret - иначе прога глюкнет при завершении.
   romix
 
3 - 19.05.04 - 11:26
И еще: возможны траблы с русскими буквами (т.к. их коды приходятся на отрицательные числа). Кстати, в языке С может быть такая же кора.

Чтобы с русскими буквами все было ОК, надо сравнение со знаком (jle) заменить на сравнение без знака (jbe кажется)...
   m_arhangel
 
6 - 20.05.04 - 00:09
(5) Какая разница компелировать в TASM или в TP7 с помощью втроеного ассемблера???
У меня ещё вопрос: а как результат вывести (вернее какое прерывание для этого лучше использовать)?
   Волшебник
 
7 - 20.05.04 - 00:14
(6) 21h
   Asmody
 
8 - 20.05.04 - 00:24
господи, сейчас какой год на дворе? TASM, TP7... для меня это все осталось где-то в 94-95м... и какое отношение оно все имеет к 1С?
   Demiurg
 
9 - 20.05.04 - 00:32
Видимо, 1С:Предприятие 9.0 - теперь вы можете вставлять свой код на ассемблере :)))))

Все новое - хорошо забытое старое, хе-хе.....
   romix
 
13 - 20.05.04 - 14:12
(5) Все в порядке - турбо-паскаль (начиная с версии 6.0) поддерживает ассемблерные вставки, и в нем просто удобнее изучать асм. С Дельфи то же самое.
Ввод-вывод можно делать при помощи Readln/Writeln.

(6) Результат в Паскале можно выводить так: делаешь
mov Perem, ax;
где Perem - переменная Паскаля.
И дальше просто выводишь ее как обычно.
Хотя в Паскале свой формат строк - посмотри образец как выводить строки у других студентов (там какая то сишная функция, я не помню как она будет в TP).


Список тем форума
Рекламное место пустует   Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует