Консультация № 198229
13.04.2020, 11:29
0.00 руб.
13.04.2020, 11:45
0 22 1
Здравствуйте! У меня возникла проблема, которую я не могу решить, извилин не хватает, к сожалению((( Предомной стоит задача написать простейшею форму регистрации:
программа должна спросить имя, пол, возрасти записать полученные
результаты в файл на языке assembler emu8086. Тект моей программы:
[code lang=asm h=300]#make_COM#
org 100h
;??????????? ? ????? ??????
mov ah, 09h
lea dx, Name
int 21h
;???? ??????
mov ah, 0Ah
lea dx, Buff
int 21h
mov ah, 09h
lea dx, Gender
int 21h
;???? ??????
mov ah, 0Ah
lea dx, Buff2
int 21h
mov ah, 09h
lea dx, Age
int 21h
;???? ??????
mov ah, 0Ah
lea dx, Buff3
int 21h
;???????? ?????
mov ah, 3Ch ;??????? ????
mov cx, 0 ;???????
lea dx, FileName ;???
int 21h
jnc @@FileCreateOk
mov ah, 09h
lea dx, errFileOpenWr
int 21h
jmp @@Exit
@@FileCreateOk:
mov [hFile], ax
;?????? ? ????
mov ah, 40h
mov bx, hFile
mov cl, Buff+1
; mov ch, 0
lea dx, Buff+2
mov cl, Buff2+1
; mov ch, 0
mov cl, Buff2+2
mov cl, Buff3+1
mov ch, 0
lea dx, Buff3+2
int 21h
jnc @@FileWriteOk
mov ah, 09h
lea dx, [errFileWrite]
int 21h
jmp @@FileClose
@@FileWriteOk:

@@FileClose:
mov ah, 3Eh
mov bx, [hFile]
int 21h
jnc @@FileCloseOk
mov ah, 09h
lea dx, [errFileClose]
int 21h
jmp @@Exit
@@FileCloseOk:

@@Exit:
;???????? ??????? ????? ???????
mov ah, 09h
lea dx, [msgPressAnyKey]
int 21h
mov ah, 0
int 16h
;?????????? ?????????
; int 20h
ret
;-------------------------------------------------------
errFileOpenRd db 0Dh, 0Ah, 'File open (for read) error', '$'
errFileOpenWr db 0Dh, 0Ah, 'File open (for write) error', '$'
errFileRead db 0Dh, 0Ah, 'File read error', '$'
errFileWrite db 0Dh, 0Ah, 'File write error', '$'
errFileClose db 0Dh, 0Ah, 'File close error', '$'
CrLf db 0Dh, 0Ah, '$'
Name db 0Dh, 0Ah,'Enter your name:', 0Dh, 0Ah, '$'
Gender db 0Dh, 0Ah,'Enter your gender (w/m):', 0Dh, 0Ah, '$'
Age db 0Dh, 0Ah,'Enter your age:', 0Dh, 0Ah, '$'
msgPressAnyKey db 0Dh, 0Ah, 'Press any key to exit...', '$'

FileName db 'data.txt', 0

hFile dw ?

BufSize equ 80
BufSize2 equ 2
Buff db BufSize, ?, (BufSize+1) dup(?)
Buff2 db BufSize2, ?, (BufSize2+1) dup(?)
Buff3 db BufSize, ?, (BufSize+1) dup(?)[/code]
После ее работы файл остаётся пустым и ничего в него не записывается. Можете, пожалуйста, мне помочь исправить ошибки в моей программе?

Обсуждение

давно
Старший Модератор
31795
6196
13.04.2020, 12:00
общий
Адресаты:
В будущем для кода используйте кнопку
и выбирайте язык подсветки.

Можете сказать что тут происходит?
[code lang=asm] mov ah,40h
mov bx,hFile
mov cl,Buff+1
; mov ch,0
lea dx,Buff+2
mov cl,Buff2+1
; mov ch, 0
mov cl,Buff2+2
mov cl,Buff3+1
mov ch,0
lea dx,Buff3+2
int 21h[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 12:02
общий
Запись в файл
давно
Старший Модератор
31795
6196
13.04.2020, 14:19
общий
Адресаты:
Напишу свои комментарии:
[code lang=asm] mov ah,40h;функция ДОС запись данных на устройство-файла
mov bx,hFile;дескриптор устройства-файла
mov cl,Buff+1; сх=Buff+1 - длина введенной строки
; mov ch,0
lea dx,Buff+2; dx=Buff+2 - адрес записываемых данных
mov cl,Buff2+1; сх=Buff2+1 - перезаписали значение
; mov ch, 0
mov cl,Buff2+2; см.выше
mov cl,Buff3+1; сх =Buff3+1 см. выше
mov ch,0
lea dx,Buff3+2;dx=Buff3+2 - адрес записываемых данных
int 21h
; в функцию попадет АХ = 0х40, ВХ = hFile, СХ = Buff3+1, DX = Buff3+2[/code]
И что Вы записываете?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 15:10
общий
хорошо, а как тогда правильно это сделать, как в файл записывать то, что мы вводим с клавиатуры?
давно
Старший Модератор
31795
6196
13.04.2020, 15:26
общий
Адресаты:
Эмы у меня нет, код FASM. Могу TASM или MASM
[code lang=asm]org 100h
;
mov ah,09h
mov dx,Name
int 21h
mov ah,0Ah
mov dx,Buff
int 21h
;
mov ah,09h
mov dx,Gender
int 21h
mov ah,0Ah
mov dx,Buff2
int 21h
;
mov ah, 09h
mov dx,Age
int 21h
mov ah,0Ah
mov dx,Buff3
int 21h
;
mov ah,3Ch
mov cx,0
mov dx,FileName
int 21h
jnc @@FileCreateOk
mov ah,09h
mov dx,errFileOpenWr
int 21h
jmp @@Exit
@@FileCreateOk:
mov [hFile],ax
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff+1]
mov dx,Buff+2
int 21h
jnc @@FileWriteOk
mov ah,09h
mov dx,errFileWrite
int 21h
jmp @@FileClose
@@FileWriteOk:
@@FileClose:
mov ah,3Eh
mov bx,[hFile]
int 21h
jnc @@FileCloseOk
mov ah,09h
mov dx,errFileClose
int 21h
jmp @@Exit
@@FileCloseOk:

@@Exit:
mov ah,09h
mov dx,msgPressAnyKey
int 21h
mov ah,0
int 16h
ret
;-------------------------------------------------------
errFileOpenRd db 0Dh,0Ah,'File open (for read) error', '$'
errFileOpenWr db 0Dh,0Ah,'File open (for write) error', '$'
errFileRead db 0Dh,0Ah,'File read error', '$'
errFileWrite db 0Dh,0Ah,'File write error', '$'
errFileClose db 0Dh,0Ah,'File close error', '$'
CrLf db 0Dh,0Ah,'$'
Name db 0Dh,0Ah,'Enter your name:$'
Gender db 0Dh,0Ah,'Enter your gender(w/m):$'
Age db 0Dh,0Ah,'Enter your age:$'
msgPressAnyKey db 0Dh,0Ah, 'Press any key to exit...', '$'
FileName db 'data.txt', 0

hFile dw ?

BufSize equ 80
BufSize2 equ 2
Buff db BufSize, ?,(BufSize+1) dup(?)
Buff2 db BufSize2,?,(BufSize2+1)dup(?)
Buff3 db BufSize, ?,(BufSize+1) dup(?) [/code]
пишет в файл только введенное имя, с полом и возрастом аналогично.
Только измените под них этот участок(ТРИ РАЗА СКОПИРУЕТЕ ЕГО И ПОДПРАВИТЕ ПОД BUFF2 и BUFF3)
[code lang=asm]
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff+1]
mov dx,Buff+2
int 21h[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 15:58
общий
13.04.2020, 17:45
у меня emu8086... программа выдаёт ошибку
Прикрепленные файлы:
c97d35e9dd8618326abbd0a8c555e1d8.PNG
давно
Старший Модератор
31795
6196
13.04.2020, 16:33
общий
Адресаты:
Пробуйте TASM-вариант:
[code lang=asm h=300].model tiny
.code
org 100h
;
begin: mov ah,09h
lea dx,dbName
int 21h
mov ah,0Ah
lea dx,Buff
int 21h
;
mov ah,09h
lea dx,Gender
int 21h
mov ah,0Ah
lea dx,Buff2
int 21h
;
mov ah, 09h
lea dx,Age
int 21h
mov ah,0Ah
lea dx,Buff3
int 21h
;
mov ah,3Ch
mov cx,0
lea dx,FileName
int 21h
jnc @@FileCreateOk
mov ah,09h
lea dx,errFileOpenWr
int 21h
jmp @@Exit
@@FileCreateOk:
mov [hFile],ax
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff+1]
lea dx,Buff+2
int 21h
jnc @@FileWriteOk
mov ah,09h
lea dx,errFileWrite
int 21h
jmp @@FileClose
@@FileWriteOk:
@@FileClose:
mov ah,3Eh
mov bx,[hFile]
int 21h
jnc @@FileCloseOk
mov ah,09h
lea dx,errFileClose
int 21h
jmp @@Exit
@@FileCloseOk:

@@Exit:
mov ah,09h
lea dx,msgPressAnyKey
int 21h
mov ah,0
int 16h
ret
;-------------------------------------------------------
errFileOpenRd db 0Dh,0Ah,'File open (for read) error', '$'
errFileOpenWr db 0Dh,0Ah,'File open (for write) error', '$'
errFileRead db 0Dh,0Ah,'File read error', '$'
errFileWrite db 0Dh,0Ah,'File write error', '$'
errFileClose db 0Dh,0Ah,'File close error', '$'
CrLf db 0Dh,0Ah,'$'
dbName db 0Dh,0Ah,'Enter your name:$'
Gender db 0Dh,0Ah,'Enter your gender(w/m):$'
Age db 0Dh,0Ah,'Enter your age:$'
msgPressAnyKey db 0Dh,0Ah, 'Press any key to exit...', '$'
FileName db 'data.txt', 0

hFile dw ?

BufSize equ 80
BufSize2 equ 2
Buff db BufSize, ?,(BufSize+1) dup(?)
Buff2 db BufSize2,?,(BufSize2+1)dup(?)
Buff3 db BufSize, ?,(BufSize+1) dup(?)
end begin[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 16:57
общий
Ошибок в процессе нет, но файл всёравно остаётся пустым((
давно
Старший Модератор
31795
6196
13.04.2020, 17:36
общий
Адресаты:
  • нажмите Compile;
  • Эма предложит Вам сохранить СОМ-файл в папку emu8086\MyBuild;
  • Октрываете эту папку в проводнике и запускаете СОМ-файл
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 17:40
общий
13.04.2020, 17:44
Сохранить в папке emu8086\MyBuild я не могу, так как выходит ошибка, поэтому я сохраняю в другую папку, в которой находится файл data.txt, ну дальше запускаю эмулятор. Однако, после завершения файл пустой...
давно
Старший Модератор
31795
6196
13.04.2020, 18:03
общий
Адресаты:
Вот только сказок не нужно.
Поставил Эму

  • 1) нажимаете Эмуляцию;
  • 2)открывается окно эмулятора, нажимаете RUN;
  • 3)программа запускается - вводится информация;
  • 4)создается файл;
  • 5) с таким содержимым.


Цитата: Be|_Ena
я сохраняю в другую папку, в которой находится файл data.txt, ну дальше запускаю эмулятор.

Удалите его, программа должна создать новый, если не создала в этой папке, поиском найдите этот файл.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 18:53
общий
Удалила, и файл не создаётся((
Прикрепленные файлы:
f201b1123516c7ec15a20f5c4f36d969.PNG
давно
Посетитель
403898
18
13.04.2020, 18:54
общий
странно, всё успешно завершается, и у Вас всё работает
Прикрепленные файлы:
8311161b376f931d8c7a0d04e6a027bf.PNG
давно
Посетитель
403898
18
13.04.2020, 18:55
общий
Вот успешное завершение
Прикрепленные файлы:
bd80a0ed34220b547eca5678483d6449.PNG
давно
Старший Модератор
31795
6196
13.04.2020, 19:26
общий
Адресаты:
Кнопка "Старт/Пуск" => "Поиск" => data.txt, по всем дискам.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
13.04.2020, 21:25
общий
Адресаты:
Нашли файл?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
13.04.2020, 21:28
общий
К сожалению его нет
давно
Старший Модератор
31795
6196
13.04.2020, 21:53
общий
строку:
[code lang=asm]FileName db 'data.txt', 0 [/code]
Делаете как-то так :
[code lang=asm]FileName db 'd:\folder\ . . \folder\data.txt', 0 [/code]
Диск и путь указываете свои, программа должна создать файл именно в указаной папке.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
13.04.2020, 21:55
общий
Адресаты:
и покажите Ваш последний код.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
403898
18
14.04.2020, 07:17
общий
14.04.2020, 07:18
Вод код

[code lang=asm]#make_COM#

; COM file is loaded at CS:0100h
ORG 100h

;
begin: mov ah,09h
lea dx,dbName
int 21h
mov ah,0Ah
lea dx,Buff
int 21h
;
mov ah,09h
lea dx,Gender
int 21h
mov ah,0Ah
lea dx,Buff2
int 21h
;
mov ah, 09h
lea dx,Age
int 21h
mov ah,0Ah
lea dx,Buff3
int 21h
;
mov ah,3Ch
mov cx,0
lea dx,FileName
int 21h
jnc @@FileCreateOk
mov ah,09h
lea dx,errFileOpenWr
int 21h
jmp @@Exit
@@FileCreateOk:
mov [hFile],ax
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff+1]
lea dx,Buff+2
int 21h
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff2+1]
lea dx,Buff2+2
int 21h
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff3+1]
lea dx,Buff3+2
int 21h
jnc @@FileWriteOk
mov ah,09h
lea dx,errFileWrite
int 21h
jmp @@FileClose
@@FileWriteOk:
@@FileClose:
mov ah,3Eh
mov bx,[hFile]
int 21h
jnc @@FileCloseOk
mov ah,09h
lea dx,errFileClose
int 21h
jmp @@Exit
@@FileCloseOk:

@@Exit:
mov ah,09h
lea dx,msgPressAnyKey
int 21h
mov ah,0
int 16h
ret
;-------------------------------------------------------
errFileOpenRd db 0Dh,0Ah,'File open (for read) error', '$'
errFileOpenWr db 0Dh,0Ah,'File open (for write) error', '$'
errFileRead db 0Dh,0Ah,'File read error', '$'
errFileWrite db 0Dh,0Ah,'File write error', '$'
errFileClose db 0Dh,0Ah,'File close error', '$'
CrLf db 0Dh,0Ah,'$'
dbName db 0Dh,0Ah,'Enter your name:$'
Gender db 0Dh,0Ah,'Enter your gender(w/m):$'
Age db 0Dh,0Ah,'Enter your age:$'
msgPressAnyKey db 0Dh,0Ah, 'Press any key to exit...', '$'
FileName db 'data.txt', 0

hFile dw ?

BufSize equ 80
BufSize2 equ 2
Buff db BufSize, ?,(BufSize+1) dup(?)
Buff2 db BufSize2,?,(BufSize2+1)dup(?)
Buff3 db BufSize, ?,(BufSize+1) dup(?)
end begin[/code]
давно
Посетитель
403898
18
14.04.2020, 08:30
общий
Я установила по новой emu8086, скачала его с другого сайта и всё получается. Спасибо Вам большое
давно
Старший Модератор
31795
6196
14.04.2020, 11:36
общий
это ответ
Здравствуйте, Be|_Ena!

Смотрите код:
[code lang=asm h=300].model tiny
.code
org 100h
;
begin: mov ah,09h
lea dx,dbName
int 21h
mov ah,0Ah
lea dx,Buff
int 21h
;
mov ah,09h
lea dx,Gender
int 21h
mov ah,0Ah
lea dx,Buff2
int 21h
;
mov ah, 09h
lea dx,Age
int 21h
mov ah,0Ah
lea dx,Buff3
int 21h
;
mov ah,3Ch
mov cx,0
lea dx,FileName
int 21h
jnc @@FileCreateOk
mov ah,09h
lea dx,errFileOpenWr
int 21h
jmp @@Exit
@@FileCreateOk:
mov [hFile],ax
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff+1]
lea dx,Buff+2
int 21h
jc @@Err
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff2+1]
lea dx,Buff2+2
int 21h
jc @@Err
mov ah,40h
xor cx,cx
mov bx,[hFile]
mov cl,[Buff3+1]
lea dx,Buff3+2
int 21h
jnc @@FileWriteOk
@@Err: mov ah,09h
lea dx,errFileWrite
int 21h
jmp @@FileClose
@@FileWriteOk:
@@FileClose:
mov ah,3Eh
mov bx,[hFile]
int 21h
jnc @@FileCloseOk
mov ah,09h
lea dx,errFileClose
int 21h
jmp @@Exit
@@FileCloseOk:

@@Exit:
mov ah,09h
lea dx,msgPressAnyKey
int 21h
mov ah,0
int 16h
ret
;-------------------------------------------------------
errFileOpenRd db 0Dh,0Ah,'File open (for read) error', '$'
errFileOpenWr db 0Dh,0Ah,'File open (for write) error', '$'
errFileRead db 0Dh,0Ah,'File read error', '$'
errFileWrite db 0Dh,0Ah,'File write error', '$'
errFileClose db 0Dh,0Ah,'File close error', '$'
CrLf db 0Dh,0Ah,'$'
dbName db 0Dh,0Ah,'Enter your name:$'
Gender db 0Dh,0Ah,'Enter your gender(w/m):$'
Age db 0Dh,0Ah,'Enter your age:$'
msgPressAnyKey db 0Dh,0Ah, 'Press any key to exit...', '$'
FileName db 'data.txt', 0

hFile dw ?

BufSize equ 80
BufSize2 equ 2
Buff db BufSize, ?,(BufSize+1) dup(?)
Buff2 db BufSize2,?,(BufSize2+1)dup(?)
Buff3 db BufSize, ?,(BufSize+1) dup(?)
end begin[/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа