Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 14:06   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Ненужный пробел в начале буфера.

Приветствую!

Описание задачи: вывести вещественное число в файл.

Описание проблемы: в начале строки файла оказывается пробел.

После вызова функции FpuFLtoA в буфере buf оказывается на нулевой позиции символ пробела. Прошу помощи!

Код:
.386
.model flat, stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\fpu.inc

includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\fpu.lib

BSIZE       equ   100

.data?
buf         db    BSIZE dup(?)
fHandle     dd    ?
cWritten    dd    ?

.data
fname       db    "output.txt", 0
val         dt    3.14
crlf        db    0dh, 0ah

.code
start:
    invoke CreateFile, addr fname, GENERIC_WRITE, 0, NULL,\
                       CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0
    mov fHandle, eax

    finit
    invoke FpuFLtoA, addr val, 10, addr buf, SRC1_REAL or SRC2_DIMM

    invoke lstrlen, addr buf
    invoke WriteFile, fHandle, addr buf, eax,\
                      addr cWritten, NULL
    invoke WriteFile, fHandle, addr crlf, 2,\
                      addr cWritten, NULL

    invoke CloseHandle, fHandle
    invoke ExitProcess, 0
end start
8Observer8 вне форума Ответить с цитированием
Старый 14.06.2012, 14:48   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

8Observer8, передвинуть указатель на буфер на один байт вперёд не годится?
Код:
    invoke lstrlen, addr buf+1
    invoke WriteFile, fHandle, addr buf+1, eax,\
                      addr cWritten, NULL
vadimych вне форума Ответить с цитированием
Старый 14.06.2012, 15:04   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Да, годится! Спасибо!

Почему же FpuFLtoA такое вытворяет?
8Observer8 вне форума Ответить с цитированием
Старый 14.06.2012, 15:26   #4
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Почему же FpuFLtoA такое вытворяет?
Вероятно, это оставлено место для плюса или минуса, при вызове функции с другими параметрами.
vadimych вне форума Ответить с цитированием
Старый 14.06.2012, 15:28   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

А-а-а, понятно. Похоже так. Спасибо!
8Observer8 вне форума Ответить с цитированием
Старый 14.06.2012, 15:29   #6
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Не за что.
vadimych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать ненужный символ в конце значения ячейки? 27obesthand Microsoft Office Excel 3 18.10.2011 11:44
Пробелы в начале строки nats C# (си шарп) 0 26.07.2011 16:10
Спрятать ненужный код [ c# ] Lemo Помощь студентам 0 06.02.2011 13:43
Как заменить обычний пробел на неразрывный пробел Jaroslav Microsoft Office Excel 2 05.05.2010 11:57
Пауза в начале выполнения программы Quasar Общие вопросы Delphi 2 21.04.2010 08:13