Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер
Регистрация

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


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

Здравствуйте форомчане помогите плиз...
Как соеденить асм и паскаль, к примеру процедуру написаную на паскале но выполняющуюся в асме?? помогите написать плиз!! Очень срочно надо...

Вот код асма.
Код:
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; 21.03.2013 в 21:36. Причина: Форматирование
Бодя21 вне форума Ответить с цитированием
Старый 27.03.2013, 18:53   #2
Бодя21
 
Регистрация: 24.12.2012
Сообщений: 7
По умолчанию

Помогите плиз, очень нужно. Буду очень благодарен...
Бодя21 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль и Ассемблер Галька Помощь студентам 0 30.03.2012 07:22
Ассемблер и Паскаль(((( Галька Помощь студентам 1 29.03.2012 10:39
Ассемблер и паскаль фантомаз Assembler - Ассемблер 16 03.06.2010 14:32
Паскаль = Ассемблер. yurassik Assembler - Ассемблер 6 23.04.2010 13:50
Ассемблер и Паскаль maziLa Assembler - Ассемблер 3 05.12.2009 18:50