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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 23:16   #1
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию Ошибка ReadConsole

Код:
.386

.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

.data
string db "Hello, World!", 0
buffer db ?

.code
start:
	invoke GetStdHandle, STD_INPUT_HANDLE
	invoke ReadConsole, eax, addr buffer, 1, NULL, NULL

	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke WriteConsole, eax, addr string, 13, NULL, NULL

	invoke ExitProcess, NULL
end start
Вылетает с ошибкой при вводе символа, что я делаю не так?
ordoss вне форума Ответить с цитированием
Старый 13.12.2010, 23:41   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

почему 4 параметр null
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 13.12.2010, 23:46   #3
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

MSDN: This parameter requires Unicode. For ANSI mode, the pInputControl parameter must be NULL.
ordoss вне форума Ответить с цитированием
Старый 14.12.2010, 02:01   #4
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

Ошибку нашел, но появилась новая. Вобщем, мне надо с клавиатуры ввести число и вывести текст со смещением, равным этому числу
Код:
.386

.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib

COORD struct
	x dw ?
	y dw ?
COORD ends

.data
string db "Hello, World!", 0
buffer db ?
num dd ?
CursorXY COORD <>

.code
start:
	invoke GetStdHandle, STD_INPUT_HANDLE
	invoke ReadConsole, eax, addr buffer, 1, addr num, NULL

	mov CursorXY.x, buffer
	mov CursorXY.y, 0
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke SetConsoleCursorPosition, eax, dword ptr CursorXY
	invoke WriteConsole, eax, addr string, 13, NULL, NULL

	invoke Sleep, INFINITE
	invoke ExitProcess, NULL
end start
ordoss вне форума Ответить с цитированием
Старый 14.12.2010, 03:20   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ReadConsole читает число как текст, а не как word(который в структуре COORD), потому нужно переводить в число.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.12.2010, 13:57   #6
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

эх, ASM изучаю только второй день(
не знаю как перевести символ в число
ordoss вне форума Ответить с цитированием
Старый 14.12.2010, 15:12   #7
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

немного разобрался:
Код:
.386

.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\msvcrt.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib

COORD struct
	x dw ?
	y dw ?
COORD ends

.data
hello db "Hello, World!", 0
char db ?
temp dd ?
number dw ?
CursorXY COORD <>

.code
start:
	invoke GetStdHandle, STD_INPUT_HANDLE
	invoke ReadConsole, eax, addr char, 1, addr temp, NULL

	invoke crt_atoi, addr char
	mov number, ax 
	mov CursorXY.x, number
	mov CursorXY.y, 1
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke SetConsoleCursorPosition, eax, dword ptr CursorXY
	invoke WriteConsole, eax, addr hello, 13, NULL, NULL

	invoke Sleep, INFINITE
	invoke ExitProcess, NULL
end start
вылазит ошибка в 32 строке: А2070 invalid instruction operands
ordoss вне форума Ответить с цитированием
Старый 14.12.2010, 16:36   #8
ordoss
Пользователь
 
Регистрация: 03.01.2010
Сообщений: 41
По умолчанию

Все, готово))
Код:
.386

.model flat, stdcall
option casemap: none

include \masm32\include\windows.inc
include \masm32\include\msvcrt.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\kernel32.lib

COORD struct
	x dw ?
	y dw ?
COORD ends

.data
hello db "Hello, World!", 0
char db 3 dup (?)
temp dd ?
CursorXY COORD <>

.code
start:
	invoke 	GetStdHandle, STD_INPUT_HANDLE
	invoke 	ReadConsole, eax, addr char, 1, addr temp, NULL

	invoke 	crt_atoi, addr char
	mov   CursorXY.x, ax
	mov 	CursorXY.y, 1
	invoke 	GetStdHandle, STD_OUTPUT_HANDLE
	mov 	temp, eax
	invoke 	SetConsoleCursorPosition, temp, dword ptr CursorXY
	invoke 	WriteConsole, temp, addr hello, 13, NULL, NULL

	invoke 	Sleep, INFINITE
	invoke 	ExitProcess, NULL
end start

Последний раз редактировалось ordoss; 14.12.2010 в 16:44.
ordoss вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Не могу разобраться с функцией ReadConsole Иллидан Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.10.2010 17:34
ReadConsole & CreateFile int 20h Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 20.09.2010 10:45
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
C++: проблема с чтением строки ф-ей ReadConsole() Retiz Помощь студентам 2 18.09.2008 21:32