Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2022, 15:55   #1
V1ammer_
Новичок
Джуниор
 
Регистрация: 04.06.2022
Сообщений: 3
По умолчанию NASM написал код, теперь даже ошибки не выводит

Вычислить значение функции при заданном значении x

•••{4, при x>0;
Z=|
•••{x^2, при x≤0

Код:
section .data
    x db '5'
    y db '4'

section .text
global _start
_start:

    mov eax, [x]
    sub eax, '0'
    mov ebx, 0
    cmp ebx, eax
    jl less
    mul eax
    add eax, '0'

    mov ecx, eax
    xor ebx, ebx
    mov ebx, 1
    xor eax, eax
    mov eax, 4
    int 0x80
    jmp Both

less:
    mov ecx, [y]
    xor ebx, ebx
    mov ebx, 1
    xor eax, eax
    mov eax, 4
    int 0x80
    jmp Both

Both:
    xor eax, eax
    mov eax, 1
    xor ebx, ebx
    mov ebx, 0
    int 0x80
V1ammer_ вне форума Ответить с цитированием
Старый 04.06.2022, 16:04   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от V1ammer_ Посмотреть сообщение
section .data
x db '5'
y db '4'
Код:
dump: 0x35, 0x34, 0x??, 0x??, 0x??
Цитата:
Сообщение от V1ammer_ Посмотреть сообщение
mov eax, [x]
Код:
dump: eax = 0x????3435
Цитата:
Сообщение от V1ammer_ Посмотреть сообщение
cmp ebx, eax
jl less
mul eax
add eax, '0'
Код:
dump: cmp 0x00000000, 0x????3405
jl less
mul 0x????3405 * 0x????3405 = edx 0x???????? eax 0x?A920819
add 0x?A920819, 0x30 = 0x?A920849
Цитата:
Сообщение от V1ammer_ Посмотреть сообщение
mov ecx, eax
xor ebx, ebx
mov ebx, 1
xor eax, eax
mov eax, 4
int 0x80
Код:
dump: Linux SYS_WRITE(STD_OUTPUT, *0x?A920849, 0x????????)
Цитата:
Сообщение от V1ammer_ Посмотреть сообщение
less:
mov ecx, [y]
xor ebx, ebx
mov ebx, 1
xor eax, eax
mov eax, 4
int 0x80
jmp Both
Код:
dump: Linux SYS_WRITE(STD_OUTPUT, *0x??????34, ?)

Последний раз редактировалось macomics; 04.06.2022 в 16:08.
macomics вне форума Ответить с цитированием
Старый 04.06.2022, 16:29   #3
V1ammer_
Новичок
Джуниор
 
Регистрация: 04.06.2022
Сообщений: 3
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение

Код:
dump: Linux SYS_WRITE(STD_OUTPUT, *0x??????34, ?)
У меня скорее всего проблема в логике
Использую joodle онлайн компилятор
Можно написать мою программу не используя эти страшные знаки вопросов, а также как и у меня использовать только основные [х], xor, mov, add, mul...?
V1ammer_ вне форума Ответить с цитированием
Старый 04.06.2022, 16:44   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Ну я же ясно написал то, что у вас получится при отладке программы.
Код:
mov eax, [x]; eax = 32-bit целое, [x] = 8-bit символ, 24-bit дополнительно считывается из памяти из старших адресов, для чего написал дамп .data
; 401000 35 = '5'
; 401001 34 = '4'
; 401002 ?? не определено в вашей программе, скорее всего 00
; 401003 ?? не определено в вашей программе, скорее всего 00
После этого вы из уже ошибочно загруженного значения вычитаете '0' = 0x30 и сравниваете значение с 0, что уже однозначно дает не верный переход (точнее перехода не будет всегда)
После чего вы умножаете число само на себя и пытаетесь вывести на экран значение, которое находится по получившемуся адресу 0x?A920819 и при этом не указываете длину (точнее длина получается из результат умножения т.е. 0)
блок команд
Код:
; mov edx, длина строки - отсутствует вовсе
    mov ecx, eax ; ecx = адрес в памяти строки для вывода
    xor ebx, ebx ; без понятия зачем она здесь
    mov ebx, 1 ; хэндл = STD_OUTPUT (консоль)
    xor eax, eax ; без понятия зачем она здесь
    mov eax, 4 ; функция SYS_WRITE
    int 0x80 ; вызов системного прерывания Linux i386
и есть тот самый страшный вызов. Аналогичной операцией на c++ будет
Код:
cout << (char *)0x?A920819

Последний раз редактировалось macomics; 04.06.2022 в 16:49.
macomics вне форума Ответить с цитированием
Старый 04.06.2022, 16:56   #5
V1ammer_
Новичок
Джуниор
 
Регистрация: 04.06.2022
Сообщений: 3
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Ну я же ясно написал то, что у вас получится при отладке программы.
Спасибо, теперь до меня дошло)
V1ammer_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возникают ошибки при компиляции кода, компилятор nasm. yurchik84 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 17.09.2021 13:20
Вообщим написал программу без структур теперь не знаю как добавить структуры для выполнения всего задания помогите хоть какнибудь прайдС++ C++ Builder 0 14.10.2014 08:48
Написал еще 1 программу ,НО опять ошибки pochti_poluchilos Visual C++ 3 04.07.2014 00:46
Программу написал, но выводит только одно значение Camelot_2012 Паскаль, Turbo Pascal, PascalABC.NET 2 13.04.2012 08:24
Исправьте ошибки в программе и допишите если что-то я не написал. Anton94.by Помощь студентам 0 07.12.2011 16:56