Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438

Почему не получается обойтись без переменной?

08.03.2016, 14:29. Показов 1224. Ответов 6
Метки asm, masm (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, подскажите пожалуйста почему у меня выводится какая-то ерунда (четыре непонятных символа), хотел не создавать просто переменную которая мне больше одного раза в коде не встретится и воспользоваться каким-то макросом найденным в интернете

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
include E:\masm32\include\masm32rt.inc
HeapAlloc PROTO STDCALL :DWORD,:DWORD,:DWORD
myfree proto :DWORD
 
.data
hmyHeap dd 0
hConsoleOutput DWORD ?
hMylp1 dd 0
 
szCALL MACRO sz
        CALL @F
        BYTE sz, NULL
        @@:
    ENDM
 
.code
 
main:
        invoke AllocConsole
        invoke GetStdHandle, STD_OUTPUT_HANDLE
        mov hConsoleOutput, EAX
            
invoke GetProcessHeap
mov hmyHeap,eax
 
invoke HeapAlloc,hmyHeap,HEAP_ZERO_MEMORY,300h
mov hMylp1,eax
push 0
    push 0
    szCALL "Hello World"
push 10
push esp
push eax
call RtlMoveMemory
 
mov ebx, [hMylp1]
invoke WriteConsoleA, hConsoleOutput,ebx, 10, 0, 0
invoke HeapFree,hmyHeap,NULL,hMylp1
 
 
end main
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2016, 14:29
Ответы с готовыми решениями:

Как обойтись без объявления переменной
Добрый вечер. В методе generate требуется избавиться от переменной ref, добавив вместо этого в цикл for цикл while, который будет пробегать...

Можно ли обойтись без переменной в Readln?
Подскажите пожалуйста. Readln(FileSettings, DBFile); Readln(FileSettings, buf); DBFile := DBFile + buf; Можно ли сделать так,...

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

6
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
09.03.2016, 01:17
alex-rudenkiy, ну так ты выводишь содержимое переменной hMylp1, в которой записан адрес полученный в HeapAlloc.
0
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
09.03.2016, 01:25  [ТС]
shmkv, так я же сначала записываю в heap строку по указателю hmyheap, а потом пытаюсь вытащить текст в консоль по этому же адресу, так в чем же путаница?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
09.03.2016, 12:23
Цитата Сообщение от alex-rudenkiy Посмотреть сообщение
так я же сначала записываю в heap строку по указателю hmyheap
Нет, не записываешь.
0
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
09.03.2016, 18:16  [ТС]
shmkv, подожди а rtlmovememory тогда что делает?

Добавлено через 2 минуты
Она же вроде-бы записывает в heap "hello world"

Добавлено через 4 часа 30 минут
Так кто нибудь знает как обойтись без переменной ?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
09.03.2016, 21:47
Лучший ответ Сообщение было отмечено alex-rudenkiy как решение

Решение

Цитата Сообщение от alex-rudenkiy Посмотреть сообщение
одожди а rtlmovememory тогда что делает?
alex-rudenkiy, каждый push меняет содержимое esp. В твоем случаешь call в макросе уже заносит адрес на вершину стека. Если и использовать, то как-то так:
Assembler
1
2
3
4
push 10
    szCALL "Hello World"
push eax
call RtlMoveMemory
А вообще использовал бы fasm...

Добавлено через 1 минуту
Цитата Сообщение от shmkv Посмотреть сообщение
содержимое переменной hMylp1
Содержимое по адресу на который она указывает конечно.

Добавлено через 59 секунд
Цитата Сообщение от alex-rudenkiy Посмотреть сообщение
ак кто нибудь знает как обойтись без переменной ?
В FASM можно писать прямо так:
Assembler
1
invoke  MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK
в MASM'е не знаю и знать не хочу.
1
Terminator of naked apes
 Аватар для KyberMax
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
11.03.2016, 20:01
Лучший ответ Сообщение было отмечено alex-rudenkiy как решение

Решение

В Masm32 тоже понаписано всякой макроси (вот рабочий код, демонстрирующий два из них, например ;о):
Assembler
1
2
3
4
5
6
7
8
9
10
;
INCLUDE \Masm32\Include\Masm32rt.INC
;
.CODE
START:
      MsgBox NULL, "Hello, World!", "Masm32 MsgBox message box", MB_OK
      fnx MessageBox, NULL, "Hello, World!!11", "Masm32 fnx message box", MB_OK
      exit
;
END START
alex-rudenkiy, непонятно, зойчем ты вообще выделяешь память и копируешь строку, уже находящуюся в памяти - это лишь бесполезная трата времени и лишние команды (+ опять AllocConsole и нет ExitProcess, например ;о) Все вышеприведённые макросы делают всё за тебя: выделяют память и записывают туда строку (только работает это на этапе компиляции, например ;о) Если хочешь использовать макросы просто почитай Masm32\Help\masmlib.chm (и посмотри Masm32\Macros\Macros.asm, где это всё добро определено, например ;о)

Но прежде чем лезть в макросы тебе для начала неплохо было бы пройти уроки Iczelion со страницы его сайта http://win32assembly.programmi... rials.html, которые почему-то выкинуты из нонешнего пакета Masm32 (в первом-то они были ;о) - тебе это просто необходимо (судя по элементарным ошибкам в твоём коде, например ;о)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2016, 20:01
Помогаю со студенческими работами здесь

Обойтись без If ?
Доброго времени суток, уважаемые форумчане. Помогите, пожалуйста, разобраться со сложившейся ситуацией. Есть код: for(it =...

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

Как обойтись без x
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на четных и нечетных местах. (поменять...

можно ли обойтись без IF ?
Нужно заполнить с главного массива(mas_g) один массив(mas1) елементы с чётными номерами, а в другой(mas2) с нечётными. Вот то, что я...

Можно ли обойтись без if-во?
Создать структуру с полями (или класс с функциями), которые приведены в задаче. Описание структуры (класса), а также необходимых функций...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru