Что означают команды ассемблера (из фрагмента программы)?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Kroleg, 28 июн 2011.

  1. Kroleg

    Kroleg New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2011
    Сообщения:
    7
    Вот этот фрагмент мне понятен (решение выражения (D^2-A)^2\(A^2+B)-20):

    mov ax,A
    mul ax
    add ax,B
    mov bx,ax
    mov ax,D
    imul ax
    sub ax,A
    mul ax
    div bx
    sub ax,20
    mov rez, ax

    А вот когда выводим результат вообще ничего не понятно. Можете кто-то построчно объяснить что к чему?
    ;-------------------------------------------------------------------------
    ;Вывод результата на экран
    xor cx,cx
    mov bx,10
    mod: xor dx,dx
    div bx
    push dx
    inc cx
    or ax,ax
    jnz mod
    print:
    pop dx
    add dl,30h
    mov ah,2
    int 21h
    loop print
     
  2. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Вам же уже написал на ответах@mail.ru))))) И еще не плодите тут кучу тем, спрашивайте в какой то одной!
     
  3. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    Ничего они не означают. Это всеголишь поток команд для процессора.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Kroleg
    Что делают команды можно найти в учебниках по ассемблеру. В выводе почти все команды подготовительно-вычислительные, mov ah,2 int 21h по-моему вывод символа. Смысл системного вызова ДОС int 21h тоже можно найти в учебниках. Никто не будет тратить свое время чтобы вам это объяснять.
     
  5. wild_cosine

    wild_cosine New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2010
    Сообщения:
    11
    Kroleg
    первый цикл (mod) переводит число (ax) в десятичную запись справа налево, сохраняя цифры на стеке
    второй цикл (print) печатает цифры из стека, соотвественно, в обратном порядке, т.е. слева направо, т.е. как нам и нужно.

    xor cx,cx ; счетчик цифр
    mov bx,10 ; база системы счисления (десятичная)
    mod: xor dx,dx ; очистка старшего слова перед делением на reg16
    div bx ; try guess
    push dx ; остаток от деления -> в стек
    inc cx ; any ideas?
    or ax,ax ; проверяем, осталось ли что-нибудь в делимом
    jnz mod ; ax is Non Zero -> mod
    print:
    pop dx ; достаем цифру из стека
    add dl,30h ; прибавляем символ нуля ('0' = 30h)
    mov ah,2 ; функция вывода на консоль
    int 21h ; прерывание DOS
    loop print ; цикл, уменьшает cx, и обрывается как только cx == 0

    С уважением, КО.
     
  6. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735