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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 18:13   #1
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию ввод и вывод

Здравствуйте, нужна ваша помощь. Я новенький в прогр. на асме и у меня возникли некоторые проблемы. Мне нужно создать ввод какого-то числа с клавиатуры, сделать с ним какие-то действия ( ну например умножить на другое число и т.д.) и потом вывести результат
Код:
.386
.model flat, stdcall
 option casemap :none ; case sensitive
 include \masm32\include\windows.inc
 include \masm32\include\kernel32.inc
 include \masm32\include\user32.inc
 include \masm32\include\masm32.inc
 includelib \masm32\lib\masm32.lib
 
 includelib \masm32\lib\kernel32.lib
 includelib \masm32\lib\user32.lib

.data
 result dd 0
 nRead dd 0
 chislo db 0
 hOutput dd 0
 hInput dd 0
 ConsoleTitle db 'STROKkkka',0
 title_1 db "wtf",0
 Convert db '%d',0 
 


 .code
start:
 call	AllocConsole  
 invoke SetConsoleTitle, addr ConsoleTitle
 invoke GetStdHandle, STD_INPUT_HANDLE 
 mov hInput,eax
 invoke GetStdHandle,STD_OUTPUT_HANDLE
 mov hOutput,eax 
 invoke ReadConsole,  hInput, addr chislo, 10, addr nRead, NULL
 mov bl, 23
 mov al, chislo
 add al, bl
 cbw
 cwd
 invoke wsprintf, addr result, addr Convert, eax
  invoke MessageBox,0,addr result, addr title_1,MB_OK

 
 push 0 
call ExitProcess
end start
мне подсказали что проблема в том что chislo у меня строка поэтому я не могу заносить его в регистр, но я никак не могу понять как преобразовать строку в число... читал что нужно просто отнять 48 но не помогло. Помогите пожалуйста
hrust46 вне форума Ответить с цитированием
Старый 01.04.2012, 13:09   #2
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

нашёл функцию atodw но всё равно выводит какой то бред

Код:
.code
start:
 call	AllocConsole  
 invoke SetConsoleTitle, addr ConsoleTitle
 invoke GetStdHandle, STD_INPUT_HANDLE 
 mov hInput,eax
 invoke GetStdHandle,STD_OUTPUT_HANDLE
 mov hOutput,eax 
 invoke ReadConsole,  hInput, addr chislo, 10, addr nRead, NULL
      invoke atodw, addr chislo
     
      invoke wsprintf, addr result, addr Convert, eax
     invoke MessageBox,0, addr result  , addr title_1,MB_OK
помогите, очень нужна помощь
hrust46 вне форума Ответить с цитированием
Старый 02.04.2012, 01:21   #3
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

проблема в том что при выводе оно берет откуда то две лишних цифры в конце а именно 28 и прибавляет 24 к последним вводимым тоесть при вводе числа 123 выводит
14728
мда, чувствую помощи я не дождусь....

Последний раз редактировалось hrust46; 02.04.2012 в 19:08.
hrust46 вне форума Ответить с цитированием
Старый 02.04.2012, 20:53   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Да, да......
http://www.programmersforum.ru/showp...89&postcount=5
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 03.04.2012, 20:56   #5
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

уффффффф, убил пару часов но так и не понял....
hrust46 вне форума Ответить с цитированием
Старый 03.04.2012, 23:04   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
проблема в том что при выводе оно берет откуда то две лишних цифры в конце а именно 28 и прибавляет 24 к последним вводимым тоесть при вводе числа 123 выводит
14728
а так:
Код:
.data
chislo		db 64 dup (0)
result		db 64 dup (0)
Convert		db 'число = %i', 0
ConsoleTitle	db 'tit__le', 0
hInput		dd 0
hOutput		dd 0
nRead		dd 0
title_1		db 'msgBox', 0

.code
start:
	call	AllocConsole  
	invoke	SetConsoleTitle, addr ConsoleTitle
	invoke	GetStdHandle, STD_INPUT_HANDLE 
	mov	hInput,eax
	invoke	GetStdHandle,STD_OUTPUT_HANDLE
	mov	hOutput,eax 
	invoke	ReadConsole, hInput, addr chislo, 10, addr nRead, NULL
	mov	eax, [nRead]
	mov	byte ptr [chislo+eax-2], 0
	invoke	atodw, addr chislo
	invoke	wsprintf, addr result, addr Convert, eax
	invoke	lstrlen, addr result
	invoke	WriteConsole, hOutput, addr result, eax, addr nRead, NULL
;	invoke	MessageBox, 0, addr result, addr title_1,MB_OK
	invoke	ExitProcess, 0
end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 04.04.2012, 18:44   #7
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

большое спасибо!!!
hrust46 вне форума Ответить с цитированием
Старый 07.04.2012, 13:30   #8
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
а так:
Код:
.data
chislo		db 64 dup (0)
result		db 64 dup (0)
Convert		db 'число = %i', 0
ConsoleTitle	db 'tit__le', 0
hInput		dd 0
hOutput		dd 0
nRead		dd 0
title_1		db 'msgBox', 0

.code
start:
	call	AllocConsole  
	invoke	SetConsoleTitle, addr ConsoleTitle
	invoke	GetStdHandle, STD_INPUT_HANDLE 
	mov	hInput,eax
	invoke	GetStdHandle,STD_OUTPUT_HANDLE
	mov	hOutput,eax 
	invoke	ReadConsole, hInput, addr chislo, 10, addr nRead, NULL
	mov	eax, [nRead]
	mov	byte ptr [chislo+eax-2], 0
	invoke	atodw, addr chislo
	invoke	wsprintf, addr result, addr Convert, eax
	invoke	lstrlen, addr result
	invoke	WriteConsole, hOutput, addr result, eax, addr nRead, NULL
;	invoke	MessageBox, 0, addr result, addr title_1,MB_OK
	invoke	ExitProcess, 0
end start
правда возникла другая проблема... при вводе отрецательных чисел беда...
hrust46 вне форума Ответить с цитированием
Старый 07.04.2012, 13:50   #9
hrust46
 
Регистрация: 31.03.2012
Сообщений: 7
По умолчанию

а всё, разобрался. Сделал проверку на знак минус и заменил первый байт на аски символ:

cmp chislo[0], '-'
je m1
jne m2
m1:
mov chislo [0], 2D
m2:
...
hrust46 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Ввод - вывод AquaticSoul Помощь студентам 0 18.04.2010 20:02
Ввод-вывод Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.10.2009 13:15
Ввод-вывод в С++ StudentPolitech Помощь студентам 0 04.06.2009 20:07
Ввод и вывод Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 18:00