опять регистры

Discussion in 'WASM.BEGINNERS' started by rubic_, Aug 10, 2007.

  1. rubic_

    rubic_ Женя

    Blog Posts:
    0
    Joined:
    Jul 9, 2007
    Messages:
    121
    Location:
    Омск
    Code (Text):
    1. .model tiny
    2.     .code
    3.     .386
    4.     org 100h
    5.  
    6. start:  mov ax,0003h
    7.     int 10h
    8.     cld
    9.    
    10.     mov eax,1F201F00h
    11.     mov bx,0f20h
    12.     mov cx,255
    13.     mov di,offset tableAS   ;начало таблицы ES:DI
    14.  
    15.  
    16. for:    stosd
    17.     inc al
    18.     test    cx,0Fh
    19.     jnz jump
    20.     push    cx
    21.     mov cx,80-32
    22.     xchg    ax,bx
    23.     rep stosd
    24.     xchg    bx,ax
    25.     pop cx
    26. jump:
    27.     loop    for
    28.     stosd
    29. ; вывод на экран
    30.     mov ax,0B800h
    31.     mov es,ax
    32.     xor di,di
    33.     mov si,offset tableAS
    34.     mov cx,15*80+32
    35.     rep movsw
    36.     ret
    37. tableAS:       
    38.     end start
    читаю Зубкова...расмотрел следующий пример и возник вопрос.
    DS,ES,GS,FS - регистры сегментов данных...есть у этих регистров индивидуальные предназначения..
    или по функциональности они одинаковы...
    почему автор в этом примере берет комбинацию DS:SI и ES:lol: I, а не скажем FS:SI и GS:lol: I (смещение используестся
    SI и DI потому, что они являются источником и приемником?)
     
  2. rudik

    rudik Руденко Артём

    Blog Posts:
    0
    Joined:
    Dec 6, 2006
    Messages:
    302
    Location:
    г. Харьков
    Всё просто. Процессор автоматически использует [DS:SI] и [ES:lol: I] как входной и выходной буфера для строковых операций и по другому в строковых операциях нильзя. В обыкновенных операциях mov-add можеш делать [FS:SI] и [GS:lol: I].
     
  3. Ustus

    Ustus New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2005
    Messages:
    834
    Location:
    Харьков
    Потому что так решил Intel и все кто за него :)
    в строковых командах источник в DS:[SI], причем допускается переопределение сегмента, а приемник - в ES:[DI], причем переопределение сегментного регистра не допускается.

    не успел... :dntknw: как всегда :):):)
     
  4. rubic_

    rubic_ Женя

    Blog Posts:
    0
    Joined:
    Jul 9, 2007
    Messages:
    121
    Location:
    Омск
    голова кругом...