Сейчас мы рассмотрим вопрос о написании программ
II
Сейчас мы рассмотрим вопрос о написании программ, которые одинаково транслировались бы и в MASM, и в TASM. Для этого прекрасно подходит условное ассемблирование. Удобнее всего использовать IFDEF и возможности трансляторов задавать символьную константу, все равно - TASM или MASM. И в ML, и в TASM32 определен ключ /D, позволяющий задавать такую константу.
На Рисунок 2.6.1 представлена программа, транслируемая и в MASM, и TASM. Программа весьма проста, но рассмотрения ее вполне достаточно для создания более сложных подобных совместимых программ.
.386P ; плоская модель .MODEL FLAT, STDCALL ; проверить, определена символьная константа MASM или нет IFDEF MASM ; работаем в MASM EXTERN ExitProcess@4:NEAR EXTERN MessageBoxA@16:NEAR includelib с:\masm32\lib\kernel32.lib includelib c:\masm32\lib\user32.lib ELSE ; работаем в TASM EXTERN ExitProcess:NEAR EXTERN MessageBoxA:NEAR includelib c:\tasm32\lib\import32.lib ExitProcess@4 = ExitProcess MessageBoxA@16 = MessageBoxA ENDIF ;-----------------------------------------------------------
;сегмент данных _DATA SEGMENT DWORD PUBLIC USE32 'DATA' MSG DB "Простая программа",0 TIT DB "Заголовок",0 _DATA ENDS
;сегмент кода _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: PUSH 0 PUSH OFFSET TIT PUSH OFFSET MSG PUSH 0 ; дескриптор экрана CALL MessageBoxA@16 ;----------------------------------- PUSH 0 CALL ExitProcess@4 _TEXT ENDS END START