Странное поведений AFDPRO

Тема в разделе "WASM.BEGINNERS", создана пользователем bug1z, 31 дек 2010.

  1. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Учу ассемблер по книге Калашникова, только используя не масм, а фасм.
    Столкнулся с такой проблемой. Написал программу:

    Код (Text):
    1. ;--------------[.code section]-----------------------------
    2. org 100h       
    3.             mov dx, messageString
    4.             call outString
    5.             call waitKey
    6.            
    7.             mov dx, messageStringTwo
    8.             call outString
    9.             call waitKey
    10.            
    11.             int 0x20
    12.  
    13. ;---------------------------------
    14.             outString:
    15.                 mov ah, 0x9
    16.                 int 0x21
    17.                 retn
    18. ;---------------------------------         
    19.             waitKey:
    20.                 mov ah, 0x10
    21.                 int 0x16
    22.                 retn
    23. ;--------------------------------- 
    24.            
    25. ;--------------[.data section]-----------------------------
    26. messageString    db 'Enter key...$'
    27. messageStringTwo db 'Ok!$'
    28. ;----------------------------------------------------------
    Запускаю, все работает нормально. Запускаю под АФД и вижу следующее:

    После первого

    Код (Text):
    1. call waitKey
    Выполняется код по адресу, а после программа попадает на F000.

    Почему так?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Используйте TRW2000 или отладчик борланда, насколько помню AFDPRO при старте портит регистры

    для проверки запустите программку под отладчиком и без

    Код (Text):
    1. macro hex2ascii
    2.  {
    3.    cmp  al,10
    4.    sbb  al,69h
    5.    das
    6.  }
    7.  
    8. org 100h
    9. use16
    10.  
    11.   mov [temp_reg], sp
    12.   push ax
    13.   push bx
    14.   push dx
    15.   push cx
    16.   push si
    17.   push di
    18.   push bp
    19.   mov si, (_sp - _ax)
    20.   mov cx, 8
    21.   jmp @do
    22. @@:
    23.   pop [temp_reg]
    24. @do:
    25.   call convert_proc
    26.   mov WORD [_ax+si], ax
    27.   mov WORD [_ax+si+2], dx
    28.   sub si, (_bx - _ax)
    29.   loop @B
    30.  
    31. ; вывод строки
    32.   mov ah, 9
    33.   mov dx, string
    34.   int 21h
    35.   ret
    36.  
    37. convert_proc:
    38.   mov al, BYTE [temp_reg]
    39.   call al2ascii
    40.   mov dx, ax
    41.   mov al, BYTE [temp_reg+1]
    42.   call al2ascii
    43.   ret
    44.  
    45. al2ascii:
    46.   aam 16
    47.   hex2ascii
    48.   xchg al, ah
    49.   hex2ascii
    50.   ret
    51.  
    52. temp_reg  dw  ?
    53.  
    54. string  db 'ax='
    55.    _ax  rb 4
    56.         db 13,10
    57.         db 'bx='
    58.    _bx  rb 4
    59.         db 13,10
    60.         db 'dx='
    61.    _dx  rb 4
    62.         db 13,10
    63.         db 'cx='
    64.    _cx  rb 4
    65.         db 13,10
    66.         db 'si='
    67.    _si  rb 4
    68.         db 13,10
    69.         db 'di='
    70.    _di  rb 4
    71.         db 13,10
    72.         db 'bp='
    73.    _bp  rb 4
    74.         db 13,10
    75.         db 'sp='
    76.    _sp  rb 4
    77.         db '$'