Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите доделать программу 
:(
    Опции темы
iveyk
Дата 27.9.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте Уважаемые форумчане,
помогите пожалуйста мне написать програмку. Мне дали такое задание, Нужно написать прогу, которая в введённой строке заменит большие буквы на маленькие, а маленькие на большие, я пробовал сам, вот код:
Код

.DATA segment
   
    pkey db "press any key...$" 
    message1 db "Enter string: $" 
    crlf     db       0Dh,0Ah,'$'  
    buffer   db 121
    rezult db 121
    Klaida db "Error! $"
ends

.STACK segment
    dw   128  dup(0)
ends

.CODE
start:
; set segment registers:
mov ax, @data
mov ds, ax
mov es, ax
;------------------------------------------------------------------------------------
mov       dx,offset message1
mov       ah,9                             ;pe4ataem na ekrane stroku
int       21h           
;--------------------------------------------------------------------------------------------
mov       dx,offset buffer
mov       ah,0Ah                   ;schityvaem stroku s klaviatury v buffer
int       21h               
;---------------------------------------------------------------------------------
mov si, offset buffer        ;uznajom dlinny stroki (etot kusok ja skopiroval z drugogo isxodnika, i    
mov bl, [si+1]                ;nesovsem ponimaju kak eto rabotaet, mozet ktonibut smozet objasnit'?
mov ah, 0
;----------------------------------------------------------------------------------------
mov       dx,offset crlf
mov       ah,9            ;Perevod kursora na druguju strocku
int       21h
;-----------------------------------------------------------------------------------------  
        
tikrink:  
mov al, buffer+2      ;zapisujem v registr al ASCII kod 1 bukvy  
cmp al, 'a'         ;Jesli kod v reg. al mesne od koda bukvy 'a' vozmozno eto bolsaja bukva
jb didzioji         ;perexod na drugoj kusok koda
cmp al, 'z'         ;jesli ASCII kod bolse koda bukvy 'z' to eto ne bukva
ja err              ;perexodim na kod kotoryj otpeciatajet stroku ob osybke
and al, 11011111b   ;izmeniajem malenkuju bukvu na bolshuyu
mov [rezult+1], al  ;zapisujem jejo v rezultat

jg tikrink          ;pereprygujem na nacialo cikla
;---------------------------------------------------------------------------------------- 
didzioji:
        cmp al, 'A'        ;proveriaem bukvy na pravilnost i izmeniajem ix na malenkije
        jb err
        cmp al, 'Z'
        or al, 00100000b
        mov [rezult+2], al  ; zapisujem rezultat

        jg tikrink
        ends didzioji 
;---------------------------------------------------------------------------------------    
err:
    lea dx, klaida
    mov ah,9
    int 21h
    ends err
;--------------------------------------------------------------------------------------
    lea dx, pkey
    mov ah, 9
    int 21h        ; output string at ds:dx
    
    ; wait for any key....    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h ; exit to operating system.
    int 21h  
    ends err
;---------------------------------------------------------------------------------------
 
    ; wait for any key....    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.



Тут код неполный, как дальше я незнаю :( покачто у меня возникли 3 вопроса, первый связан с этим:
Код

mov al, buffer+2 
 при первом проходе цикла всё хорошо, но как сделать чтобы дальше считывать 2,3 итд символы с переменной buffer т.е. как программно изменять эту двойку на тройку итд. плюс тотже вопрос с результатом. еще вопрос, как огранизовать счётчик, чтобы знать сколько раз проганять этот цикл, т.е. как это 
Код
mov si, offset buffer        ;uznajom dlinny stroki (etot kusok ja skopiroval z drugogo isxodnika, i    
mov bl, [si+1]                ;nesovsem ponimaju kak eto rabotaet, mozet ktonibut smozet objasnit'?
mov ah, 0

 использовать в цикле. и последний вопрос, этот код я писал используя програму emu8086, в ней всё нормально компилируется и ехе-шник работает, но при компиляции tasm'ом пишет ошибки:
Turbo Assembler  Version 4.1  Copyright © 1988, 1996 Borland International

Assembling file:   4_2.asm
*Warning* 4_2.asm(1) Reserved word used as symbol: .DATA
*Warning* 4_2.asm(11) Reserved word used as symbol: .STACK
**Error** 4_2.asm(15) Model must be specified first
**Error** 4_2.asm(18) Undefined symbol: @DATA
**Error** 4_2.asm(19) Code or data emission to undeclared segment
**Error** 4_2.asm(20) Code or data emission to undeclared segment
**Error** 4_2.asm(22) Code or data emission to undeclared segment
**Error** 4_2.asm(23) Code or data emission to undeclared segment
**Error** 4_2.asm(24) Code or data emission to undeclared segment
**Error** 4_2.asm(26) Code or data emission to undeclared segment
**Error** 4_2.asm(27) Code or data emission to undeclared segment
**Error** 4_2.asm(28) Code or data emission to undeclared segment
**Error** 4_2.asm(30) Code or data emission to undeclared segment
**Error** 4_2.asm(31) Code or data emission to undeclared segment
**Error** 4_2.asm(32) Code or data emission to undeclared segment
**Error** 4_2.asm(34) Code or data emission to undeclared segment
**Error** 4_2.asm(35) Code or data emission to undeclared segment
**Error** 4_2.asm(36) Code or data emission to undeclared segment
**Error** 4_2.asm(38) Can't address with currently ASSUMEd segment registers
**Error** 4_2.asm(40) Code or data emission to undeclared segment
**Error** 4_2.asm(41) Code or data emission to undeclared segment
**Error** 4_2.asm(42) Undefined symbol: DIDZIOJI
**Error** 4_2.asm(43) Code or data emission to undeclared segment
**Error** 4_2.asm(44) Undefined symbol: ERR
**Error** 4_2.asm(45) Code or data emission to undeclared segment
**Error** 4_2.asm(46) Can't address with currently ASSUMEd segment registers
**Error** 4_2.asm(47) Can't address with currently ASSUMEd segment registers
**Error** 4_2.asm(48) Undefined symbol: TIKRINK
**Error** 4_2.asm(51) Code or data emission to undeclared segment
**Error** 4_2.asm(52) Undefined symbol: ERR
**Error** 4_2.asm(53) Code or data emission to undeclared segment
**Error** 4_2.asm(54) Code or data emission to undeclared segment
**Error** 4_2.asm(55) Can't address with currently ASSUMEd segment registers
**Error** 4_2.asm(57) Undefined symbol: TIKRINK
*Warning* 4_2.asm(58) Unmatched ENDS: DIDZIOJI
*Warning* 4_2.asm(60) Reserved word used as symbol: ERR
**Error** 4_2.asm(61) Code or data emission to undeclared segment
**Error** 4_2.asm(62) Code or data emission to undeclared segment
**Error** 4_2.asm(63) Code or data emission to undeclared segment
*Warning* 4_2.asm(64) Unmatched ENDS: ERR
**Error** 4_2.asm(66) Code or data emission to undeclared segment
**Error** 4_2.asm(67) Code or data emission to undeclared segment
**Error** 4_2.asm(68) Code or data emission to undeclared segment
**Error** 4_2.asm(71) Code or data emission to undeclared segment
**Error** 4_2.asm(72) Code or data emission to undeclared segment
**Error** 4_2.asm(74) Code or data emission to undeclared segment
**Error** 4_2.asm(75) Code or data emission to undeclared segment
*Warning* 4_2.asm(76) Unmatched ENDS: ERR
**Error** 4_2.asm(80) Code or data emission to undeclared segment
**Error** 4_2.asm(81) Code or data emission to undeclared segment
**Error** 4_2.asm(83) Code or data emission to undeclared segment
**Error** 4_2.asm(84) Code or data emission to undeclared segment
**Error** 4_2.asm(87) Undefined symbol: START
Error messages:    47
Warning messages:  6
Passes:            1
Remaining memory:  416k
почему в одном компиляторе работает, а в другом нет?
Надеюсь ктонибуть поможет мне  smile


Это сообщение отредактировал(а) iveyk - 27.9.2007, 21:30
PM MAIL   Вверх
dumb
Дата 28.9.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Код

    .MODEL small
    .DATA

pkey          db "press any key...$"
message1      db "Enter string: $"
crlf          db 0Dh,0Ah,'$'
;--- bufer dlya func 0Ah dolzhen bit' takim:
strbuf        db 120                    ;max len
              db 0                      ;out len
              db 120 dup (0)            ;stroka
;---
msg_result    db "      string: "
result        db 120 dup (0)

    .STACK
              dw 128 dup(0)

    .CODE

start:
; set segment registers:
    mov       ax, @data
    mov       ds, ax
    mov       es, ax
;------------------------------------------------------------------------------------
    mov       dx, offset message1
    mov       ah, 9                     ;pe4ataem na ekrane stroku
    int       21h           
;--------------------------------------------------------------------------------------------
    mov       dx, offset strbuf
    mov       ah, 0Ah                   ;schityvaem stroku s klaviatury v buffer
    int       21h               
;---------------------------------------------------------------------------------
    mov       si, offset strbuf
    xor       ax, ax
    xor       bx, bx
    mov       bl, [si+1]                ;dlina stroki(sm. structuru bufera)
    add       si, 2                     ;dvigaem ukazatel' na samu stroku
    add       bx, si                    ;stroka zakan4ivaetsya 0Dh - vi4islyaem ego
    mov       [bx], al                  ;posiciju i pishem tuda 0.
;----------------------------------------------------------------------------------------
    mov       dx, offset crlf
    mov       ah, 9                     ;Perevod kursora na druguju strocku
    int       21h
;-----------------------------------------------------------------------------------------  
    cld                                 ;sbrasivaem flag napravleniya (dlya lodsb/stosb)
    mov       di, offset result
nextsym:
    lodsb                               ;al=ds:[si], si=si+1
    or        al, al
    je        stop
    cmp       al, 'A'
    jb        skip
    cmp       al, 'Z'
    jb        downcase
    cmp       al, 'a'
    jb        skip
    cmp       al, 'z'
    ja        skip
upcase:
    sub       al, 20h                   ;upcase
skip:
    stosb                               ;es:[di]=al, di=di+1
    jmp       nextsym
downcase:
    add       al, 20h                   ;downcase
    stosb                               ;es:[di]=al, di=di+1
    jmp       nextsym
stop:
    mov       al, '$'                   ;pishem v konec stoki $ dlya vivoda func-ej 9
    stosb
;--------------------------------------------------------------------------------------
    mov       dx, offset msg_result
    mov       ah, 9
    int       21h
;--------------------------------------------------------------------------------------
    mov       dx, offset crlf
    mov       ah, 9                     ;Perevod kursora na druguju strocku
    int       21h
;----------------------------------------------------------------------------------------
    lea       dx, pkey
    mov       ah, 9
    int       21h
    ; wait for any key....    
    mov       ah, 8
    int       21h
    
    mov       ax, 4c00h ; exit to operating system.
    int       21h
;---------------------------------------------------------------------------------------
    END       start ; set entry point and stop the assembler.

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

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

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


 




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


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

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