Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 04:02   #1
Бодя21
 
Регистрация: 24.12.2012
Сообщений: 7
По умолчанию Процедуры в ассме TASM

Помогите плиз с процедурами, очень срочно... Прога уже есть нужно её выполнить через процедуры...
Код:
data          SEGMENT  
 	newLen db ?                      
	bufer db 41 
	len   db   ?
         
data          ENDS
 
code          SEGMENT
              ASSUME   cs:code,ds:data
begin:
 
;ввод строки
    mov ah,10
    lea dx,bufer
    mov di,dx
    int 21h
 
;перевод строки
    mov ah,2
    mov dl,10
    int 21h
 
    inc di      ;на число введенных символов
 
    xor ax,ax   ;AH-для хранения длины последнего слова
    xor bx,bx   ;BL-для счетчика слов
    xor cx,cx   ;CL-длина строки
 
    mov cl,[di] ;число введенных символов
    mov [di],byte ptr ' ' ;перед первым символом строки, записать пробел
    add di,cx   ;DI - на последнем символе строки
    inc cl      ;с пробелом символов больше на 1
    mov [newLen],cl ;новая длина строки
 
;подсчет длины последнего слова
    call Find
    mov ah,cl   ;AH=длина последнего слова
 
;подсчет следующего слова
m1:
    mov cl,[newLen] ;
    test cl,cl  ;если символов в строке 0, вывод
    jz okString
 
    call Find
    cmp ah,cl   ;сравнить самое длинное
    jge m1      ;если дольше,
    inc bl      ;увеличить счетчик слов
    jmp short m1    ;на следующее слово
 
okString:
;вывод на экран
    xor ax,ax
    mov al,bl
 
    mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
    xor     dx,dx
    div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
    push    dx
    inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
    test    ax, ax
    jnz     oi2
; Теперь приступим к выводу.
    mov     ah, 02h
oi3:
    pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
    add     dl, '0'
    int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
    loop    oi3
 
    xor ax,ax   ;ждать нажатия клавиши
    int 16h

Find    proc    near
    std     ;сканировать с уменьшением адреса
    mov dx,di   ;для вычисления длины слова DX-конкц слова
    mov al,' '
    repne scasb ;искать пробел
 
    mov cx,dx   ;DX-конец слова
    sub cx,di   ;DI-начало слова. DX-DI=CX=длина слова
    sub [newLen],cl ;новая длина строки		
    ret
Find    endp
code          ENDS
              end      begin

Последний раз редактировалось Бодя21; 24.12.2012 в 04:04. Причина: синтаксис
Бодя21 вне форума Ответить с цитированием
Старый 24.12.2012, 04:05   #2
Бодя21
 
Регистрация: 24.12.2012
Сообщений: 7
По умолчанию

Помогите плиз, буду очень благодарен...
Зарание всем спасибо...
Бодя21 вне форума Ответить с цитированием
Старый 24.12.2012, 08:45   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Абсолютно непонятно, каких процедур Вам не хватает.

Ну и, если что
Цитата:
Код:
;подсчет длины последнего слова
    call Find
    mov ah,cl   ;AH=длина последнего слова
 
;подсчет следующего слова
m1:
    mov cl,[newLen] ;
    test cl,cl  ;если символов в строке 0, вывод
    jz okString 
    call Find
    cmp ah,cl   ;сравнить самое длинное

.....

Find    proc    near
    std     ;сканировать с уменьшением адреса
    mov dx,di   ;для вычисления длины слова DX-конкц слова
    mov al,' '
    repne scasb ;искать пробел
 
    mov cx,dx   ;DX-конец слова
    sub cx,di   ;DI-начало слова. DX-DI=CX=длина слова
    sub [newLen],cl ;новая длина строки		
    ret
Find    endp
то, что я выделил (Find) - это уже процедура...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение имени процедуры из нутри самой процедуры RISagitov Microsoft Office Excel 8 28.09.2012 17:15
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
Использование имени процедуры в качестве параметра другой процедуры Alexey355 Помощь студентам 1 23.04.2011 13:59
закончить выполнение процедуры из тела другой процедуры Alaysor Общие вопросы Delphi 14 23.01.2011 05:26
Управляющие структуры, процедуры Function и процедуры Sub Natalo4ka Помощь студентам 0 17.05.2010 22:00