Классификация и структура микропроцессоров
Воспользоваться одной из директив Ассемблера: .8087, .287
Download 0.56 Mb. Pdf ko'rish
|
L21
- Bu sahifa navigatsiya:
- Сделать инициализацию сопроцессора с помощью команды FINIT При компиляции использовать ДОПОЛНИТЕЛЬНЫЙ ключ /г или /е
Воспользоваться одной из директив Ассемблера: .8087, .287
(.286р), .387(.386 .487 (.486р). Необходимо иметь в виду, что не все команды сопроцессора, к сожалению, совместимы сверху вниз. Кроме того, директива использования процессора .х86р предполагает компиляцию и работу программы в 32-разрядном режиме. Поэтому результаты расчета, выполненные с использованием команд младших моделей сопроцессора, могут отличаться от результатов, полученных на старших моделях. Сделать инициализацию сопроцессора с помощью команды FINIT При компиляции использовать ДОПОЛНИТЕЛЬНЫЙ ключ /г или /е (Emulated or Real floating- point instructions). Таким образом, теперь вызов компилятора Ассемблера для стыковки с C++ может иметь следующий вид: tasm.exe Name.asm /I /r /ml Арифметические команды ; Вычислить действительные корни квадратного уравнени¤: ; a*x*x + b*x + c = 0 .387 .model large,C .data EXTRN C a:Dword,b:Dword,c:Dword,x1:dword,x2:dword,d:dword EXTRN C ac:Dword,bb:Dword .code public quadr four dd 4. two dd 2. quadr proc C far finit ;иниц. 8087 ;-------ST(0)-------!------ST(1)------! fild b ;b !? fmul st(0),st(0) ;b*b !? FST bb ;копиpование веpшины стека ==> bb fild a ;a !b*b fmul four ;4*a !b*b fimul c ;4*a*c !b*b FST ac ;копиpование веpшины стека ==> ac fsubP st(1),st(0) ;d=b*b-4*a*c !? fst d ;копиpование веpшины стека ==> d fsqrt ;sqrt(d) !? fld st(0) ;sqrt(d) !sqrt(d) fchs ;-sqrt(d) !sqrt(d) fiadd b ;b-sqrt(d) !sqrt(d) fchs ;-b+sqrt(d) !sqrt(d) fxch st(1) ;sqrt(d) !-b+sqrt(d) fiadd b ;b+sqrt(d) !-b+sqrt(d) fchs ;-b-sqrt(d) !-b+sqrt(d) fidiv a ;-b-sqrt(d)/a !-b+sqrt(d) fdiv two ;-b-sqrt(d)/a/2 !-b+sqrt(d) fstp x2 ;-b+sqrt(d) !? fidiv a ;-b+sqrt(d)/a !-b+sqrt(d) fdiv two ;-b+sqrt(d)/a/2 !? fstp x1 ;? !? ret quadr endp end Распределение программы в памяти • Рассмотрим распределение памяти на примере простейшей программы. • ;Данные программы • DATA SEGMENT • MSG DB ‘Текст$’ • DATA ENDS • STK SEGMENT STACK • DB 256 dup(?) • STK ENDS • ;Код программы • CODE SEGMENT • ASSUME CS:CODE,DS:DATA,SS:STK • START: • MOV AX,DATA • MOV DS,AX • MOV AH,09H ;Вывод сообщения • MOV DX,OFFSET MSG • INT 21H • MOV AH,4CH ;Завершение работы • INT 21H • CODE ENDS • END START В этой программе явно описаны три сегмента – кода с именем CODE, данных с именем DATA и стека с именем STK. Директива ASSUME связывает имена этих сегментов, которые в общем случае могут быть произвольными, с сегментными регистрами CS , DS и SS соответственно. Распределение памяти при загрузке программы на исполнение показано на рисунке Спасибо за внимание! Download 0.56 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling