Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 3
MASM32

Деление числа, введённого из консоли

24.06.2018, 00:08. Показов 3482. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Работаю в компиляторе MASM32 и передо мною стоит задача - ввести в консоль количество дней, а вывести количество недель. Т.е. 7 дней это 1 неделя, 365 это 52.
Я думал так - взять число из регистра, введённое, и поделить на 7, а значение без остатка вывести как ответ.
Проблема в том что ввести в консоль получается информацию, но дальше она не делится на 7, и вообще математика не выполняется. Подозреваю что проблема в том, что-бы перевести выданные значения в десятичные числа. Прошу помощи с данной задачкой, ниже представляю свой код:
Заранее благодарю за ваше внимание.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
.386
.model flat, stdcall
option casemap: none
 
include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/msvcrt.inc
 
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/msvcrt.lib
 
include /masm32/macros/macros.asm
uselib masm32, comctl32, ws2_32
 
.data
msg_title db "Количество недель", 0 
buffer db 128 dup(?)
format db "%d", 0
atoi PROTO C:DWORD
 
res dd 122
hStdIn dd 0
hStdOut dd 0
slenght dd 0
sRead db 128 dup(?)
n dd ?
.const
sConsoleTitle db "Calculation of the number of weeks", 0
prompt db "Amount of day's:", 13, 10
std_input_handle equ -10d
std_output_handle equ -11d
 
.code
 
start:
push offset sConsoleTitle
call SetConsoleTitle
 
push std_output_handle
call GetStdHandle
mov hStdOut, eax
 
push std_input_handle
call GetStdHandle
mov hStdIn, eax
 
 
push 0
push 0
push 10h
push offset prompt
push hStdOut
call WriteConsole
 
push 0
push offset slenght
push 128
push offset buffer
push hStdIn
call ReadConsole
 
mov eax, 365
mov ebx, 7
xor edx,edx
div ebx ; деление edx:eax на ebx
mov res, eax
 
invoke wsprintf, addr buffer, addr format, eax
invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK
invoke ExitProcess, 0
end start
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2018, 00:08
Ответы с готовыми решениями:

Получение введенного числа из консоли
format PE console ; 32-разрядная консольная программа WINDOWS EXE entry...

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы...

Процедуры: деление / умножение числа на n-ю степень числа 2
Составить программу (с разными способами передачи параметров в процедуру), содержащую процедуру,...

3
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
24.06.2018, 05:34
Seedan, загрузи свою программу в отладчик OllyDbg и посмотри, что он покажет.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
24.06.2018, 09:37
Лучший ответ Сообщение было отмечено Seedan как решение

Решение

Если перевод строки в число можно выполнять библиотечными функциями, то воспользуйтесь atodw из библиотеки masm32rt.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
.386
.model flat, stdcall
option casemap: none
 
        include /masm32/include/windows.inc
        include /masm32/include/user32.inc
        include /masm32/include/kernel32.inc
        include /masm32/include/msvcrt.inc
 
        includelib /masm32/lib/user32.lib
        includelib /masm32/lib/kernel32.lib
        includelib /masm32/lib/msvcrt.lib
 
        include /masm32/macros/macros.asm
        uselib masm32, comctl32, ws2_32
 
.data
        msg_title       db      "Количество недель", 0
        format          db      "%d", 0
 
        res             dd      122
.const
        sConsoleTitle   db      "Calculation of the number of weeks", 0
        aszPromptN      db      "Amount of day's:", 13, 10, 0
 
        std_input_handle        equ -10d
        std_output_handle       equ -11d
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        Buffer          db      128 dup(?)
        BufLen          dd      ?
        N               dd      ?
 
.code
 
start:
push offset sConsoleTitle
call SetConsoleTitle
 
        ; получение описателей ввода и вывода консоли
        invoke  GetStdHandle,   STD_INPUT_HANDLE
        mov     hConsoleInput,  eax
 
        invoke  GetStdHandle,   STD_OUTPUT_HANDLE
        mov     hConsoleOutput, eax
        ;ввод числа недель
        invoke  WriteConsole, hConsoleOutput, ADDR aszPromptN,\
                LENGTHOF aszPromptN - 1, ADDR BufLen, NULL
        invoke  ReadConsole, hConsoleInput, ADDR Buffer,\
                LENGTHOF Buffer, ADDR BufLen, NULL
        lea     esi,    [Buffer]        ;удаление символов
        add     esi,    [BufLen]        ;перевода строки
        sub     esi,    2               ;из буфера ввода
        mov     [esi], word ptr 0
        invoke  atodw, ADDR Buffer
        mov     [N],    eax
        ;вычисление
        mov     eax,    [N]
        mov     ebx,    7
        xor     edx,    edx
        div     ebx             ; деление edx:eax на ebx
        mov     [res],  eax
 
invoke wsprintf, addr Buffer, addr format, eax
invoke MessageBox, 0, addr Buffer, addr msg_title, MB_OK
invoke ExitProcess, 0
end start
Или реализуйте подобное самостоятельно, на основе исходника из masm32 или примеров (они, правда, для DOS 16-бит) из закреплённой темы Ввод и вывод чисел в различных системах счисления
1
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 3
24.06.2018, 18:58  [ТС]
Огромное спасибо, про использование библиотек ничего не говорилось, та что ваш совет сильно помог, задача решена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2018, 18:58
Помогаю со студенческими работами здесь

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

Считывать числа из консоли и записывать их в стек пока не будет введено число 777, сложить все введенные числа
Всем привет, только начали изучение ассемблера в вузе и при выполнении задания возникла проблема:...

При делении отрицательного числа выводит неправильный ответ. Если беру числа 127 13 10, пишет переполнение
; (a+b)/c-2 _stack segment STACK dw 256 dup(0) _stack ends _data segment msgA db 10,...

Подготовить числа для вывода на консоль через ASCII и вывести на консоль
В регистре eax находится число, которое нужно превратить в ASCII-код и вывести на консоль символы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru