Консультация № 196755
21.10.2019, 22:43
0.00 руб.
0 8 1
Доброго времени суток уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Осталось последнее задание, а понять не как не могу что я делаю не так. Видимо я что-то упустила.
Задание: Ввести с клавиатуры строку символов. Вывести на экран её двоичное представление.
Вот что я написала. Программа работает, но не правильно, помогите пожалуйста
Код:

format PE console 4.0

include 'win32a.inc'
section '.text' code readable executable
start:
invoke printf, req
invoke scanf, sap, A ; ввод A
mov eax,[A]
RCL eax,1

invoke printf, sap
invoke getchar
invoke ExitProcess, 0
section '.data' data readable writeable
req db 'Enter simvol:',0
sap db '%d',0
A dd 0

section '.idata' import data readable
library kernel, 'KERNEL32.DLL', msvcrt, 'msvcrt.dll'
import msvcrt, printf,'printf', getchar,'getchar', scanf,'scanf'
import kernel, ExitProcess,'ExitProcess'


Обсуждение

давно
Старший Модератор
31795
6196
22.10.2019, 12:41
общий
Адресаты:
Вы вводите строку, но как %d', а не:
%с Считать один символ
%d Считать десятичное число целого типа
%i Считать десятичное число целого типа
%е Считать число с плавающей запятой
%f Считать число с плавающей запятой
%g Считать число с плавающей запятой
%о Считать восьмеричное число
%s Считать строку


Под строку нужно выделить место, а не просто A dd

И потом ужэ введенную строку преобразовывать в нужный формат.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403326
11
22.10.2019, 22:38
общий
Адресаты:
Доброй ночи!
Я сделала как поняла, но это не помогло. Можно попросить по-подробней чуть объяснить что не так с моим кодом?

Код:

format PE console 4.0

include 'win32a.inc'
section '.text' code readable executable
start:
invoke printf, req
invoke scanf, sap, A ; ввод A
А DB 20 DUP(?) ; выделяем место
mov eax,[A]
RCL eax,1
invoke printf, sap
invoke getchar
invoke ExitProcess, 0
section '.data' data readable writeable
req db 'Enter simvol:',0
sap db '%s'


section '.idata' import data readable
library kernel, 'KERNEL32.DLL', msvcrt, 'msvcrt.dll'
import msvcrt, printf,'printf', getchar,'getchar', scanf,'scanf'
import kernel, ExitProcess,'ExitProcess'
давно
Старший Модератор
31795
6196
23.10.2019, 13:32
общий
Адресаты:
Как-то так:
[code lang=asm]format PE console 4.0

include 'D:\CAT\_Lang\fasm\Fasm.17160\INCLUDE\win32a.inc'

section '.text' code readable executable
start:
invoke printf, req
mov ebx,str_inp
mov edx,sap
invoke scanf,sap,str_inp; ebx ; ââîä A
; À DB 20 DUP(?) ; âûäåëÿåì ìåñòî
mov esi,str_inp
mov edi,str_out
@@00:lodsb
or al,al
jz @@02
mov ah,al
mov ecx,8
@@01:xor al,al
shl ah,1
adc al,'0'
stosb
loop @@01
mov al,' '
stosb
jmp @@00
@@02:
invoke printf, sap,str_out
invoke getchar
invoke ExitProcess, 0
section '.data' data readable writeable
req db 'Enter string:',0
sap db '%s',0
str_inp DB 20 DUP(?) ; âûäåëÿåì ìåñòî
str_out db 200 dup(?)
section '.idata' import data readable
library kernel, 'KERNEL32.DLL', msvcrt, 'msvcrt.dll'
import msvcrt, printf,'printf', getchar,'getchar', scanf,'scanf'
import kernel, ExitProcess,'ExitProcess' [/code]
Переделаете под себя
Прикрепленные файлы:
a95956a598fa25686f6a4cada8e50eff.jpg
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403326
11
23.10.2019, 22:20
общий
Адресаты:
Добрый вечер!
Спасибо большое! Я была далека от истины
Вы хорошо разбираетесь в программирование. Не могли бы вы подсказать с чего начать чтобы научиться правильно мыслить при составлении программ? Вопрос, может и глупый, но все же, как развить понимание того как должно быть при написании программ. Может книга какая-нибудь есть доступная? Такое ощущение что есть какой-то пробел в знаниях который не дает нормально начать писать. Еще раз спасибо!
давно
Старший Модератор
31795
6196
24.10.2019, 10:06
общий
24.10.2019, 10:07
Адресаты:
Цитата: Алина
Вы хорошо разбираетесь в программирование.

Только не сглазьте.

Я Вам уже писал тут.
Знания самого языка нужная часть программированиия, но программа, это реализация алгоритма, простая программа -простые алгоритмы, сложная - комбинация простых.

Их всего 3-и, прямоугольнник - действие(присваивание, вызов подпрограмм), ромб - условие(что-то с чем-то сравнивается), параллелограмм - ввод/вывод, т.е. общенние с внешними устройствами.

Пытайтесь базовые алгоритмы делать несколькими способами, с ипользованием разных наборов команд. Пройдет время и при некотором опыте, Вы уже не будете задумыватся почему Вы выбираете ту или иную реализацию одного алгоритма, это уже будет полуавтоматически.

Теперь снова перечитайте мини-форум своего вопроса 196617, только уже с учетом, нового опыта.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403326
11
24.10.2019, 23:14
общий
24.10.2019, 23:15
Адресаты:
Большое спасибо за информацию! Смысл понятен как и теория. Теперь попробую осознанно применять все это на практике! Ваш ответ навел на мысль что без хорошей книжки по алгоритмам тут не обойтись
Еще раз спасибо за уделенное время
давно
Старший Модератор
31795
6196
25.10.2019, 09:22
общий
Адресаты:
Цитата: Алина
Ваш ответ навел на мысль что без хорошей книжки по алгоритмам тут не обойтись

Д. Э. Кнут: Искусство Программирования., это наверное самый классный многотомник - сборник алгоритмов.

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
25.10.2019, 20:50
общий
это ответ
Здравствуйте, Алина!

Как-то так:
[code lang=asm]format PE console 4.0

include 'D:\CAT\_Lang\fasm\Fasm.17160\INCLUDE\win32a.inc'

section '.text' code readable executable
start:
invoke printf, req
mov ebx,str_inp
mov edx,sap
invoke scanf,sap,str_inp
; À DB 20 DUP(?)
mov esi,str_inp
mov edi,str_out
@@00:lodsb
or al,al
jz @@02
mov ah,al
mov ecx,8
@@01:xor al,al
shl ah,1
adc al,'0'
stosb
loop @@01
mov al,' '
stosb
jmp @@00
@@02:
invoke printf, sap,str_out
invoke getchar
invoke ExitProcess, 0
section '.data' data readable writeable
req db 'Enter string:',0
sap db '%s',0
str_inp DB 20 DUP(?)
str_out db 200 dup(?)
section '.idata' import data readable
library kernel, 'KERNEL32.DLL', msvcrt, 'msvcrt.dll'
import msvcrt, printf,'printf', getchar,'getchar', scanf,'scanf'
import kernel, ExitProcess,'ExitProcess' [/code]

D:\CAT\_Lang\fasm\Fasm.17160\INCLUDE\ - это мой путь к инклудам. В папке fasm у меня много различных версий, я использовал Fasm.17160.

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа