Code (Text): .model tiny .code .386 org 100h start: mov ax,0003h int 10h cld mov eax,1F201F00h mov bx,0f20h mov cx,255 mov di,offset tableAS ;начало таблицы ES:DI for: stosd inc al test cx,0Fh jnz jump push cx mov cx,80-32 xchg ax,bx rep stosd xchg bx,ax pop cx jump: loop for stosd ; вывод на экран mov ax,0B800h mov es,ax xor di,di mov si,offset tableAS mov cx,15*80+32 rep movsw ret tableAS: end start читаю Зубкова...расмотрел следующий пример и возник вопрос. DS,ES,GS,FS - регистры сегментов данных...есть у этих регистров индивидуальные предназначения.. или по функциональности они одинаковы... почему автор в этом примере берет комбинацию DS:SI и ESI, а не скажем FS:SI и GSI (смещение используестся SI и DI потому, что они являются источником и приемником?)
Всё просто. Процессор автоматически использует [DS:SI] и [ESI] как входной и выходной буфера для строковых операций и по другому в строковых операциях нильзя. В обыкновенных операциях mov-add можеш делать [FS:SI] и [GSI].
Потому что так решил Intel и все кто за него в строковых командах источник в DS:[SI], причем допускается переопределение сегмента, а приемник - в ES:[DI], причем переопределение сегментного регистра не допускается. не успел... как всегда