Загрузка...

Нужна помощь TASM 8086

Тема в разделе Реверсинг / Assembler создана пользователем soulgoodman001 4 окт 2023. 171 просмотр

Загрузка...
  1. soulgoodman001
    soulgoodman001 Автор темы 4 окт 2023 0 11 авг 2023
    Нужно вычислить выражение

    [IMG]
    [IMG]
    По таким шагам
    [IMG]
    Начиная с 51 строки в расчете начинаются ошибки
    Код

    stk segment stack
    db 128 dup(?)
    stk ends


    data segment para public 'data'

    a dw -170
    b dw 45
    c dw 5000
    d dw 2
    result dw ?

    data ends


    code segment para public 'code'
    assume cs:code, ds:data, ss:stk
    begin:
    mov ax, data
    mov ds, ax

    mov ax, a
    idiv d ; AX = a / d

    mov bx, ax
    mov ax, d

    add ax, bx ; AX = d + (a / d)

    mov cx, ax

    mov ax, a
    add ax, d ; AX = a + d

    mov bx, ax

    mov ax, c
    idiv bx ; AX = c / (a + d)

    mov dx, ax

    mov ax, b
    sub ax, dx ; AX = b - (c / (a + d))

    mov bx, ax

    mov ax, cx ; AX = d + (a / d)

    ; с этой строки неправильный расчет
    cwd
    idiv bx ; AX = (d + (a / d)) / (b - (c /(a + d)))

    add ax, 10 ; AX = (d + (a / d)) / (b - (c / a(a + d))) + 10
    mov result, ax

    mov dx, result
    add dl, 30h
    mov ah, 2
    int 21h


    mov ax, 4C00h
    int 21h
    code ends
    end begin
    В чем может быть ошибка?
     
    4 окт 2023 Изменено
    1. Президент
      soulgoodman001,


      Код
      stk    segment stack
      db 128 dup(?)
      stk ends


      data segment para public 'data'

      a dw -170
      b dw 45
      c dw 5000
      d dw 2
      result dw ?

      data ends


      code segment para public 'code'
      assume cs:code, ds:data, ss:stk
      begin:
      mov ax, data
      mov ds, ax

      mov ax, a
      idiv d ; AX = a / d

      mov bx, ax
      mov ax, d

      add ax, bx ; AX = d + (a / d)

      mov cx, ax

      mov ax, a
      add ax, d ; AX = a + d

      mov bx, ax

      mov ax, c
      idiv bx ; AX = c / (a + d)

      mov dx, ax

      mov ax, b
      sub ax, dx ; AX = b - (c / (a + d))

      mov bx, ax

      mov ax, cx ; AX = d + (a / d)

      cwd
      idiv bx ; AX = (d + (a / d)) / (b - (c /(a + d)))

      add ax, 10 ; AX = (d + (a / d)) / (b - (c / (a + d))) + 10
      mov result, ax

      mov dx, result
      add dl, 30h
      mov ah, 2
      int 21h


      mov ax, 4C00h
      int 21h
      code ends
      end begin
  2. БиполяркаТолика
    неправильный расчет из-за того, что ты неправильно подставил? или просто неправильный расчет.
     
Top