Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Задачу по ассемблеру. Срочно


Автор: Teresh 3.4.2010, 17:02
Помогите решить задачу. Нужно отфильтровать все символы кроме ctrl-a...ctrl-z. Т.е. если ввожу с клавиатуры ^a, то мне выводится ctrl-a итак далее до ^z. Иначе выводится сообщение об ошибке. У меня выводятся какие-то не понятный строки. Вот мой код. У меня Tasm.

Код


.model small
.stack 100h    
.data
    message db 'Error: illegal symbol$'
    mas1 db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
    mas2 db 'crtl-a$', 'crtl-b', 'crtl-c', 'crtl-d', 'crtl-e', 'crtl-f', 'crtl-g', 'crtl-h', 'crtl-i', 'crtl-j', 'crtl-k', 'crtl-l', 'crtl-m',  'crtl-n', 'crtl-o', 'crtl-p', 'crtl-q', 'crtl-r', 'crtl-s', 'crtl-t', 'crtl-u', 'crtl-v', 'crtl-w', 'crtl-x', 'crtl-y', 'crtl-z' 
.code

main:
    mov ax, @data    
    mov ds, ax

Filtration:
    
    mov ah, 08h
    int 21h

    cmp al, 1
    jl Error                
    
    cmp al, 25
    jg Error
    
    xor ah, ah
    mov cx, 25
    
    xor si, si
    ;mov dl, mas[si]

    L1:
        cmp al, mas1[si]
        je Output
        inc si
    loop L1
    
    Output:
        mov dl, offset mas2[si]
        mov ah, 09h
        int 21h
    endp
    
    jle Filtration

Error:
    mov dx, ' '
    mov ah, 02h
    int 21h
    mov dx, offset message
    mov ah, 09h
    int 21h

Exit:
    mov ax, 4c00h
    int 21h
    
end main    


Автор: gmorgunov 4.4.2010, 19:00
В masm-e вот так:
filter.asm
Код

.model small
.stack 100h
.data
    message db 'Error: illegal symbol$'
    mas1 db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
    mas2 db 'crtl-a$', 'crtl-b$', 'crtl-c$', 'crtl-d$', 'crtl-e$', 'crtl-f$', 'crtl-g$', 'crtl-h$', 'crtl-i$', 'crtl-j$', 'crtl-k$', 'crtl-l$', 'crtl-m$',  'crtl-n$', 'crtl-o$', 'crtl-p$', 'crtl-q$', 'crtl-r$', 'crtl-s$', 'crtl-t$', 'crtl-u$', 'crtl-v$', 'crtl-w$', 'crtl-x$', 'crtl-y$', 'crtl-z$'
.code

main:
    mov ax, @data
    mov ds, ax

Filtration:
    
    mov ah, 08h
    int 21h

    cmp al, 1
    jl Error                

    cmp al, 25
    jg Error
    
    xor ah, ah
    mov cx, 25

    xor si, si
    ;mov dl, mas[si]

    L1:
        cmp al, mas1[si]
        je Output
        inc si
    loop L1
    
    Output:
        mov ax, si          ; ax <-- si
        mov dx,7            ; dx=7 , 'ctrl-x$' - 7 байт
        mul dx              ; ax <-- si*7
        mov dx,ax           ; dx <-- si*7
    mov ax, offset mas2 ; ax <-- offset mas2
    add dx,ax           ; dx <-- offset mas2+7*si
    xor ax,ax           ; ax= 0

        mov ah, 09h
        int 21h
    ;endp

    jle Filtration

Error:
    mov dx, ' '
    mov ah, 02h
    int 21h
    mov dx, offset message
    mov ah, 09h
    int 21h

Exit:
    mov ax, 4c00h
    int 21h
    
end main

Из консоли(cmd.exe):
>ml -c filter.asm
>link16 filter.obj
>filter

Автор: Teresh 4.4.2010, 22:31
спасибо!!)

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