Обьясните плиз

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Обьясните плиз

Re: Обьясните плиз

Apokal » 11 мар 2008, 08:31

До меня дошло :D Спасибо за помошь.

Re: Обьясните плиз

Serge_Bliznykov » 10 мар 2008, 23:23

&quot писал(а):Тоесть через ассемблер никак нельзя?
блин, а если Вам в ДОС надо строчку на экран вывести - вы как, будет видеадаптер программировать или всё таки вызовите функцию 21 прерывания?!
Так и здесь - всё будет на ассемблере - просто заполните нужные параментры и вызовите функцию WinAPI - это и будет всё на ассемблере!!

Re: Обьясните плиз

Apokal » 10 мар 2008, 17:32

Тоесть через ассемблер никак нельзя?

Re: Обьясните плиз

somewhere » 10 мар 2008, 13:36

А какой тут может быть алгоритм, вся реализация-то через WinAPI идет. Просто тупо череда Call с параметрами через стек - вот вам и весь алгоритм.

Re: Обьясните плиз

Apokal » 10 мар 2008, 12:28

Под винду. Мне ненадо особой сложности -- бо мне будет трудно в реализации алгоритма на асме, так как ассемблер я на уровне нюба пока знаю.

Re: Обьясните плиз

airyashov » 10 мар 2008, 00:49

Под винду небось хотите или под ДОС?

Re: Обьясните плиз

Apokal » 08 мар 2008, 12:23

Нужна ваша помощь.

Необходимо написать програму на ассемблере, которая показывала бы пинг аналогично до того как в командной строке когда пишем ping server adress.
Юзер вводит адрес серва а прога выводит пинг.
Подскажыте с алгоритмом решения, бо я в этом нешарю. Заранее спс.

Re: Обьясните плиз

Apokal » 05 фев 2008, 21:13

Помогите с траблом! Добавил к предыдущему коду строчки которые осущетчвляют запись в файл, но как всегда сторчка туда записыватса нехочет. Скажыте плиз в чем ошыбка!

Код: Выделить всё

.model small
.386
.stack 100h
.data
msg1 db "Enter name of directory: $"
msg2 db "Directory created successful!",0dh,0ah,"$"
msg3 db "Enter name of file: $"
msg4 db "File created successful!",0dh,0ah,"$"
msg5 db "Enter a string: $"
msg6 db "Writing to file is succsessful!",0dh,0ah,"$"
msg7 dw 2 dup (?),"$"
filehandle dw ?
newst db 0dh,0ah,"$"
errmsg db "Input/output error! $"
inputstrmax db 0ffh
inputstrsize db ?
inputstr db 0ffh dup (?)
.code
_start:
mov ax,@data
mov ds,ax
mov es,ax

jmp _real_start
  
printstr proc 
mov ah,09h 
int 21h
ret
printstr endp

readstr proc
lea dx,inputstrmax
mov ah,0ah
int 21h
movzx cx,inputstrsize
lea bx,inputstr
add bx,cx
mov byte ptr [bx],0
ret
readstr endp

_real_start:
;-----------------------------Creating a new directory-------------------------
lea dx,msg1
call printstr
call readstr
mov ah,039h
lea dx,inputstr
int 21h
jc _ioerror
lea dx,newst
call printstr
lea dx,msg2
call printstr
;----------------------------Entering a new directory-------------------------------
mov ah,03bh
lea dx,inputstr
int 21h
jc _ioerror
;----------------------------Creating a new file with it's opening------------------
lea dx,msg3
call printstr
call readstr
mov ah,03ch
xor cx,cx
lea dx,inputstr
int 21h
jc _ioerror
lea dx,newst
call printstr
lea dx,msg4
call printstr
mov filehandle,ax
;---------------------------Writing data to file-------------------------------------
lea dx,msg5
call printstr
call readstr 
movzx cx,inputstrsize
lea di,inputstr
add di,cx
mov byte ptr [di],"$"
mov ah,40h
mov bx,filehandle
int 21h
jc _ioerror
lea dx,newst
call printstr
lea dx,msg6
call printstr
;---------------------------Closing a new file----------------------------------------
mov ah,03eh
mov bx,filehandle
int 21h

jmp _wait

_ioerror:
lea dx,newst
call printstr
lea dx,errmsg
call printstr

_wait:
mov ah,0
int 16h
mov ax,4c00h
int 21h
end _start

Re: Обьясните плиз

Apokal » 05 фев 2008, 20:51

Опять возник трабл(( Добавил к предыдущему коду строчки которые осуществляют запись в файл строки символов. При работе проги все ок, даже контрольный меседж нащет успешной записи в файл строчки появляетса, но самой строчкив файле нет!!!!!!!!
Я незнаю в чем проблема --- может нада какието символы контрольные в конец записываемой строчки дописать? Хотя я читал описание 40-й функции 21-го прерывания и там нечего подобного несказано.

Вот код:

Код: Выделить всё

.model small
.386
.stack 100h
.data
msg1 db "Enter name of directory: $"
msg2 db "Directory created successful!",0dh,0ah,"$"
msg3 db "Enter name of file: $"
msg4 db "File created successful!",0dh,0ah,"$"
msg5 db "Enter a string: $"
msg6 db "Writing to file is succsessful!",0dh,0ah,"$"
msg7 dw 2 dup (?),"$"
filehandle dw ?
newst db 0dh,0ah,"$"
errmsg db "Input/output error! $"
inputstrmax db 0ffh
inputstrsize db ?
inputstr db 0ffh dup (?)
.code
_start:
mov ax,@data
mov ds,ax
mov es,ax

jmp _real_start
  
printstr proc 
mov ah,09h 
int 21h
ret
printstr endp

readstr proc
lea dx,inputstrmax
mov ah,0ah
int 21h
movzx cx,inputstrsize
lea bx,inputstr
add bx,cx
mov byte ptr [bx],0
ret
readstr endp

_real_start:
;-----------------------------Creating a new directory-------------------------
lea dx,msg1
call printstr
call readstr
mov ah,039h
lea dx,inputstr
int 21h
jc _ioerror
lea dx,newst
call printstr
lea dx,msg2
call printstr
;----------------------------Entering a new directory-------------------------------
mov ah,03bh
lea dx,inputstr
int 21h
jc _ioerror
;----------------------------Creating a new file with it's opening------------------
lea dx,msg3
call printstr
call readstr
mov ah,03ch
xor cx,cx
lea dx,inputstr
int 21h
jc _ioerror
lea dx,newst
call printstr
lea dx,msg4
call printstr
mov filehandle,ax
;---------------------------Writing data to file-------------------------------------
lea dx,msg5
call printstr
call readstr 
mov ah,40h
mov bx,filehandle
movzx cx,inputstrsize
jc _ioerror
lea dx,newst
call printstr
lea dx,msg6
call printstr
;---------------------------Closing a new file----------------------------------------
mov ah,03eh
mov bx,filehandle
int 21h

jmp _wait

_ioerror:
lea dx,newst
call printstr
lea dx,errmsg
call printstr

_wait:
mov ah,0
int 16h
mov ax,4c00h
int 21h
end _start

Re: Обьясните плиз

somewhere » 30 янв 2008, 23:03

Функция 3Bh - аналог команды ДОС ChDir или CD
Даже если в параметрах функции четко указан диск, который отличается от текщего, то текущий диск не меняется и переход в заданную директорию не выполняется.
Перед тем, как сменить текущую директорию - смените текущий диск на тот, который нужен.
А вообще использование смены текущего диска и папки для создания файла по заданному пути - дурной тон, т.к. всегда можно создать файл указав полный путь, не травмируя психику пользователя которому надо будет еще обратно идти. Туда, откуда его перекинули текущую папку

Вернуться к началу