С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 06.03.2017
Сообщений: 109
MASM

Вызов библиотечной функции printf из ассемблерной вставки на C/C++

07.04.2020, 13:15. Показов 5008. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть вот такой код, как мне вывести число 2020 числом а не массивом символов?

C++
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
#include <iostream>
using namespace std;
char FORMAT[] = "%s %s %s %s, %s\n";
char SURNAME[] = "Petrov";
char NAME[] = "Petr";
char DESIGN[] = "Design";
char BY[] = "by";
char YEAR[] = "2020";
int YEAR1 = 2020;
void main() {
    __asm { 
        mov eax, offset YEAR
        push eax
        mov eax, offset SURNAME
        push eax
        mov eax, offset NAME
        push eax
        mov eax, offset BY
        push eax
        mov eax, offset DESIGN
        push eax
        mov eax, offset FORMAT
        push eax
        mov edi, printf
        call edi
 
        pop ebx
        pop ebx
        pop ebx
        pop ebx
        pop ebx
    } 
    system("pause");
}
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2020, 13:15
Ответы с готовыми решениями:

Вывод значений при помощи printf из ассемблерной вставки в VS2012
Здравствуйте! делаю как на мсдн написано, а не работает( int a=0; int x=3; int N=4; __asm { mov eax,a mov ebx,x ...

Вычисление кусочной функции с помощью ассемблерной вставки в код на Pascal
Итак суть задания. В соответствии с заданием, вычисления у1 и у2 запрограммируйте на языке Ассемблера, вычисление у - на языке Паскаль....

Вызов функции в ассемблерной вставке C++.
Нужно ввести строку, объясните как вызвать и как параметры передать. Пусть это будет cin.getline.

3
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
07.04.2020, 13:31
а просто call printf сработает?
Кроме того, в стек вы помещаете 6 параметров, а извлекаете 5. Вместо pop ebx 6 раз сделайте add esp, 6*4

Добавлено через 1 минуту
А про число непонятно. У вас же YEAR - строка

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char fmt="%s %d";
char NAME="Petr";
int YEAR1=2020;
_asm{
  mov eax, YEAR1
  push eax
  mov eax, offset NAME
  push eax
  mov eax, offset fmt
  push eax
  call printf
  add esp, 3*4
}
1
1 / 1 / 0
Регистрация: 06.03.2017
Сообщений: 109
07.04.2020, 14:14  [ТС]
Уже поняла как надо писать, нужно убрать offset и изменить массив FORMAT. И будет вот так:

C++
1
2
mov eax, YEAR1
        push eax
Но почему offset мешает?

Добавлено через 24 минуты
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
mov eax, YEAR1
У меня уже нет проблем в плане работоспособности кода. Почему вы здесь не написали offset? Можете объяснить я просто не сильно понимаю как это работает.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
07.04.2020, 16:21
Лучший ответ Сообщение было отмечено MariaFitzgerald как решение

Решение

Строки передаются в виде адресов, а числа - непосредственно. Т.к. адрес (указатель) занимает 4 байта и число int - тоже 4 байта. Так зачем же усложнять обращение к числу?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2020, 16:21
Помогаю со студенческими работами здесь

Заменить вызов функции ассемблерной вставкой
Добрый вечер ! Вот такая проблема, мне нужно заменить вызов функции ассембл вставкой , я вот тут сделал но у меня выдает ошибку в 33...

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

Ошибка в вычислениях, вызов ассемблерной функции из С кода
Есть несложное выражение. X = K - B/2 + D + E*4; K - константа, D - трехбайтное число, В и Е - двухбайтовые. Проблема в том, что...

вызов функции СИ printf из asm кода
Помогите пожалуйста разобраться с вызовом библиотечных функций СИ из ассемблерногокода. Компилятор TASM.. Насколько я понял надо поключать...

Комментарий ассемблерной вставки
Прокомментируйте, пожалуйста, ассемблерную вставку, расположенную ниже. asm mov di,smesh add di,3+2*2 mov ax,k ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru