Ассемблер факториал

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sss-777, 6 May 2012.

  1. sss-777

    sss-777 New Member

    Joined:
    30 Apr 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Составить программу, выводящую на экран и в задаваемый с клавиатуры файл десятичное представление факториала. Должна быть работоспособна для вычисления 1000! Число тоже нужно задавать с клавиатуры с контролем ввода.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    самый читерский способ будет:
    1) пишешь на Си всё
    2) в опциях компиляции настраиваешь - вывод asm и кода в файл
    3) компилишь файл
    4) получаешь файл на ассемблере, причем рядом с каждым блоком асм инструкций будет описание что он делает на Си
    5) оформляешь всё как тебе надо и готово ))

    Главное отключить оптимизацию, а то потом в коде хрен разберешься
     
  3. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Теперь автор создаст несколько тем. Некоторые из них: "как на Си посчитать факториал", "как выключить оптимизацию", "как включить вывод в файл..." и т.д..
     
    #3 Jakeroid, 11 May 2012
    Last edited: 11 May 2012
  4. sss-777

    sss-777 New Member

    Joined:
    30 Apr 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    я не знаком с языком C, вобще..
    Примерный код из инета:

    masm
    model small
    stack 256
    .data
    pole db ?
    stroka db 0ah, 0dh, 'output:$', 0ah, 0dh
    .code
    start: mov ax, @data
    mov ds, ax

    mov ah, 01h
    int 21h ;вводим число

    mov ah, 09h
    lea dx, stroka
    int 21h ;выводим строку output:
    xor dx, dx

    xor ah, ah
    and ax, 0f0fh
    aad ;преобразовали в двоичное число

    mov pole, al ;запомнили это число

    ;сам процесс вычисления факториала
    mov bx, 1
    mov dx, bx

    m: mov ax, bx
    mul dl
    mov bx, ax
    inc dl
    cmp pole, dl
    jne m
    ;конец процесса вычисления факториала

    mov ax, bx ;теперь в ax факториал
    aam
    or ax, 3030h ;преобразуем его в символьный формат
    mov bx, ax
    mov ah, 02h
    mov dl, 0ah
    int 21h
    mov dl, 0dh
    int 21h
    mov dx, bx
    rol dx, 8
    int 21h
    rol dx, 8
    int 21h

    exit: mov ax, 4c00h
    int 21h
    end start

    тут не работает правильно контроль ввода, к тому же не работает до 1000..