Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.35.178] |
|
Сообщ.
#1
,
|
|
|
Написать программу вычислений в виде asm-блока в Паскаль-программе. Необходимые типы данных для переменных y, a, b, c - получить у преподавателя. Обеспечить программный контроль на правильность полученного результата:
y=2a+b+4c. Позарез нужна.Люди спасайте. |
Сообщ.
#2
,
|
|
|
mov eax,a mov ebx,b mov ecx,c shl eax,1 shl ecx,2 add ebx,eax add ebx,ecx mov y,ecx видимо так |
Сообщ.
#3
,
|
|
|
Не так!!!!
Напиши полностью... что-то не сходится..хм |
Сообщ.
#4
,
|
|
|
У тебя, наверное, 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 |
Сообщ.
#5
,
|
|
|
можно и через fpu но имхо не выгодно будет...
|
Сообщ.
#6
,
|
|
|
Не работает ничего....
напишите всё для асм в паскале.. всё пробовал..ну ни как |
Сообщ.
#7
,
|
|
|
Цитата add ebx,ecx mov y,ecx Вместо mov y, ecx надо mov y, ebx. В Турбо Паскале можно (как тут уже говорили +) вместо ecx, ebx, eax поставить cx, bx, ax, а переменные описать, например, как word. У меня так работает в TP7 |
Сообщ.
#8
,
|
|
|
trminator,
ну обшибся я быстро писал шибко |
Сообщ.
#9
,
|
|
|
Цитата 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? |
Сообщ.
#10
,
|
|
|
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-битная, несмотря на присутствие этого байта. |
Сообщ.
#11
,
|
|
|
Цитата Гость Sim, 20.03.04, 23:45 Не так!!!! Напиши полностью... что-то не сходится..хм 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. |