2013-03-05 2 views
0

Я просто новичок в программировании сборки. Это код, который я пытался, но он продолжает возвращать ошибку.Нужна помощь в отношении программы masm32

Ошибка:

F:\masm32\bin>ml PRINTSTRING.ASM 
Microsoft (R) Macro Assembler Version 6.14.8444 
Copyright (C) Microsoft Corp 1981-1997. All rights reserved. 
Assembling: PRINTSTRING.ASM 
PRINTSTRING.ASM(35) : fatal error A1010: unmatched block nesting : data 

Моя программа:

;Print a String 

data segment 
;add your data here 
mymessage db"Enter your data $" 
end 

stack segment 
dw 128 dup(0) 
end 

code segment 
Start: 

;Set Segment Registers 
    mov  ax,OFFSET mymessage 
    mov  ds,ax 
    mov  es,ax 
    lea  dx,mymessage 
    mov  ah,mymessage 
    mov  ah,9 
    int  21h 

    mov  ah,1 
    int  21h 

    mov  ax,4c00h 
    int  21h 

end 
end Start 

Спасибо заранее.

ответ

0

Добавить .model small в качестве первой строки.

+0

F: \ masm32 \ Bin> мл PRINTSTRING.ASM Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. Все права защищены. Сборка: PRINTSTRING.ASM Microsoft (R) Сегментированный исполняемый файл компоновщика 5.60.339 5 декабря 1994 Авторское право (C) Microsoft Corp 1984-1993. Все права защищены. модули Object [.obj]: PRINTSTRING.obj Run File [PRINTSTRING.exe]: "PRINTSTRING.exe" Список файлов [nul.map]: NUL библиотеки [.lib]: Определения Файл [nul.def ]: ССЫЛКА: предупреждение L4021: нет сегмента стека ССЫЛКА: предупреждение L4038: программа не указана @gunner –

0

Во-первых, почему вы делаете 16-разрядную сборку DOS? Сборка 32Bit немного проще!

Это работает:

.model small 
.stack 100h 
.data 
mymessage db 'Enter your data $' 

.code 
start: 
    mov  ax, @data 
    mov  ds, ax 

    lea  dx, mymessage 
    mov  ah, 09h 
    int  21h 

    mov  ah, 1h 
    int  21h 

    mov  ax, 4c00h 
    int  21h 
end start 

Сборка и ссылка:

D:\Projects\DOS>ml /c prateek.asm 
Microsoft (R) Macro Assembler Version 6.15.8803 
Copyright (C) Microsoft Corp 1981-2000. All rights reserved. 

Assembling: prateek.asm 

D:\Projects\DOS>link16 prateek.obj 

Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994 
Copyright (C) Microsoft Corp 1984-1993. All rights reserved. 

Run File [prateek.exe]: 
List File [nul.map]: 
Libraries [.lib]: 
Definitions File [nul.def]: 

D:\Projects\DOS> 

Он прекрасно работает в DOSBox

0

попробовать это

data segment 

;add your data here 

mymessage db"Enter your data $" 

data ends 

stack segment 

dw 128 dup(0) 

stack ends 

code segment 

Start: 


;Set Segment Registers 

    mov  ax,OFFSET mymessage 

    mov  ds,ax 

    mov  es,ax 

    lea  dx,mymessage 

    mov  ah,mymessage 

    mov  ah,9 

    int  21h 


    mov  ah,1 

    int  21h 


    mov  ax,4c00h 

    int  21h 


code ends 

end 
+0

Можете ли вы добавить несколько пояснений к своему ответу? –

 Смежные вопросы

  • Нет связанных вопросов^_^