Помогите разобраться, пожалуйста.

Тема в разделе "WASM.BEGINNERS", создана пользователем BlackWolf, 19 янв 2010.

  1. BlackWolf

    BlackWolf New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2010
    Сообщения:
    27
    Разбираюсь с книгой Калашникова - в 14 главе есть описание построения любой рамки, в центре окна.
    Никак не могу разобраться, как изменить процедуру таким образом, чтобы "рисовать" рамку по указанным координатам, а не по центру. Вот код оригинала:

    Код (Text):
    1. Draw_frame proc
    2.      push es          
    3.      push 0B800h      
    4.      pop es          
    5.      mov ax,Height_X  
    6.      shr al,1        
    7.      mov dh,11        
    8.      sub dh,al        
    9.      mov ax,Width_Y  
    10.      shr al,1        
    11.      mov dl,39        
    12.      sub dl,al        
    13.      call Get_linear   
    14.      push di             
    15.      mov ah,Num_attr   
    16.      mov al,218        
    17.      stosw             
    18.      mov al,196        
    19.      mov cx,Width_Y  
    20.      rep stosw         
    21.      mov al,191        
    22.      stosw  
    23.      pop di    
    24.      add di,160
    25.      mov cx,Height_X   
    26. Next_lined:
    27.      push cx       
    28.      push di       
    29.      mov al,179
    30.      stosw
    31.      mov al,32     
    32.      mov cx,Width_Y
    33.      rep stosw     
    34.      mov al,186
    35.      stosw
    36.      pop di
    37.      add di,160    
    38.      pop cx    
    39.      loop Next_lined   
    40.      mov al,192    
    41.      stosw
    42.      mov al,196
    43.      mov cx,Width_Y
    44.      rep stosw
    45.      mov al,217
    46.      stosw
    47.      pop es    
    48.      ret
    49. Draw_frame endp
    50. Get_linear proc
    51.     push ax
    52.     push bx
    53.     push dx
    54.     shl dl,1    .
    55.     mov al,dh  
    56.     mov bl,160 
    57.     mul bl 
    58.     mov di,ax  
    59.     xor dh,dh  
    60.     add di,dx  
    61.     pop dx 
    62.     pop bx
    63.     pop ax
    64.     ret
    65. Get_linear endp
     
  2. BlackWolf

    BlackWolf New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2010
    Сообщения:
    27
    P.S Не в центре окна, а в центре экрана, конечно же, сорри за опечатку)).
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Вроде по-русски написано. Центр в 11-й строке у него и 39-м столбце.
    Т.е. если знаешь координаты левого верхнего угла, то надо просто в DH его записать. Все упрощается.
     
  4. BlackWolf

    BlackWolf New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2010
    Сообщения:
    27
    Спасибо,большое,разобрался ) Все ,действительно, оказалось просто и понятно)