2013-06-16 2 views
4

Я написал следующий код:Странные символы в сборке?

.386 
.model small 
.stack 100h 

.data 
    text db "Paper",0 
.code 
    start : 

    lea dx , text 
    mov ah , 9h 
    int 21h 

    mov ah , 4ch 
    int 21h 

    end start 

    end 

проблема заключается в том, что показывает странные символы с правыми предложениями в середине, что именно проблема?

+2

DS: DX = указатель на строку, заканчивающуюся на «$» –

+0

, можете ли вы объяснить немного дальше? – user22323

+3

Я не могу удержаться от запроса: зачем вам пытаться изучить сборку в 16 бит в 2013 году? –

ответ

3
; your code 
start: 
mov ax, @data 
mov ds, ax 
;your code 

Я думаю, что решит вашу проблему. Dos, при загрузке .com-файла, устанавливает cs = ds = es. Не так при загрузке .exe формат cs указывается на ваш код, конечно, но dses?) Указаны на вашем PSP (префикс сегмента программы), который обычно не там, где живут ваши данные ... Вы должны настройте dses, если вы собираетесь использовать его) самостоятельно.

«Зачем изучать 16-битную сборку?» это хороший вопрос. «Зачем учиться собранию вообще?» это еще один хороший вопрос. Скорее всего, вы никогда не напишете ничего «серьезного» с ним. Но это позволяет вам узнать, что происходит «под капотом» таким образом, что HLL не будет, а 16-разрядный позволяет понять сегментированную модель памяти. 32-разрядный код также сегментирован, но в то время как сегменты «разные», они обычно указывают на одну и ту же память, и вы можете вообще игнорировать их - ОС заботится обо всем, что для вас.

Кроме того, некоторые из нас достаточно сумасшедшие, чтобы думать, что это весело!