1 / 1 / 0
Регистрация: 22.05.2018
Сообщений: 84
|
|
1 | |
MASM64 Вывести значение Unsigned Int 6411.09.2022, 13:33. Показов 1273. Ответов 11
Всем добрый день!
Народ, кто подскажет, как в MASM64 инициализировать 64-разрядную переменную, чтобы при помещении в регистр и дальнейшем сложении с другим числом она не обращалась в отрицательное значение, а добросовестно достигала величины ffffffffffffffffh Заранее всем благодарен! Троликов и "хохотунчиков-юморных-сатиристов" прошу следовать далее...
0
|
11.09.2022, 13:33 | |
Ответы с готовыми решениями:
11
Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? Размерность int или как из signed int сделать unsigned int? Не умещается значение = 4млрд, в переменной типа unsigned long int Определить для какого наибольшего n, можно вычислить значение (2n + 1) пользуясь типом unsigned int в C++ |
Ушел с форума
16339 / 7658 / 1076
Регистрация: 11.11.2010
Сообщений: 13,705
|
|
11.09.2022, 16:53 | 2 |
SergeClause,
variant_name dq число
1
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
11.09.2022, 17:54 | 3 |
SergeClause, в асме нет "знаковости" чисел. Любое число можно представить как знаковое, так и беззнаковое.
Т.е. -5 может быть представлено как 0FFFFFFFFFFFFFFFBh, и это будет одно и то же значение. Инструкциям add, sub нет разницы с какими числами работать – знаковыми или беззнаковыми. А вот mul, imul и div, idiv сделано по 2 пары, т.к. там знак имеет значения. И они рассматривают исходные числа и результаты как знаковые или как беззнаковые. А вы можете рассматривать их по-своему.
1
|
1 / 1 / 0
Регистрация: 22.05.2018
Сообщений: 84
|
||||||
11.09.2022, 18:27 [ТС] | 4 | |||||
Mikl___, Увы, прога сменила знак и покатилась вниз...
Jin X, Странно, а как же это: Directive Description of Initializers BYTE, DB (byte) Allocates unsigned numbers from 0 to 255. SBYTE (signed byte) Allocates signed numbers from -128 to +127. WORD, DW (word = 2 bytes) Allocates unsigned numbers from 0 to 65,535 (64K). SWORD (signed word) Allocates signed numbers from -32,768 to +32,767. DWORD, DD (doubleword = 4 bytes), Allocates unsigned numbers from 0 to 4,294,967,295 (4 megabytes). SDWORD (signed doubleword) Allocates signed numbers from -2,147,483,648 to +2,147,483,647. Дальше пошли пляски со знаком FWORD, DF (farword = 6 bytes) Allocates 6-byte (48-bit) integers. These values are normally used only as pointer variables on the 80386/486 processors. QWORD, DQ (quadword = 8 bytes) Allocates 8-byte integers used with 8087-family coprocessor instructions. TBYTE, DT (10 bytes), Allocates 10-byte (80-bit) integers if the initializer has a radix specifying the base of the number. Взято отсюда: http://www.sxlist.com/TECHREF/... asmc04.htm Или Майкрософт перестало сопровождать длинные целые переменные? Добавлено через 13 минут Когда объявляю s0 как dd, все работает как надо
0
|
Модератор
|
|
11.09.2022, 18:44 | 5 |
Видимо, str$ преобразует в строку числа с учётом знака.
Используйте вызов другой функции, например, wsprintf с форматной строкой "%llu"
1
|
1 / 1 / 0
Регистрация: 22.05.2018
Сообщений: 84
|
|
11.09.2022, 19:14 [ТС] | 6 |
ФедосеевПавел,
Полагаете, реагирует на большие числа? Проверю! Но когда я объявляю s0 как dd, все работает нормально.
0
|
Модератор
|
||||||
11.09.2022, 19:16 | 7 | |||||
Ошибся с форматной строкой.
Нужно %I64u
1
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||||
11.09.2022, 19:34 | 8 | ||||||||||
Это всё абстракции диалекта языка ассемблера. Для процессора нет никакой разницы какого типа данные вы храните. Это может быть signed byte, unsigned byte, char, bool или массив битов.
К примеру, можно использовать SBYTE в макросе .IF при сравнении, чтобы компилятор понимал какую инструкцию условного перехода использовать: ja или jg , к примеру.Опять же, даже при сравнении используется cmp для всех типов, а уже далее – знаковые или беззнаковые условные переходы, которые вы можете даже перемешать.Добавлено через 13 минут
Пробуйте:
1
|
1 / 1 / 0
Регистрация: 22.05.2018
Сообщений: 84
|
|
12.09.2022, 17:37 [ТС] | 9 |
Jin X Большое спасибо!
Замечательно все заработало, но мне немного непонятно, если не затруднит, объясните пожалуйста длина buffer 32 байта, а 10 в invoke - это что такое? И если длина числа заранее неизвестна? Например, вот файл number.dec - в нем сидит одно единственное десятичное число, мне надо его использовать для арифметических операций, потом загнать в файл и вывести на консоль, но, ладно, за арифметику возьмусь чуть позже, а сейчас как его вывести на консоль?
0
|
1 / 1 / 0
Регистрация: 22.05.2018
Сообщений: 84
|
|
12.09.2022, 18:18 [ТС] | 10 |
Федосеев Павел, большое спасибо!
Но что-то не получается выполнить. Компилируется-линкуется нормально, а при выполнении выскакивает быстроисчезающая консоль... И всё...
0
|
Модератор
|
|||||||||||
12.09.2022, 20:29 | 11 | ||||||||||
Затрудняюсь сказать.
Полный текст программы
Разбираться пока нет времени, поверьте - исходник рабочий. Я не программирую на ассемблере, поэтому макросы так и не запомнил и не пользуюсь. Код привожу в том виде, который будет идентично выглядеть в отладчике x64dbg.
1
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
13.09.2022, 11:48 | 12 |
Основание системы счисления.
https://docs.microsoft.com/en-... t(v=vs.140) Оно у вас в виде строки, вот в виде строки и выводите. invoke conout, ADDR Number, lf Добавлено через 22 минуты При работе с большими числами, числа можно хранить в разном виде: – в виде отдельных цифр (1 цифра в 1 байте): а) значениями от 0 до 9, б) прямо-таки в виде символа цифры ('0'); – в BCD-виде (1 цифра в 1 полубайте, т.е. 2 цифры в байте); – в двоичном виде, причём: а) в дополнительном коде (как обычно числа хранятся), б) в прямом коде (где знаку отводится отдельный бит, а абсолютное значение числа не меняется – это может быть удобнее при делении, например). Так что, ввод и вывод будет зависеть от того, в каком формате вы числа будете хранить.
1
|
13.09.2022, 11:48 | |
13.09.2022, 11:48 | |
Помогаю со студенческими работами здесь
12
Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int. Как перевести сишный unsigned int в явский int? Почему результат сравнения int и unsigned int равен 1? Ошибка конвертирования from 'quint32 (*)() {aka unsigned int (*)()}' to 'quint32 {aka unsigned int}' Определение типов. Приведение int к unsigned int Разница int, short, unsigned int, unsigned short Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |