Автор Тема: Ассемблер  (Прочитано 3131 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bik

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
Ассемблер
« : 22 Декабря 2001, 17:52:23 »
Может, кто поможет: у меня вопрос по ассемблеру. на спец. форумах по Асму отвечают раз в 3-4 недели, так что пишу здесь.
собственно вот: хочу, чтоб при нажатии единицы пользователь писал имя файла на удаление, при нажатии двойки - имя файла на создание.после, чтоб выводилось само это имя и строчка об успешном выполнении(создании/удалении).если же файл удалить нельзя, то чтоб писал почему.
Написал, но после нажатия 1 или 2 появляется приглашающая надпись и можно ввести только один символ, а потом опять таже приглающая надпись и можно ввести один символ... нажимаешь ввод и(при удалении) пишет, что такой файл не найден.(в названии-то только один символ). где ошибка не нахожу
вот что написал:
code segment
assume cs:code,ds:data,ss:stk
;---------
input proc
  goin_input:    
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
    cmp al,13
    jne another
    je to_ret
  another:
    mov fname[bx],al
    inc bx
    jmp goin_input  
  to_ret:
    ret
input endp
;----------
output proc
  goin_output:    
    cmp fname[bx],20h
    je here
    mov ah,06h
    mov dl,byte ptr fname[bx]
    int 21h
    inc bx
    jmp goin_output  
  here:  
    ret
output endp
;----------
main proc
  mov ax,data
  mov ds,ax
  xor bx,bx  
at_start:
  mov ah,09h
  mov dx,offset what_to_do
  int 21h
  mov ah,01h
  int 21h  
  cmp al,32h; нажали 2 ?
  je make_file
  cmp al,31h; нажали 1 ?
  je delete_file
  jmp at_start
delete_file:
  mov dx,offset del_good
  xor bx,bx
;--->
  call input
  mov ah,41h
  mov dx,offset fname
  int 21h
  jc error
  mov byte ptr fname[bx],0dh
  mov byte ptr fname[bx+1],0ah
  xor bx,bx
;--->
  call output    
  mov dx,offset sendok
  mov ah,09h
  int 21h
  mov dx,offset default_colors
  mov ah,09h
  int 21h
fin:
  mov ax,4c00h
  int 21h
make_file:
  xor bx,bx
  mov dx,offset make_good
;--->  
  call input
  mov dx,offset fname
  mov ah,3ch
  int 21h
  xor bx,bx
;--->
  call output  
  mov dx,offset makeok
  mov ah,09h
  int 21h
  mov dx,offset default_colors
  mov ah,09h
  int 21h
  jmp fin
error:
  cmp ax,02h
  je nefind
  cmp ax,03h
  je nufind
  cmp ax,05h
  je nizzya
  jmp fin
nefind:
  mov dx,offset a
  jmp send
nufind:
  mov dx,offset b
  jmp send
nizzya:
  mov dx,offset c
send:  
  mov ah,09h
  int 21h
  jmp fin
main endp
code ends
data segment
  what_to_do db \'1.Удаление 2.Создание файла  $\',0dh,0ah
  del_good db \'Удаление файла: $\'
  make_good db \'Создание файла: $\'
  colors db 27,\'[25;40m\';pink
  default_colors db 27,\'[0m\',\'default colors$\'
  fname db 80 dup(\' \'),0
  sendok db 27,\'[31;40m\',\'Файл удален !$\'
  makeok db 27,\'[31;40m\',\'Файл создан !$\'
  a db \'Такой файл не найден!$\'
  b db \'Такой папки нет!$\'
  c db \'Права доступа запрещают!$\'
data ends
stk segment stack
  db 256 dup (0)
stk ends
end main

Оффлайн bik

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
Ассемблер
« Ответ #1 : 23 Декабря 2001, 01:31:53 »
если, кому интересно - я нашел где ошибки(глупые, надо сказать),ниже правленный файл.но вот вопрос - есть ли в рунете хорошие Асм-форумы?

code segment
assume cs:code,ds:data,ss:stk

main proc
  mov ax,data
  mov ds,ax
  xor bx,bx  
at_start:
  mov ah,09h
  mov dx,offset what_to_do
  int 21h
  mov ah,01h
  int 21h  
  cmp al,32h; нажали 2 ?
  je make_file
  cmp al,31h; нажали 1 ?
  je delete_file
  jmp at_start
;------------------
  delete_file:
  mov dx,offset del_good
  xor bx,bx
;--->
  call input
  mov ah,41h
  mov dx,offset fname
  int 21h
  jc error
  mov byte ptr fname[bx],0dh
  mov byte ptr fname[bx+1],0ah
;  mov dx,offset clrscr
;  mov ah,09h
;  int 21h
  xor bx,bx
  xor dx,dx
;--->
  call output    
  mov dx,offset sendok
  mov ah,09h
  int 21h
  jmp fin
;------------------
make_file:
  xor bx,bx
  mov dx,offset make_good
;--->  
  call input
  mov dx,offset fname
  mov ah,3ch
  mov cx,20h;атрибут архива
  int 21h
  mov byte ptr fname[bx],0dh
  mov byte ptr fname[bx+1],0ah
  xor bx,bx
  xor dx,dx
;  mov dx,offset clrscr
;  mov ah,09h
;  int 21h
;--->
  call output  
  mov dx,offset makeok
  mov ah,09h
  int 21h
  jmp fin
error:
  call new_string
  cmp ax,02h
  je no_file
  cmp ax,03h
  je no_ctlg
  cmp ax,05h
  je bad_chmod
  jmp fin
no_file:
  mov dx,offset send_nofile
  jmp send
no_ctlg:
  mov dx,offset send_noctlg
  jmp send
bad_chmod:
  mov dx,offset send_badchmod
send:  
  mov ah,09h
  int 21h
fin:
  mov ax,4c00h
  int 21h
  ;---------
input proc
    mov ah,09h
    int 21h  
  goin_input:    
    mov ah,01h
    int 21h
    cmp al,13
    jne another
    je to_ret
  another:
    mov fname[bx],al
    inc bx
    jmp goin_input  
  to_ret:
    ret
input endp
;----------
output proc
    call new_string
  goin_output:    
    cmp fname[bx],20h
    je here
    mov ah,06h
    mov dl,byte ptr fname[bx]
    int 21h
    inc bx
    jmp goin_output  
  here:  
    ret
output endp
new_string proc
    push ax
    mov ah,06h
    mov dl,0dh
    int 21h
    mov ah,06h
    mov dl,0ah
    int 21h; перевод на новую строку
    pop ax
    ret
new_string endp  
;----------
main endp
code ends
data segment
  what_to_do db \'1.Удаление 2.Создание файла  $\',0dh,0ah
  del_good db 0dh,0ah,\'Удаление файла: $\'
  make_good db 0dh,0ah,\'Создание файла: $\'
;  colors db 27,\'[25;40m\';pink
;  clrscr db 27,\'[2J\'
  fname db 80 dup(\' \'),0
  sendok db 27,\'[31;40m\',\'Файл удален !$\'
  makeok db 27,\'[31;40m\',\'Файл создан !$\'
  send_nofile db \'Такой файл не найден!$\'
  send_noctlg db \'Такой папки нет!$\'
  send_badchmod db \'Права доступа запрещают!$\'
data ends
stk segment stack
  db 256 dup (0)
stk ends
end main

 

Sitemap 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 27 28