Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение строчных букв на заглавные в PSP 
V
    Опции темы
Kosya4ok
Дата 29.1.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Всем добрый  вечер!
Возникла следующа задача. Требуется переписать параметры командной строки (начинаются с адреса 80h) которые вводятся строчными буквами  и преобразовать из в заглавные буквы. В инете нашел что 5 бит для заглавных равен 0, а для строчных 1.

Биты:  76543210          Биты:  76543210
               Буква A:  01000001       Буква a:  01100001
               Буква Z:  01011010       Буква z:  01111010

Код


len_par_addr  EQU        80H

DATA          SEGMENT
  str_par       DW        80 DUP (?)
  num_par     DB         0
DATA          ENDS

                ASSUME     CS:CODE,DS:DATA,ES:DATA,SS:NOTHING

begin:
  mov       ax,DATA           
  mov       ES,AX             

  mov       di,OFFSET str_par 
  mov       si,len_par_addr   
  mov       cl,[si]          

  cmp       cl,0
  je         @900             

  mov       ch,0                                  
  inc         si

  cmp      si,61h
  and      si,11011111b
  mov      ax,si

  cld                          
  rep movsb     
                                
  mov        DS,AX             

@900:
  mov      al,num_par
  mov      ah,4ch
  int      21h

Где я не правильно понимаю?
PM MAIL   Вверх
Mikl_
Дата 29.1.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Код

;A = 41h Z=5Ah a=61h z=7Ah
mov di,offset dest
mov si,offset src
cld 
a0: lodsb
test al,al; конец строки?
jz exit
cmp al,'a'
jb a1; в AL не строчная буква
cmp al,'z'
ja a1; в AL не строчная буква
and al,11011111b; строчные буквы преобразуем в прописные
a1: stosb
jmp a0
exit: stosb 


Это сообщение отредактировал(а) Mikl_ - 29.1.2008, 11:17
PM MAIL   Вверх
Kosya4ok
Дата 8.2.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Спасибо за ответ. Но я уже немного раньше нашел кусок на асме по преобразованию символом из строчных в заглавные (например Юров) и дописал программу. Задача теперь стоит так. Свзяать кусочек преобразования символов
Код

data segment
n equ 10
stroka db "acvfgrndup"
data ends
code    segment 
    assume cs:code, ds:data, es:data, ss:nothing

start:
    mov ax,data
    mov ds,ax
    xor ax,ax

    mov cx,n
    lea bx,stroka
@m1:    mov al,[bx]
    cmp al,61h
    jb @next
    
    cmp al,71h
    ja @next
    
    and al,11011111b
    mov [bx],al
@next:    
    inc bx
    dec cx
    jnx @m1

@exit:
    mov ax,4c00h
    int 21h
code ends
end start

с кусочком который читает из PSP. См. выше...
PM MAIL   Вверх
Akina
Дата 9.2.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(Kosya4ok @  29.1.2008,  01:17 Найти цитируемый пост)
Требуется переписать параметры командной строки (начинаются с адреса 80h)

81h

Цитата(Kosya4ok @  9.2.2008,  00:26 Найти цитируемый пост)
Задача теперь стоит так. Свзяать кусочек преобразования символов с кусочком который читает из PSP. См. выше... 

Код

cseg segment
assume cs:cseg

start:

   push ax
   push ds
   push es
   push si
   push di
   push cx

   mov ah,51h
   int 21h   
   mov ds,bx
   mov es,bx
   mov si,80h
   cld
   lodsb
   cbw
   mov cx,ax
   mov di,si
lbl1:
   lodsb
   cmp al,'a'
   jb lbl2
   cmp al,'z'
   ja lbl2
   and al,11011111b
lbl2:
   loop lbl1

   pop cx
   pop di
   pop si
   pop es
   pop ds
   pop ax

; в этот момент параметры "капитализированы"
; можно выполнять остальной код

   ret 

cseg ends
end start



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kosya4ok
Дата 9.2.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Ээээ...Спасибо конефно за ответ. но с каким образом мона скушать ваш код?  smile 
Вашу вставку в какой фрагмент кода требуется вставить?Или он получается как самодостаточная программа? Я просто не сильно шарю в асме, но ваш код мне пока что абсолютно не понятен кроме некоторых моментов. Вы бы не могли более продробно объяснить что с ним делать и куда вставлять?
PM MAIL   Вверх
Akina
Дата 10.2.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(Kosya4ok @  10.2.2008,  00:59 Найти цитируемый пост)
Вашу вставку в какой фрагмент кода требуется вставить?Или он получается как самодостаточная программа?

Ввел обрамление. Теперь это полностью самостоятельная программа. Место вставки остального кода также указано.
Обрамление следует откорректировать под свои нужды.
Цитата(Kosya4ok @  10.2.2008,  00:59 Найти цитируемый пост)
Я просто не сильно шарю в асме

Может, хватит плакаться?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kosya4ok
Дата 14.2.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



А как наглядно можно посмотреть что программа правильно перевела параметры в верхний регистр?
Например в моей программы это позволили делать верхний код...
PM MAIL   Вверх
Akina
Дата 15.2.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Код

cseg segment
assume cs:cseg

   org 100h

start:

   push ax
   push ds
   push es
   push si
   push di
   push cx

   mov ah,51h
   int 21h   
   mov ds,bx
   mov es,bx
   mov si,80h
   cld
   lodsb
   cbw
   mov cx,ax
   mov di,si
lbl1:
   lodsb
   cmp al,'a'
   jb lbl2
   cmp al,'z'
   ja lbl2
   and al,11011111b
lbl2:
   stosb
   loop lbl1

   pop cx
   pop di
   pop si
   pop es
   pop ds
   pop ax

; в этот момент параметры "капитализированы"
; можно выполнять остальной код

   mov ah,51h
   int 21h   
   mov ds,bx
   mov bx,80h
   mov dx,bx
   add bl,ds:[bx]
   inc bl
   mov byte ptr ds:[bx],'$'
   inc dx
   mov al,9
   int 21h

   ret 

cseg ends
end start



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
fish9370
Дата 27.2.2008, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: нет
Всего: 1



Цитата(Kosya4ok @ 14.2.2008,  23:17)
А как наглядно можно посмотреть что программа правильно перевела параметры в верхний регистр?
Например в моей программы это позволили делать верхний код...

я бы посоветовал обзавестись дебаггером, в свое время их под дос было навалом..


2Akina, насколько я помню, 51h функция в свое время была недокументированна? но через нее можно было выйти на цепочку mcb,  и получить кучу другой полезной информации.. поправь если забыл..

Это сообщение отредактировал(а) fish9370 - 27.2.2008, 00:55


--------------------
undefined
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.