На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Вычисления в ассемблере , Написать программу для вычисления след.
    Написать программу вычислений в виде asm-блока в Паскаль-программе. Необходимые типы данных для переменных y, a, b, c - получить у преподавателя. Обеспечить программный контроль на правильность полученного результата:
    y=2a+b+4c.

    Позарез нужна.Люди спасайте.
      ExpandedWrap disabled
        mov eax,a
        mov ebx,b
        mov ecx,c
        shl eax,1
        shl ecx,2
        add ebx,eax
        add ebx,ecx
        mov y,ecx


      видимо так
        Не так!!!!
        Напиши полностью...
        что-то не сходится..хм
          У тебя, наверное, Turbo Pascal, и 32-битные регистры не понимает. Замени eax,ebx,ecx на ax,bx,cx и перед каждой командой поставь db 66h;.
          Это, кстати, для типа Longint/DWord... а если надо Integer/Word, то db 66h; вообще писать не надо. А если Byte/Shortint, то вместо eax,ebx,ecx пиши al,bl,cl :)
            можно и через fpu но имхо не выгодно будет...
              Не работает ничего....
              напишите всё для асм в паскале..
              всё пробовал..ну ни как
                Цитата

                add ebx,ecx
                mov y,ecx

                Вместо mov y, ecx надо mov y, ebx. В Турбо Паскале можно (как тут уже говорили +) вместо ecx, ebx, eax поставить cx, bx, ax, а переменные описать, например, как word. У меня так работает в TP7
                  trminator,
                  ну обшибся я :) быстро писал шибко
                    Цитата Jin X @ 20.03.04, 19:19
                    У тебя, наверное, Turbo Pascal, и 32-битные регистры не понимает. Замени eax,ebx,ecx на ax,bx,cx и перед каждой командой поставь db 66h;.
                    Это, кстати, для типа Longint/DWord... а если надо Integer/Word, то db 66h; вообще писать не надо. А если Byte/Shortint, то вместо eax,ebx,ecx пиши al,bl,cl :)

                    Comments required: А чего такого волшебного делает db 66h?
                      db 66h перекрывает определение режима обработки регистровых команд. Если код скомпилирован в режиме use16 (т.е. по умолчанию используются 16-битные регистры), то команда сразу после db66h (одна) будет использовать 32-битные регистры. Например: db 66h; xor ax,ax -> xor eax,eax
                      Если код по умолчанию использует 32-битные регистры, db 66h заставит процессор обработать следующую команду как 16-битную. (Имхо этот байт не оказывает влияния на 8-битные команды.)
                      ТР6.0-ВР7.0 всегда компилят асмовый код как 16 бит, так как в них встроен базовый 8086/8087 ассемблер.
                      Но есть проблема, при пошаговой обработке команд встроенным дебуггером он воспринимает db 66h как ОТДЕЛЬНУЮ команду, и при выполнении Trace into/Step over вставит после нее int 03 (db 0CCh) в результате чего команда после db 66h будет выполнена как 16-битная, несмотря на присутствие этого байта.
                        Цитата
                        Гость Sim, 20.03.04, 23:45
                        Не так!!!!
                        Напиши полностью...
                        что-то не сходится..хм

                        ExpandedWrap disabled
                          var a, b, c, y: Longint;
                          begin
                            . . .
                            asm
                              db 66h; mov ax,a
                              db 66h; mov bx,b
                              db 66h; mov cx,c
                              db 66h; add ax,ax
                              db 66h; shl cx,2
                              db 66h; add bx,ax
                              db 66h; add bx,cx
                              db 66h; mov y,bx
                            end;
                            . . .
                          end.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0314 ]   [ 15 queries used ]   [ Generated: 16.05.24, 11:19 GMT ]