Консультация № 95225
15.07.2007, 21:36
0.00 руб.
0 2 2
Доброе время суток, уважамые эксперты. Помогите разобраться. Ниже приведена программа которую я пытаюсь скомпилировать но у меня возникает ошибка. Собираю компилятором tasm5plus. Компилятор версии 5.0.Запускаю его так
tasm32 1.asm. Создаётся объектный файл. Парсер пишет Error messages :none, warning messages: none, Passes: 1
Не знаю что такое пассес. Потом запускаю линкер так tlink32 1.obj
Он выдаёт ошибку Fatal: 16 bit segments not supported in module 1.asm. Помогите разобраться в чём ошибка. У меня в дистрибутиве
tasm только tasm32 а tasm16 нету. Может из-за этого ошибка.

Приложение:
;---------Prg_7_1.asm---------------;Программа ,имитирующая звук сирены.;Изменение высоты звука от 450 Гц до 2100 Гц.;Используется макрос delay (задержка).;При необходимости;можно поменять значение задержки (по умолчанию - для процессора Pentium).;------------------------------------masmmodel smallstack 100hdelay macro timelocal ext,iter;макрос задержки, его текст ограничивается директивами macro и endm.;На входе - значение задержки (в мкс) push cx mov cx,timeext: push cx mov cx,5000iter: loop iter pop cx loop ext pop cxendm.data ;сегмент данныхtonelow dw 2651 ;нижняя граница звучания = 450 Гцcnt db 0 ;счётчик для выхода из программыtemp dw ? ;верхняя граница звучания.code ;сегмент кодаmain: ;точка входа в программу mov ax,@data ;связываем регистр ds с сегментом mov ds,ax ;данных через регистр ax xor ax,ax ;очищаем axgo:;заносим слово состояния 10110110b(0В6h) в командный регистр (порт 43h) mov al,0B6h out 43h,al in al,61h ;получим значение порта 61h в al or al,3 ;инициализируем динамик и подаем ток в порт 61h out 61h,al mov cx,2083 ;количество шагов ступенчатого изменения тонаmusicup:;в ax значение нижней границы частоты mov ax,tonelow out 42h,al ;в порт 42h младшее слово ax :al xchg al,ah ;обмен между al и ah out 42h,al ;в порт 42h старшее слово ax:ah add tonelow,1 ;повышаем тон delay 1 ;задержка на 1 мкс mov dx,tonelow ;в dx текущее значение высоты mov temp,dx ;temp - верхнее значение высоты loop musicup ;повторить цикл повышения mov cx,2083 ; восстановить счетчик циклаmusicdown: mov ax,temp ;в ax верхнее значение высоты out 42h,al ;в порт 42h младшее слово ax :al mov al,ah ;обмен между al и ah out 42h,al;в порт 42h старшее слово ax :ah sub temp,1 ;понижаем высоту delay 1 ;задержка на 1 мкс loop musicdown ;повторить цикл пониженияnosound: in al,61h ;получим значение порта 61h в AL and al,0FCh ;выключить динамик out 61h,al ;в порт 61h mov dx,2651 ;для последующих циклов mov tonelow,dx inc cnt ;увеличиваем счётчик проходов, то есть ;количество звучаний сирены cmp cnt,5 ;5 раз ? jne go ;если нет, идти на метку go exit: mov ax,4c00h ;стандартный выход int 21hend main ;конец программы

Обсуждение

давно
Старший Модератор
31795
6196
16.07.2007, 10:23
общий
это ответ
Здравствуйте, Александр Михайлович!
Скачайте <a href=http://toest.narod.ru/more.html>tasm 4.1(16-bit)</a>
Passes: 1- Это количество проходов компилятора (сколько раз нужно компилятору проийти по исходной программе для генерации объектного кода, можно изменять ключом /m< число>, по умолчанию 1).
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
19.07.2007, 23:35
общий
это ответ
Здравствуйте, Александр Михайлович!

Ваша программа написана для трансляции с помощью <b>MASM 6.1</b>, где она нормально компилируется, поскольку является 16bit-приложением.
Форма ответа