• Как написать "Hello World" на машинном коде?

    @asd111
    Вам достаточно изучить ассемблер и всё станет понятно.
    Каждая команда ассемблера транслируется "дословно" в машинный код.
    Т.е. например команда pushl %edx превратится в один байт 82

    Например программа на ассемблере:
    push %ebp
    mov %esp,%ebp
    call 0x8048298 
    cmp $0x41,%eax
    jne 0x80483ce 
    push $0x80484b0
    call 0x80482c8 
    add $0x4,%esp
    mov $0x0,%eax
    mov %ebp,%esp
    pop %ebp
    ret


    превратится в машинный код:
    0x55 0x89 0xe5 0xe8 0xfc 0xff 0xff 0xff
    0x83 0xf8 0x41 0x75 0x0d 0x68 0x00 0x00
    0x00 0x00 0xe8 0xfc 0xff 0xff 0xff 0x83
    0xc4 0x04 0xb8 0x00 0x00 0x00 0x00 0x89
    0xec 0x5d 0xc3


    Почитать можно здесь и здесь . В целом подойдет любая книга по ассемблеру.
    Ответ написан
    5 комментариев
  • Как решить эту задачу?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    У вас 7 неизвестных и 3 уравнения. Так что однозначно вы найти значения переменных никак не сможете. Но и найти вам надо какую-то сумму. Есть шанс, что как-то комбинируя, складывая, вычитая и домножая левые части этих уравнений можно получить искомую сумму. Иными словами, вам надо вектор (16, 25..100) представить в виде линейной комбинации векторов (1, 2..49), (4, 9..64) и (9, 16..81). Обратите внимание, что там везде получаются суммы трех квадратов равны следующему.

    Вам надо подобрать такие 3 коэффициента, что x*n^2 + y(n+1)^2+z(n+2)^2 = (n+3)^2. Для n=1..7. У вас тут квадратные многочлены от n получаются, равны они в 7 точках, так что они должны быть равны вообще при любых n. Значит, вам надо раскрыть скобки, сгрупировать степени n и приравнять к 0 все коэффициенты.

    Так вы получите 3 уравнения на 3 переменные x, y, z.
    x+y+z=1
    2y+4z=6
    y+4z=9

    Отсюда получается x=1 y=-3 z=3

    В итоге получаете 1*1-3*12+3*123 - это ваш ответ.
    Ответ написан
    2 комментария