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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2007, 16:55   #1
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
Вопрос консоль на ASM под Win

что надо сделать: ввести десятичное число с клавиатуры, вывести его в 2, 10, 16 представлении, определить байт с наибольшим ASCII-кодом

как я понимаю, можно просто создать консоль и там действовать.
вопрос заключается собственно в этом:
1) как создать консоль и ввести десятичное число?
2) как десятичное число преобразовать в 2 и вывести его?
с остальной частью задания потом наверно справлюсь сам

вот что я сделал, компилирую MASM 8.1 там оболочка (вроде так называется) QEDITOR.EXE ошибок нет, *.exe создаётся, но не запускается:

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

	include \MASM32\INCLUDE\windows.inc
	include \MASM32\INCLUDE\kernel32.inc
	include \MASM32\INCLUDE\shell32.inc
	include \MASM32\INCLUDE\masm32.inc
	include \masm32\include\user32.inc

	includelib \MASM32\LIB\kernel32.lib
	includelib \MASM32\LIB\shell32.lib
	includelib \masm32\lib\user32.lib

; #########################################################################
;			
WaitT	PROTO

.data

stdout	dd	?
stdin	      dd	?
nWrite	dd ?
nRead	      dd ?
buf	      db	128 dup('0')
str1	      db"Enter chislo: ",0

.code

start:
	invoke	GetStdHandle,-11			;хендл вывода
	mov	stdout,eax			
	invoke	GetStdHandle,STD_INPUT_HANDLE		;хендл ввода
	mov	stdin,eax

	invoke	WriteConsole,stdout,addr str1,sizeof str1,addr nWrite,0
	invoke	ReadConsole,stdin,addr buf,128,addr nWrite,0
	mov	edi,offset buf			;в edi адресс введённого числа
	
          ;  из edi в другой регист для преобразования, например: mov eax,edi 

	call	WaitT
	push	0
	call	ExitProcess
;=======================================PROC======================
WaitT	PROC  ; посмотрим на созданное окно консоли
	mov	ecx,100000000 	
m2:
	loop	m2
	ret
      nop
WaitT	endp
end start

Последний раз редактировалось rpy3uH; 18.11.2007 в 18:26.
ёжик вне форума Ответить с цитированием
Старый 18.11.2007, 18:42   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от ёжик Посмотреть сообщение
1) как создать консоль и ввести десятичное число?
в приницпе консоль ты создал, и ввод числа ты т тоже сделал (функция ReadConsole)

Цитата:
Сообщение от ёжик Посмотреть сообщение
2) как десятичное число преобразовать в 2 и вывести его?
как я понял тебе надо преобразовать число в десятичной системе счисления в число в двоичной системе.
в "прицепе" пример программы на FASM для вывода минимального из трёх введённых значений, там есть функция преобразования числа в строку с указанием системы счисления в котором оно будет представлено
Вложения
Тип файла: zip min_val_for_Win32.zip (1.8 Кб, 111 просмотров)
rpy3uH вне форума Ответить с цитированием
Старый 18.11.2007, 19:37   #3
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
По умолчанию

"в приницпе консоль ты создал, и ввод числа ты т тоже сделал (функция ReadConsole)"

;================================== =====PROC======================
WaitT PROC ; посмотрим на созданное окно консоли
mov ecx,100000000
m2:
loop m2
ret
nop
WaitT endp

это процедура для задержки окна в ecx записано количество милисекунд


да это я сделал, но файл *.exe не запускается
ошибок при компиляции не было, при запуске фала *.exe тоже ошибок системы нет
!НО самой консоли нет

Последний раз редактировалось ёжик; 18.11.2007 в 19:40.
ёжик вне форума Ответить с цитированием
Старый 19.11.2007, 12:28   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

А ФАСМ подойдёт?
Вложения
Тип файла: zip basecnv.zip (2.1 Кб, 42 просмотров)
пыщь

Последний раз редактировалось JTG; 19.11.2007 в 12:43.
JTG вне форума Ответить с цитированием
Старый 19.11.2007, 16:49   #5
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
По умолчанию

нет,спасибо задачку задали в университете, там MASM стоит, вот я и пытаюсь сделать.
я компилирую приведённый выше код - ошибок при компиляции нет, при запуске фала *.exe тоже ошибок системы нет
!НО самой консоли нет (хотя программа правильно сделала (вроде) )
а у моего знакомого она открывается, хотя ОС windows XP стоит у обоих... не пойму почему так...
ёжик вне форума Ответить с цитированием
Старый 19.11.2007, 18:18   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ну попробуй заменить
Цитата:
WaitT PROC ; посмотрим на созданное окно консоли
mov ecx,100000000
m2:
loop m2
ret
nop
WaitT endp
на человеческое invoke Sleep,10000
Может консоль есть, но она быстро закрывается (пофиг что там ReadConsole есть %)

ну и тут наверно
push 0
call ExitProcess
на invoke ExitProcess,0 заменить можно

И вот ещё: .data нужно сменить на .data? ? А то больше по фасму, там проще
и ещё addr str1 или offset str1
пыщь
JTG вне форума Ответить с цитированием
Старый 19.11.2007, 19:38   #7
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
По умолчанию

ой, пристаю всё к вам с распросами, а при линковке то:
LINK : warning LNK4089: all references to "user32.dll" discarded by /OPT:REF

предупреждение, что программа напрямую не вызывает ни одной функции из user32.dll

но я ж подключил и lib и inc
ёжик вне форума Ответить с цитированием
Старый 19.11.2007, 19:50   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от ёжик Посмотреть сообщение
ошибок при компиляции не было, при запуске фала *.exe тоже ошибок системы нет
!НО самой консоли нет
чтобы консоль была надо что бы сама программа была консольная, т.е. при линковке ты должен указать какой программа должна быть (консоль GUI, DLL, драйвер)
какие у тебя параметры линковки

Последний раз редактировалось rpy3uH; 19.11.2007 в 19:53.
rpy3uH вне форума Ответить с цитированием
Старый 19.11.2007, 20:46   #9
ёжик
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 13
По умолчанию

Код:
.386
     .model flat, stdcall
     option casemap :none
     include \MASM32\INCLUDE\windows.inc
     include \MASM32\INCLUDE\kernel32.inc
     include \MASM32\INCLUDE\shell32.inc
     include \MASM32\INCLUDE\masm32.inc
     include \MASM32\INCLUDE\user32.inc
     includelib \MASM32\LIB\kernel32.lib
     includelib \MASM32\LIB\shell32.lib
     includelib \MASM32\LIB\user32.lib

; ##############################################
.data
buf           db     128 dup('0')
str1           db"Enter chislo: ",0
.data?
stdout          dd ?
stdin           dd ?
nWrite          dd ?
nRead           dd ?

.code
start:
     invoke     GetStdHandle,-11               ;хендл вывода
     mov     stdout,eax               
     invoke     GetStdHandle,STD_INPUT_HANDLE          ;хендл ввода
     mov     stdin,eax
     invoke     WriteConsole,stdout,addr str1,sizeof str1,addr nWrite,0
     invoke     ReadConsole,stdin,addr buf,128,addr nWrite,0
     mov     edi,offset buf               ;в edi адресс введённого числа
     invoke Sleep,10000
     invoke ExitProcess,0  
end start
вот, при компиляции этого кода выводится
LINK : warning LNK4089: all references to "user32.dll" discarded by /OPT:REF
судя по переводу: программа напрямую не вызывает ни одной функции из user32.dll

Последний раз редактировалось ёжик; 19.11.2007 в 20:48.
ёжик вне форума Ответить с цитированием
Старый 20.11.2007, 19:31   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

а тебе и не нужна библиотека user32.dll можешь убрать все инклюды которые с ней связаны, и в принципе shell32.dll тоже тебе не нужна
rpy3uH вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консоль Win Noor Свободное общение 5 20.12.2008 19:05
Консоль и компаненты FAiver Общие вопросы Delphi 4 04.01.2008 13:29
Консоль MAcK Общие вопросы Delphi 4 19.12.2007 19:05