Помогите решить на асм

Тема в разделе "WASM.ASSEMBLER", создана пользователем _ts_, 19 май 2011.

  1. _ts_

    _ts_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2011
    Сообщения:
    5
    У меня 3 задачки и никак не могу решить нормально =( Помогите плиз. У меня опыта нету но имею основу на асм. А так работаю на .Нет платформе.
    Вот и задачки.

    1. (c+4*d-123)/(1-a/2) решить для Byte и Word переменных (2 программы получаеться); Ответы для DB переменных выйдет на DW, а для DW переменных на DD.
    2.
    | (a - b) / a - 3 if a > b
    X ={ 2 if a = 2
    | (a*a*a + 1) / b if a < b
    Решить для signed and unsigned word

    3. Найти произведение элементов массива A = {a}, удов. условию: с <= a <= d
    Решить для signed and unsigned word


    Буду оч благодарен!!!
    Если будет помощь на C++ или на C# помогу!
    Заранее пасиб!!!
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
     
  3. _ts_

    _ts_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2011
    Сообщения:
    5
    3 дня сижу с первой задачкой получился вот что

    для DB
    Код (Text):
    1. title 'lab_1' ; (c+4*d-123)/(1-a/2)
    2. .model small
    3. .data
    4.     a db 6
    5.     c db -3
    6.     d db -3
    7.     r1 dw ?
    8.     r2 dw ?
    9.     r dw ?
    10. .code
    11. start:
    12. mov     ax,@data
    13.         mov     ds, ax                  ;set segment register
    14.        
    15. mov al, d
    16. mov bl, 4
    17. imul bl
    18. mov bx, ax
    19. mov al, c
    20. cbw
    21. add ax, bx
    22. sub ax, 123
    23.  
    24. mov r1, ax  ;  (c+4*d-123)
    25.  
    26. mov ax, 0
    27. mov bx, 0
    28.  
    29. mov al, a
    30. mov bl, 2
    31. idiv bl
    32. cwd
    33. mov bx, ax
    34. mov ax, 1
    35. sub ax, bx
    36. mov r2, ax ; (1-a/2)
    37.  
    38.  
    39. mov ax, r1
    40. mov bx, r2
    41. idiv bx
    42. mov r, ax ; otvet
    43.  
    44. mov     ax,4c00h                ; terminate program
    45. int     21h
    46. end start
    и не правильно работает =)
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    _ts_
    Код (Text):
    1. ; (c+4*d-123)/(1-a/2)
    2. .286
    3. .model tiny
    4. .code
    5. org 100h
    6. start:  mov al,d
    7.     shl al,2
    8.     add al,c
    9.     sub al,123
    10.     mov bl,a
    11.     shr bl,1
    12.     not bl
    13.     cbw
    14.     idiv bl
    15.     cbw
    16.     mov r,ax ; otvet
    17.     ret; terminate program
    18. a db 6
    19. c db -3
    20. d db -3
    21. r dw ?
    22. end start
     
  5. _ts_

    _ts_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2011
    Сообщения:
    5
    не работает. у теа задачка помоему другая. В Турбо Дебаггере сморю ответ другой

    У меня проблема в самом последнем делении. r1 = ff76(-138) and r2 = fffe (-2) када делиться то получаеться r = 8045 а надо r = 0045
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    _ts_
    а о разнице между СОМ и ЕХЕ знаешь?
    Код (Text):
    1. ; (c+4*d-123)/(1-a/2)
    2. .286
    3. .model tiny
    4. .code
    5. org 100h
    6. start:    mov al,d; AL=FD=-3
    7.     cbw; AX=FFFD=-3
    8.     shl ax,2; AX=FFF4=-12
    9.     add al,c; AX=FFF1=-15
    10.     sub ax,123; AX=FF76=-138
    11.     mov bl,a;BL=6
    12.     shr bl,1; BL=3
    13.     neg bl; BL=FD=-3
    14.     inc bl; BL = FE=-2
    15.     idiv bl; AH=00 остаток AL=45h=69 частное -138/(-2)=69
    16.     cbw ; AX=45h
    17.     mov r,ax ; otvet
    18.     ret; terminate program
    19. a db 6
    20. c db -3
    21. d db -3
    22. r dw ?
    23. end start
     
  7. _ts_

    _ts_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2011
    Сообщения:
    5
    Mikl___
    а остальные как решить ?
     
  8. _ts_

    _ts_ New Member

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

    для DW сделал

    Код (Text):
    1. mov ax,d; AX=FFFD=-3
    2. cwd; AX=FFFD=-3 DX = FFFF = -1
    3. shl ax,2; AX=FFF4=-12
    4. add ax,c; AX=FFF1=-15
    5. sub ax,123; AX=FF76=-138
    6. mov bx,a;BX=6
    7. shr bx,1; BX=3
    8. neg bx; BX=FFFD=-3
    9. inc bx; BX = FFFE=-2
    10. idiv bx; 138/(-2)=69
    11. cwd ; AX=45h
    12. mov word ptr r,ax ; otvet
    13. mov word ptr r + 2,dx ; otvet
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    _ts_ самому. Читать книги, показывать наработки, но готовых решений ты здесь не дождешься