Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Подскажите где ошибка!


Автор: HellanD 17.6.2006, 13:31
Посмотрите код
Код

         .model tiny                     ;
         .code                           ;
          org  100h                      ;
start:   mov     ah,9                    ;
         mov     dx,offset message       ;
         int     21h                     ;
         ret                             ;
message         db  "Hello world!",0Dh,0Ah,'$';
         end     start                   

Он должен выводить фразу Hello world!, и он ее выводит! но со странными иероглифами и даже более того выводит ее в цикле до тех пор пока не выдается сообщение об ошибке!!! 

Автор: Mysterio 17.6.2006, 14:10
Ето com.(самая распространённая ошибка).  Если ошибка не в этом, тогда для exe(никогда не уважал модели): 

Код


DATA SEGMENT
 TEXT DB 'HELLO,HELLO',10,13,'$'
DATA ENDS

CODE SEGMENT
 ASSUME CS:CODE, DS:DATA

BEGIN:

 MOV AX,DATA
 MOV DS,AX

 LEA DX,TEXT
 MOV AH,9
 INT 21H

 MOV AH,0
 INT 16H

 MOV AH,4CH
 INT 21H



CODE ENDS
END BEGIN

 

Автор: HellanD 17.6.2006, 18:03
Цитата

Ето com.(самая распространённая ошибка). 

Спасибо за ответ!
но что имеется ввиду? Да это програма com файла! Подскажите подробнее в чем дело! Неед хелп! 

Автор: Akina 17.6.2006, 21:23
Замени в конце программы ret на

Код

mov ax,4C00h
int 21h


или 

Код

xor ah,ah
int 21h


или хотя бы

Код

int 20h
 

Автор: HellanD 18.6.2006, 09:32
Спасибо за ответ! Помоголо такое:
mov ax,4C00h
int 21h
вместо ret
хотя и здесь есть нечто странное! Цикла до ошибки уже нет, а выводится одна фраза "Hello world!", а вернее еще перед ней какието значки и смайлики! Что это и как с этим бороться!!!
А две последние рекомендациии дали ошибку вида:
16-разрядная подсистема МС-ДОС:
С:\windows\system32\cmd.exe
Процессор NTVDM обнаружил недопустимую инструкцию.CS:0000 IP:0077 OP:f0 37 05 10 02....  
ПОМОГИТЕ РАЗОБРАТЬСЯ 

Автор: Mysterio 18.6.2006, 13:51
HellanD, 
Цитата(HellanD @  18.6.2006,  09:32 Найти цитируемый пост)
С:\windows\system32\cmd.exe

А, ну если у тебя NT, тогда всё понятно.  smile 

Где "это com", имелось ввиду, что компилить ея надо с ключом tlink.exe [filename.obj] /t . Exe действительно будет зацикливать программу, хотя бы по причине org 100h и ret'a;

Цитата(HellanD @  18.6.2006,  09:32 Найти цитируемый пост)
хотя и здесь есть нечто странное! Цикла до ошибки уже нет, а выводится одна фраза "Hello world!", а вернее еще перед ней какието значки и смайлики! Что это и как с этим бороться!!!


Убирай к ч.м. org 100h, ибо компилируется exe файл.  Или тогда пиши так: 
Код

         .model tiny                     ;    
         .code                           ;    
        org  100h                      ;    
message         db  "Hello world!",0Dh,0Ah,'$';    
start:  

         mov     ah,9                    ;    
         mov     dx,offset [message+100h]       ;    
         int     21h                     ;    

        mov ax , 4c00h
        int 21h


         end     start                


 "Значки" это и есть твоя небольшая программа и то что было в памяти. (если добавишь ключ, тогда строку message - в сегмент перед концом программы.)



Akina, 
Цитата(Akina @  17.6.2006,  21:23 Найти цитируемый пост)
или 
xor ah,ah    
int 21h

С какой целью сбрасывать ah для  int 21h ???
 

Автор: HellanD 18.6.2006, 14:47
Благодарю за исчерпываюший ответ!
У меня ХП 
А что значит
Цитата

А, ну если у тебя NT, тогда всё понятно.

Имеется ввиду что что на блокирует инструкции АСМ?
 

Автор: HellanD 18.6.2006, 15:15
Цитата

Убирай к ч.м. org 100h, ибо компилируется exe файл.  Или тогда пиши так: 
код Ассемблера 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

          .model tiny                     ;    
         .code                           ;    
        org  100h                      ;    
message         db  "Hello world!",0Dh,0Ah,'$';    
start:  

         mov     ah,9                    ;    
         mov     dx,offset [message+100h]       ;    
         int     21h                     ;    

        mov ax , 4c00h
        int 21h


         end     start                

 
 



 "Значки" это и есть твоя небольшая программа и то что было в памяти. (если добавишь ключ, тогда строку message - в сегмент перед концом программы.)

Слушай работает просто супер! А как это работает????! В чем разница? 

Автор: HellanD 18.6.2006, 19:42
Это КОМ!!smile
Спасибо за помощь! Все пашет теперь на все 100%!!!
Можна еще вопрос! Что это за деректива ret, и чего она циклит exe-шник??? 

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