如何处理在另一个模块中声明的段?

时间:2018-01-31 14:40:28

标签: assembly masm x86-16

到现在为止,如果我想解决在另一个段中声明的一些var和/或在同一个段中但在不同的模块中声明的一些var,我只是使用public / extrn对来逃避它。 / p>

; declaring module .asm
public some_var
otherseg segment para public 'code'
    some_var db ?
otherseg ends

; referencing module .asm
extern some_var:byte
otherseg segment para public 'code'
    test_proc proc
        mov ax, [some_var]
    test_proc endp
otherseg ends

但是现在我需要访问int向量表以及BIOS / DOS程序存储器的其他部分,所以我宣布了一个' AT'像这样的片段:

memmap segment public at 0000h
    ; some int vector addresses I'll be using.
    org 13h * 4
    orig_int_13h dw ?

    ; BIOS addr

    ; other interesting memory addrs

    ; graphic memory
    org 0B800h
    text_mode_base_addr dw ?

memmap ends

问题在于,它已在另一个文件中声明,我不知道如何让它可以从我引用的模块中看到。

; read some vector addr
mov ax, offset memmap  ; error memmap no declared
mov es, ax
mov bx, es:[text_mode_base_addr]  ; reads top left character in the screen

如果我在同一个文件中声明AT段,它将起作用。

如何使用在另一个文件中声明的片段? 请注意,我不想使用' include'魔法。

0 个答案:

没有答案