На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> как бы мне устроить обработку строку содержащюю ip аддресс
    кто-нибудь помогите устроить обработку ip адресса :
    как её разделить на части(192.168.11.20 на переменные равные 192,168,11,20)
    потом как проверить строку с ip на провильность(например если она равна 678.789.YYY.23 то-есть это не правельный ip)
      ip адрес передается/принимается в виде 32-битной величины (одно НО: в сетевом представлении, то есть если ip = 192.168.1.80, то в памяти будет 0x5001A8C0 !!!). Так что уже все разбито
        а как проверить строку на правельность?
          а в чем сложность то ??? бери отдельные октеты и сравнивай
            извините за ламеризм но не мог бы кто-нибудь дать исходник, а?
              Мог бы.....
              Только это для 16 бит.....
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;; Преобразование строки IP-адреса в число (by 7in) ;;
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              .MODEL Tiny,Pascal ; Обратите внимание!
              .486
              .CODE
              ORG 100h ; COM-программа
              SMART
              Start:
              ;
              ; Пример преобразует строку в число и выводит байты в виде символов на экран
              ;
              ;-- Начало примера ----------------------------------------------------------;
              push ds
              lea ax,IP
              push ax
              call ProcessIP
              jnc Ok
              xor eax,eax ; Если ошибка, просто заносим нули...
              Ok:
              int 29h ; Выводит на экран символ с кодом AL
              mov al,ah
              int 29h
              shr eax,16
              int 29h
              mov al,ah
              int 29h
              int 20h ; Выходим из программы
              IP DB '1.2.3.4',0
              ;-- Конец примера :) --------------------------------------------------------;
              ; На входе: адрес ASCIIZ-строки (в стеке)
              ; На выходе: IP-адрес в EAX (первое число в AL) и флаг CF сброшен
              ; ...или... флаг CF установлен, если ошибка
              ProcessIP proc
              arg String:DWORD ; В 32-х битах здесь будет :PWORD (вроде)
              uses DS ; Если DS жалко терять :)
              cld
              lds si,String ; В 32-х: lds esi,String
              xor edx,edx ; Здесь временно будет IP
              mov cx,10
              mov ax,'.' ; Чтобы сработала ошибка, если в начале точка
              @@NextNumber:
              cmp ah,'.'
              je @@Error ; В начале (или после точки) не может быть точки
              ror edx,8 ; Следующий байт
              xor bx,bx ; BX - текущее число
              inc ch ; CH - счетчик чисел
              @@NextDigit:
              mov dl,bl ; Сохраним пока то число, которое есть
              mov ah,al ; Сохраняем предыдущий байт
              lodsb ; Читаем следующий байт в AL
              or al,al
              jz @@End ; Если это ноль, то на завершение
              cmp al,'.'
              je @@NextNumber ; Если точка, то начинаем следующее число
              ; Переводим новую цифру
              sub al,'0' ; AL=0..9 (если это цифра)
              cmp al,9
              ja @@Error ; Это не цифра...
              xchg ax,bx ; AH,AL сохраняем в BX, а BX -> AX
              mul cl ; Умножаем AL на 10
              or ah,ah
              jnz @@Error ; Если число >= 260, то ошибка
              xchg bx,ax ; Меняем BX и AX
              add bl,al ; Добавляем цифру
              jc @@Error ; Если число = 256..259, то ошибка
              jmp @@NextDigit ; Следующая цифра
              @@End:
              cmp ah,'.'
              je @@Error ; В конце не может быть точки
              cmp ch,4
              jne @@Error ; Чисел должно быть 4 !
              ror edx,8 ; Прокручиваем последний раз
              xchg eax,edx ; Записываем IP в EAX
              clc ; CF=NC=0 - ошибки нет
              mov dl,? ; Это просто небольшой трюк...
              ORG $-1 ; ...аналогично jmp @@Exit, но на байт меньше :)
              @@Error: stc ; CF=CY=1 - ошибка есть
              @@Exit: ret
              ProcessIP endp
              END Start
                Большое спасибо
                ты мне очень помог!!!!
                тханкс!!
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0363 ]   [ 15 queries used ]   [ Generated: 25.04.24, 09:56 GMT ]