Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Сегментация и заполнение сегментных регистров.tasm


Автор: En_t_end 4.8.2006, 15:43
Код

;Data segment
data segment para public "data"
message db "Hello World$"
on_close db "Press any key for continue...$"
end_line db 10,'$'
data ends
;
;Stack segment
stk segment stack
db 4 dup ("?")
stk ends
;
;Code segment
code segment para public "code"
main proc
    ;Fill segment registers:
    assume cs:code,ds:data,ss:stk
    mov ax,data;
    mov ds,ax
    ;
    ;Begin ds:message on output
    mov ah,9
    mov dx,offset message
    int 21h
    ;End output
    ;
    mov ah,9
    mov dx,offset end_line
    int 21h
    ;
    mov ah,9
    mov dx,offset on_close
    int 21h
    ;
    mov ah,1h
    int 21h
    ;
    ;End programm,return control to OS
    mov ax,4c00h
    int 21h
    ;End
main endp
code ends
end main

Меня интересует, что же делает assume на самом деле ? Если эта операция связывает сегментные регистры с сегментами, то тогда зачем вручную заполнять ds ?

Автор: AlexST 5.8.2006, 15:24
Директивой Assume  программист лишь устанавливает соответствие между сегментными регистрами и сегментами. Тем самым получая право не указывать префиксы в большинстве команд (их самостоятельно восстановит ассемблер). Директива не загружает в регистры начальные адреса сегментов, такая загрузка делается отдельно.

Автор: En_t_end 5.8.2006, 16:32
AlexST, 
Спасибо... это именно то что я хотел услышать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)