169 похожих чатов

Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API

ничего не выводит, что я делаю не так?
program Hello;
{$APPTYPE CONSOLE}
uses System.SysUtils, WinAPI.Windows;
begin
var caption: PWideChar := 'Hello';
var text: PWideChar := 'World';
var stdout: DWORD;
var cWritten:DWORD;
writeln(caption);
asm
push STD_OUTPUT_HANDLE
call GetStdHandle
mov stdout, eax
push eax
push text
push 5
push offset cWritten
push 0
call WriteConsoleA
end;
readln;
end.

20 ответов

8 просмотров

А calling convention правильный?

Sergey-Vinogradov Автор вопроса
Boris Usievich
А calling convention правильный?

push 0 push caption push text push 0 call MessageBoxW вот это работает

А если с асма на дельфи переписать то работает?

И кстати да, почему ты вайд-строку в А-функцию пихаешь?) Оно же в лучшем случае первый символ выведет, точнее его половинку, которая не нулл

program Hello; {$APPTYPE CONSOLE} uses SysUtils,Windows; var text: PWideChar; stdout: THandle; cWritten: DWORD; begin text:= 'Hello World!'; asm push STD_OUTPUT_HANDLE call GetStdHandle mov stdout, eax lea eax, cWritten push eax push 12 push text push stdout call WriteConsoleW end; readln; end.

Александр В
program Hello; {$APPTYPE CONSOLE} uses SysUtils,...

А что за зверь lea? Я так и не понял почему именно оно юзается для загрузки адреса, а некакой-нить mov

Vga
А что за зверь lea? Я так и не понял почему именно...

lea вычисляет на этапе выполнения, а mov на этапе компиляции, в принципе можно и на mov заменить

Sergey-Vinogradov Автор вопроса
Александр В
program Hello; {$APPTYPE CONSOLE} uses SysUtils,...

а почему у вас не запихивается в стек stdout? и почему у меня заработало, когда я закомментировало строку //push stdout ????????? это вообще КАК?

Александр В
screenshot

мм, семерочка

Александр В
lea вычисляет на этапе выполнения, а mov на этапе ...

все равно не понимаю, как оно вычисляет на этапе выполнения? не передается же в инструкцию символ cWritten, явно его адрес записывается в машинный код?

Vga
все равно не понимаю, как оно вычисляет на этапе в...

например команда LEA EAX, [ECX+ECX*4] загрузит в регистр EAX значение ECX * 5.

Karagy
например команда LEA EAX, [ECX+ECX*4] загрузит в р...

А какой смысл использовать это с константой:

Vga
все равно не понимаю, как оно вычисляет на этапе в...

Ну она грузит в регистр адрес, вычисленный по смещению, заданному вторым операндом. Можно заменить на mov, но во многих случая, придется делать mov, inc вместо одного lea

Sergey-Vinogradov Автор вопроса
Vga
А что за зверь lea? Я так и не понял почему именно...

lea - load effective address instruction одна из самых гибких команд, принимает весьма много параметров, которые умеет складывать

Александр В
lea вычисляет на этапе выполнения, а mov на этапе ...

ерунда, lea может делать вычисления, только очень простые типа MOV EDX, [EBX + 8*EAX + 4]

Похожие вопросы

Обсуждают сегодня

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Яндекс маршрутизатор кто-нибудь использовал с своих проектах, чтоб через него маршруты составить/посчитать? Насколько простой/муторный сервис?
Dreamer_0x01 VeseloV
7
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
В связи с "политическим дембелем" ms office кто нибудь пробовал работать с чем то импортозамещенным? Например, Р7. Т. е. задача открыть "импортозамещенный" шаблон, что то в н...
Alex
5
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
Карта сайта