Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

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

Здравствуйте, нужна ваша помощь. Я новенький в прогр. на асме и у меня возникли некоторые проблемы. Мне нужно создать ввод какого-то числа с клавиатуры, сделать с ним какие-то действия ( ну например умножить на другое число и т.д.) и потом вывести результат
Код:

.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
Репутация: 10
По умолчанию

нашёл функцию 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
Репутация: 10
По умолчанию

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

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

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

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

Цитата:
проблема в том что при выводе оно берет откуда то две лишних цифры в конце а именно 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
Репутация: 10
По умолчанию

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

Цитата:
Сообщение от 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
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Ввод - вывод AquaticSoul Помощь студентам 0 18.04.2010 20:02
Ввод-вывод Sparky Assembler 3 04.10.2009 13:15
Ввод-вывод в С++ StudentPolitech Помощь студентам 0 04.06.2009 20:07
Ввод и вывод Mihael-Vlz Паскаль 3 19.01.2009 19:00


04:28.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru