Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с компоновкой

279
02 декабря 2007 года
bave
456 / / 07.03.2004
Давненько ничего не приходилось на tasm'е писать, теперь можно сказать вспоминаю всё заново, вплоть до деректив сегментации :)
С написанием самой программы пролемы не возникло - компилируется в объектник без ошибок. А вот с компоновкой проблема - после компоновки создаётся пустой .exe файл - т.е. размер 0 байт - и никак
не могу врубиться в чём причина.... всё время получаю ошибку:
Fatal: General error in module mpulse.asm
Линковшику вообще не пофиг чё там в .asm файле? - ему же из объектного загрузочный модуль надо создать...
(вроде всё как всегда за исключением того, что раньше использовал tasm4.0, а сейчас использую пакет tasm5plus)

компилирую так:
 
Код:
.\TASM5Pluse\BIN\tasm32.exe mpulse.asm ,,, /l /zi >out1.txt

компоновать пытаюсь так:
 
Код:
.\TASM5Plus\BIN\tlink32.exe mpulse.obj  /v >out.txt


Сам исходник вот:
Код:
.586
stk segment stack
    db 100h dup (0)
stk ends

common_data segment para common "data"
    hfile  dw 0         ; дескриптор файла
    fname  db 'rezult.dat',0
    pname  dd fname
    lcnt   dd 0         ; младшая часть счётчика
    hcnt   dd 0                     ; старшая часть счётчика
    mpulse dd 12288 dup (0)
common_data ends

code segment
    assume cs: code, ds: common_data
start proc
    mov edi,0       ; индекс текущего измерения

; проверка доступности TSC
   
    mov eax,1
    cpuid
    test edx,8h
    jz   @@notsc
   
    mov ecx,6144        ; число измерений
@@main_cycl:            ; основной цикл
    push ecx
   
    rdtsc           ; считывание начального занчения счётчика
                ; тактов
    push eax        ; младшая часть счётчика
    push edx            ; старшая
    cli         ; отключить прерывания
@@measuring:   
    mov  dx,378h           
    in   ax,dx
    cmp  ax,0
    jne  @@measuring
    sti             ; разрешить прерывания
   
    rdtsc           ; считывание прошедшего времени
   
    ; сохранить значение счётчика
    mov ebx, offset lcnt
    mov [ebx], eax
    mov ebx, offset hcnt
    mov [ebx], edx
   
    ; проверка переполнения младшей части TSC
    pop ebx         ; edx (до измерения) -> ebx
    cmp edx,ebx
    jne @@replet        ; если было переаолнение

    jmp @@noreplet
@@replet:
    pop ebx         ; eax (до измерения) -> ebx 
    mov edx,0ffffffffh
    sub edx,ebx
    add edx,eax     ; прошедшее число тактов за время измерения ebx
    xchg edx,ebx

    jmp @@save_mpulse
@@noreplet:
    pop ebx
    sub eax,ebx
    xchg ebx,eax        ; число тактов за время измерения в ebx

@@save_mpulse:
   
    ; Запись результата в память:

    mov edx, offset mpulse
    mov [edx+edi],ebx
   
    ; Цикл измерения 0:
    cli
@@measuring_zero:  
    mov  dx,378h           
    in   ax,dx
    cmp  ax,0
    je  @@measuring_zero
    sti

    rdtsc           ; считывание тактов после измерения 0
   
    mov ebx,offset hcnt
    cmp [ebx],edx
    jne @@replet_zero

    jmp @@noreplet_zero

@@replet_zero:
    mov ebx,offset lcnt
    mov edx,0ffffffffh
    sub edx,[ebx]
    add edx,eax
    xchg ebx,edx

    jmp @@save_mpulse_zero
@@noreplet_zero:
    mov ebx,offset lcnt
    sub eax,[ebx]
    xchg eax,ebx

@@save_mpulse_zero:
    mov edx,offset mpulse
    mov [edx+edi+4],ebx

    add edi,4
    pop ecx
    dec ecx
    jnz @@main_cycl

    ; Запись измерений в файл:
    ; ...

    mov al,02h      ; разрешить чтение/запись
    lds dx,pname
    mov ah,3dh
    int 21h
    jc  @@file_not_open

    mov bx, ax      ; получить дескриптор файла
    mov cx, 49152
    xor edx,edx
    mov edx, offset mpulse
    mov ah, 40h
    int 21h
   
    mov ah,3eh      ; (Примечение: дескриптор уже записан в bx)
    int 21h
@@exit:
    jmp @@endprog
@@file_not_open:
    ; сообщить о невозможности открытия файла для записи результата

    jmp @@endprog  
@@notsc:
    ; выдать информацию об ошибке не доступности TSC
@@endprog:
    ; выдать информацию о завершении работы       
start endp
code ends
end start

--------------------------------------------
Что мне кажется, что проблема на поверхности, но не вижу где...
может кто подскажет.
1.6K
03 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Если вызвать TASM без параметров, он напишет, что сначала указываются настройки, а потом имена файлов. А TLINK'у параметры вообще по другому указываются. Внимательнее надо быть ;-)
RDTSC надо заменить её машкодом 0fh,31h - Она появилась у пней, когда TASM уже перестали поддерживать.
ЗЫ используй TASM и TLINK.
279
04 декабря 2007 года
bave
456 / / 07.03.2004
Написание ключей сначала не помогло.
И что странно. Я просто убрал ключь - /v (включения отладочной информации) и так сразу всё отлично откомпоновалось - ошибок компановки не стало...
---------------------
Без отладочной информации проблема, тогда возникает с отладкой...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог