Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В асме 1-ый раз , что не так с выводом, Не могу вывести строку ! 
V
    Опции темы
DigitSphinx
Дата 5.6.2007, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Пробовал несколько способов , например этот 
Код

.386
.model flat, stdcall
option casemap : none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
wsprintfA PROTO C :DWORD,:VARARG
wsprintf equ <wsprintfA>
.data
Buff db 10 dup(0)
String db "EAX = %u",0
.code
START:  
mov eax, 10
invoke wsprintf,addr Buff,addr String,eax
invoke ExitProcess,0
end START

Компилятор masm32
Ollydbg выдает это
Код

MOV EAX,0A
PUSH EAX                                 ; /<%u> => A (10.)
PUSH sam.0040300A                        ; |Format = "EAX = %u"
PUSH sam.00403000                        ; |s = sam.00403000
CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
ADD ESP,0C
PUSH 0                                   ; /ExitCode = 0
CALL <JMP.&kernel32.ExitProcess>         ; \ExitProcess
INT3



Это сообщение отредактировал(а) DigitSphinx - 5.6.2007, 02:22


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
dumb
Дата 5.6.2007, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



так ты только в буфер поместил строку. ее ж нужно вывести еще...
Код

Title db "title",0
...
invoke wsprintf,addr Buff,addr String,eax
invoke MessageBox, 0, addr Buf, addr Title, MB_OK
invoke ExitProcess,0
...


eax в параметрах invoke надо аккуратно ставить, так как он(eax) в некоторых случаях неявно используется самим invoke'ом.

Это сообщение отредактировал(а) dumb - 5.6.2007, 02:37
PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Да сорри что то сглупил !, я перепутал с printf(…);
Я хочу вывести на консоль во !
Пример из книги (Александра крупника) 

Код

.386
.model flat, stdcall
option casemap : none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\kernel32.lib
.data
msg db "Hello World", 13, 10
h dd ?
cWritten dd ?
.code
START:  
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov h, eax
invoke WriteConsoleA, h, addr msg, 
        sizeof msg, addr cWritten, NULL
invoke ExitProcess,0
end START

При дебаге в Ollydbg после WriteConsoleA Ошибка такая ERROR_INVALID_HANDLE (00000006)
P.S. в предыдущем примере: в заголовке MessageBox’а было “TitleEAX = %u” этого я тоже не понял !


Это сообщение отредактировал(а) DigitSphinx - 5.6.2007, 03:53


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
DigitSphinx
Дата 5.6.2007, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Опять сорри , линковал с параметром /SUBSYSTEM:WINDOWS
dumb, Спасибо большое.
Тема закрыта.




--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
DigitSphinx
Дата 5.6.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Вот еще вопрос
Есть такой пример из (Emu8086v.257)
Код

; Hello World
; Standard header:
    #make_COM#
        ORG  100H  
; Jump to start:
    JMP START
; Data:
msg DB 'Hello, World!', 13, 10
    DB 'My First Message without WINDOWS.', 13, 10
    DB 'Thank you!', '$'
; Load address of msg to DX register:
START:  LEA DX, msg
; Print using DOS interrupt:
        MOV AH, 9
        INT 21h
; Exit to operating system:
        MOV AH, 4Ch
        INT 21h

Я пытаюсь откомпилировать в *.com на masm32 так:
Код

\masm32\bin\ml /c console.asm
\masm32\bin\Link console.obj,,NUL,,,
exe2bin console.exe console.com

Параметры отсюда
masm32 очень сердито ругается 
Код

Assembling: console.asm
console.asm(4) : error A2044: invalid character in file
console.asm(5) : error A2034: must be in segment block
console.asm(8) : error A2034: must be in segment block
console.asm(11) : error A2034: must be in segment block
console.asm(12) : error A2034: must be in segment block
console.asm(13) : error A2034: must be in segment block
console.asm(17) : error A2034: must be in segment block
console.asm(20) : error A2034: must be in segment block
console.asm(21) : error A2034: must be in segment block
console.asm(24) : error A2034: must be in segment block
console.asm(25) : error A2034: must be in segment block
console.asm(25) : error A2088: END directive required at end of file

D:\masm32\MyWorks\dos>\masm32\bin\Link console.obj,,NUL,,,
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : fatal error LNK1181: cannot open input file "console.obj,,NUL,,,"

Что не так



Это сообщение отредактировал(а) DigitSphinx - 5.6.2007, 13:17


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
klyxa
Дата 5.6.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



в фасм
Код

org 100h

mov ah,09h
mov dx, sometext
int 21h

mov ah,10h
int 16h

sometext db "privet kamrad",24h


В масм хз=)

Это сообщение отредактировал(а) klyxa - 5.6.2007, 15:29
PM MAIL   Вверх
dumb
Дата 5.6.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Цитата(DigitSphinx @  5.6.2007,  03:49 Найти цитируемый пост)
в предыдущем примере: в заголовке MessageBox’а было “TitleEAX = %u” этого я тоже не понял !

Код

Title db "Title" ; <-- ты тут 0 не поставил
String db "EAX = %u",0


Цитата(DigitSphinx @  5.6.2007,  13:14 Найти цитируемый пост)
Что не так

Цитата(DigitSphinx @  5.6.2007,  13:14 Найти цитируемый пост)
masm32 очень сердито ругается

для начала, это код для 16-битного режима(DOS), а ты его masm32 пытаешься компилить. откомпилить то он сможет, а вот собрать(link) - нет.

что касается исходника, то он должен выглядеть, например(есть разные варианты синтаксиса) так:
Код

    .model tiny
    .386
    .code

    ORG  100H  
; Jump to start:
start:
    JMP begin
; Data:
msg DB 'Hello, World!', 13, 10
    DB 'My First Message without WINDOWS.', 13, 10
    DB 'Thank you!', '$'
; Load address of msg to DX register:
begin:  LEA DX, msg
; Print using DOS interrupt:
        MOV AH, 9
        INT 21h
; Exit to operating system:
        MOV AH, 4Ch
        INT 21h

end start


Это сообщение отредактировал(а) dumb - 5.6.2007, 15:31
PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Линковщик я скачал спец. для 16-х приложений и все работает !
dumb, Спасибо огромное !



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
klyxa
Дата 5.6.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



DigitSphinx, дай плиз ссылку на линковщик
PM MAIL   Вверх
DigitSphinx
Дата 5.6.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3





--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.