2016-11-08 12 views
0

Здравствуйте, новый язык ассемблера. Я пытаюсь получить место в памяти для переменных м с помощью DOSBox и MASM compilor Вот кодНайти расположение памяти переменных с использованием языка ассемблера

 .model small 
    .stack 100H 
.data 
    VARA BYTE 10 ;address is DS:xxxx 
VARB BYTE 0BH ;address is DS:xxxx+1 
VARC WORD ? 
    VARD SBYTE ? 
    VARE DWORD ? 
    ARR BYTE 20 DUP(?) 
    VARF SWORD 010B 
    ARRB WORD 10 DUP(?) 
    VARZ BYTE 0 
.CODE 
    MAIN PROC 
    mov ax,@data 
mov ds,ax 
mov ax,offset VARA 
mov ah,09 
int 21h 

mov ax,offset VARB 
mov ah,09 
int 21h 


    mov ax,offset VARC 
mov ah,09 
int 21h 

    mov ax,offset VARD 
mov ah,09 
int 21h 


    mov ax,offset VARE 
mov ah,09 
int 21h 


mov ax,offset ARR 
mov ah,09 
int 21h 


    mov ax,offset VARF 
mov ah,09 
int 21h 

    mov ax,offset ARRB 
mov ah,09 
int 21h 

mov ax,offset VARZ 
mov ah,09 
int 21h 


mov ah,4ch 
int 21h 
main endp 
end main 

Как я могу найти адрес памяти для всех этих переменных? U можно увидеть ошибку в изображении

enter image description here

+0

Вы можете попробовать скомпилировать его с '/ L' опцией командной строки для MASM для создания списка файлов, где я думаю, что адреса будут видны тоже (в виде смещений в сегменте данных абсолютный истинный физический адрес неизвестен до тех пор, пока бинарный файл не будет загружен в память и динамически связан с его целевой позицией от загрузчика). – Ped7g

+1

Об ошибке: измените 'VARA BYTE 10' (спецификатор размера) на' VARA DB 10' (директива define byte) и т. Д. ('DW' для' WORD' и 'SWORD',' DD' для 'DWORD') https://msdn.microsoft.com/en-us/library/8f6k0he8.aspx – Ped7g

+0

@ ped7g после исправления этого на db ошибок нет, но на экране нет вывода – abd

ответ

1

Используйте модификатор OFFSET, например:

mov ax, OFFSET VARA 

загрузить адрес VARA в ax регистр. Вы можете также использовать LEA инструкции для достижения тех же вещей:

lea ax, VARA 
+0

thanx следует использовать это для каждой переменной или только для VarA, а затем для увеличения других адресов? – abd

+0

любезно сообщите мне, что я могу сделать? – abd

+1

@abd обе можно работать. Если вы знаете относительные адреса переменных, обязательно, просто увеличивайте, чтобы получить другие адреса. Лично я просто загружал каждый адрес отдельно. – davmac