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


Автор: Joker07 7.7.2008, 16:32
Есть программа. Ее цель -  передать, принять и напечатать строку символов произвольной длины ( до 100 символов ).
Сама программа состоит из двух файлов - сервер и клиент.
Моя цель - разобраться в ней, т.к. мне ее переделывать придется (под что пока незнаю).
Поюзал инет, методички, но все равно мало понял. Помогите понять работу хотя бы сервера, в комментах вы найдете вопросы, очень прошу.
Код

data segment
    length db 100
    flength db ?
    buffer db 100 dup(?)
    mess1 db 10,13,'nzmite lubuu klavishu$'
    mess2 db 10,13,'vedite stroku',10,13,'$'
data ends
code segment
    assume cs:code, ds:data
start:    
init:    mov ax, 040h ; начала базового адреса порта
    mov ds, ax
    mov dx, ds:[0000]
    add dx, 3; устанавливаю порт-сервер com 3, так?
    mov al, 10000000b ;  вызов какой-то функции ? Какой?
    out dx, al;  ????
    nop
    mov ax, 417h;  определяет нажат ли Shift?
    sub dx, 3; в dx теперь 0... зачем? 
    out dx, al; зачем?
    nop
    nop
    mov al, ah; ?
    inc dx; зачем?
    out dx, al; ?
    nop
    inc dx; ?
    inc dx; ?
    mov al, 00000011b ; ??
    out dx, al; ??
    nop
    nop
    sub dx, 2; ?
    xor al, al; обнуляем al? зачем?
    out dx, al; опять ?
    nop
    dec dx; зачем?

    mov dx, ds:[0000]; устанавливаем начало  данных на 0000
    push dx; сохраняем  данные
    mov ax, data
    mov ds, ax
    
    mov ah, 9;  запуск функции вывода сообщения
    lea dx, mess2 ; получение адреса сообщения
    int 21h ; вывод
    
    mov ah, 0ah; определяет позицию курсора?
    lea dx, length; ; получение адреса длины буфера для ввода символов
    int 21h
    
    pop dx; восстанавливаем данные
    add dx, 5; зачем??
lop1:    in al, dx; ???
    nop
    cmp al, 01100000b; если в al 0110000b (а что это?)
    jne lop1; то переход на lop1
    sub dx, 5; ?
    mov al, flength; зачем?
    out dx, al; ?
    
    mov cl, flength; зачем?
    xor ch,ch; обнуление ch, зачем?
    lea si, buffer; получение адреса начала буфера
        
send:    add dx, 5 ; зачем?
lop:    in al, dx; ?
    nop
    cmp al, 01100000b; ?
    jne lop

    sub dx, 5
    mov al,ds:[si];  ?
    inc si; зачем?
    out dx, al; 
    nop    
    loop send; повтор от метки send
    mov ax, data
    mov ds, ax
quit:    mov ah, 9; выход из Доса
    lea dx, mess1
    int 21h
    mov ah, 8
    int 21h
    mov ax, 4c00h
    int 21h
code ends
end start


Автор: cardinal 7.7.2008, 18:11
Первая твоя задача это вообще разузнать зачем все это на стороне компьютера гоношить на асме и через ДОС. smile ИМХО это уже даже в учебных целях нафиг не нужно...

Автор: Joker07 7.7.2008, 18:37
cardinal, согласен. Ну нафига сейчас изучать такую древность как com-порты, да еще под дос... Тем более, что сейчас можно взять хоть С, хоть делфи и сделать все это ну намного, намного проще и быстрее, используя уже готовые компоненты. 
НО, сдавать то все рано надо... Препод просто фанат tasm, особенно под дос... 

Автор: cardinal 7.7.2008, 18:57
Цитата(Joker07 @  7.7.2008,  17:37 Найти цитируемый пост)
Ну нафига сейчас изучать такую древность как com-порты, да еще под дос...

Не я имел в виду именно ДОС и асм для работы с com-портами на стороне компа. Я не говорил, что com-порты отжили свое - они до сих пор нужны и имеют свои преимущества. А вот ДОС свое отжил...

А так могу посоветовать почитать
user posted image
http://www.williamspublishing.com/Books/5-8459-0332-7.html

Автор: Joker07 7.7.2008, 19:58
Цитата(cardinal @ 7.7.2008,  18:57)

Я не говорил, что com-порты отжили свое - они до сих пор нужны и имеют свои преимущества.

А зачем сейчас используются com-порты?
Цитата(cardinal @ 7.7.2008,  18:57)
А так могу посоветовать почитать

Да, щас пойду читать... Сдавать надо завтра уже... Голова болит уже... Хорошо хоть все работает, осталось токо понять как...

Автор: cardinal 7.7.2008, 22:08
Цитата(Joker07 @  7.7.2008,  18:58 Найти цитируемый пост)
А зачем сейчас используются com-порты?

Для отладки. Собирая устройство на мк ты ведь хочешь как можно быстрее начать хоть как-то научится им управлять. Вот самое быстрое решение это RS-232.
Цитата(Joker07 @  7.7.2008,  18:58 Найти цитируемый пост)
Да, щас пойду читать... Сдавать надо завтра уже...

А ко мне какие претензии? smile 

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