小弟我是新手,写了一个简单的程序,但在对文件进行新建以及读写的那一块有点有关问题,求大家指教
我是新手,写了一个简单的程序,但在对文件进行新建以及读写的那一块有点问题,求大家指教
有好几个问题,请大家耐心解答
;描述:
;此程序是模拟一个简单的银行系统,有查询余额,存钱,取钱和退出功能
;金额存储在文件bank.txt中,程序一开始会将bank.txt中的内容读取出来,存在x中(若无此文件,则新建)
;程序结束时,将x中的值写入回bank.txt文件中
;问题:
;1.我用的是emu8086编译器,若我一开始没有在给出的目录里建立bank.txt文件,则会提示无法打开,并没有新建文件
;2.即使我事先在给出的目录里建立了一个bank.txt文件,但是运行完程序后,里面内容并没有改变
;3.我事先在给出的目录里建立了一个bank.txt文件,里面打了一个数字0,调用将x十进制显示的query函数后,为什么还是显示出ASC码48
;4.我在save以及take中都有对输入的数进行判断是否大于9999,但是实际输入的时候我输入大于9999的数,仍然会继续让你输入下去,直到按回车键
;最好能帮我改下程序,达到我想要的功能,或者给我些修改意见
;emu8086编译通过,可以直接运行(如果没有自己建立文件,会提示打开文件失败)
data segment
menu db 'Bank System:',13,10
db '1.query',13,10
db '2.save',13,10
db '3.take',13,10
db '4.exit',13,10
db 'Please choose an order:',13,10,'$'
cr db 13,10,'$'
error db 'error!',13,10,'$'
money db 'money:','$'
number db 'number:',13,10,'$'
x dw 0 ;用来存放从文件中读取出来的字符
path db 'D:\emu8086\MyBuild\bank.txt',00 ;文件的绝对地址
codename db 10 dup(0) ;用来保存文件代号
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
call file_open ;打开文件
call file_read ;将文件内容读取至x中
call file_close ;关闭文件
list:
lea dx,cr
mov ah,9
int 21h
lea dx,menu
mov ah,9
int 21h ;显示菜单
mov ah,1
int 21h
cmp al,'1'
jnz a1 ;输入1,调用query,显示x中的数,以十进制显示
call query
jmp list
a1: cmp al,'2'
jnz a2 ;输入2,调用save,对x中的数据进行操作(加法)
call save
jmp list
a2: cmp al,'3'
jnz a3 ;输入3,调用take,对x中的数据进行操作(减法)
call take
jmp list
a3: cmp al,'4'
jz e ;输入4,调用exit,退出程序
lea dx,error
mov ax,9
int 21h
jmp list
e: call file_open ;打开文件
call file_write ;将x中的数写入到文件中
call file_close ;关闭文件
call exit ;退出程序
query proc ;以十进制显示内存x中的数
call cr_lf ;回车+换行
lea dx,money ;我是新手,这个子程序从网上找的,试了下似乎没有问题,目前没完全理解,所以没有注释
mov ah,9
int 21h
mov ax,x
xor cx,cx
mov bx,10
nx1:
xor dx,dx
div bx
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz nx1
nx2: pop ax
int 10h
loop nx2
ret
query endp
save proc ;读取内存x中的数,加上键盘键入的数,再回存至x中
mov ax,0
push ax ;初始化ax,并放入堆栈保护起来
save_loop:
call cr_lf ;回车+换行
lea dx,number ;显示"number:"
mov ah,9
int 21h
save_in:
mov ah,1
int 21h ;输入一个字符
cmp al,13 ;输入的若是回车,则结束输入
je save_end
cmp al,'0'
有好几个问题,请大家耐心解答
;描述:
;此程序是模拟一个简单的银行系统,有查询余额,存钱,取钱和退出功能
;金额存储在文件bank.txt中,程序一开始会将bank.txt中的内容读取出来,存在x中(若无此文件,则新建)
;程序结束时,将x中的值写入回bank.txt文件中
;问题:
;1.我用的是emu8086编译器,若我一开始没有在给出的目录里建立bank.txt文件,则会提示无法打开,并没有新建文件
;2.即使我事先在给出的目录里建立了一个bank.txt文件,但是运行完程序后,里面内容并没有改变
;3.我事先在给出的目录里建立了一个bank.txt文件,里面打了一个数字0,调用将x十进制显示的query函数后,为什么还是显示出ASC码48
;4.我在save以及take中都有对输入的数进行判断是否大于9999,但是实际输入的时候我输入大于9999的数,仍然会继续让你输入下去,直到按回车键
;最好能帮我改下程序,达到我想要的功能,或者给我些修改意见
;emu8086编译通过,可以直接运行(如果没有自己建立文件,会提示打开文件失败)
data segment
menu db 'Bank System:',13,10
db '1.query',13,10
db '2.save',13,10
db '3.take',13,10
db '4.exit',13,10
db 'Please choose an order:',13,10,'$'
cr db 13,10,'$'
error db 'error!',13,10,'$'
money db 'money:','$'
number db 'number:',13,10,'$'
x dw 0 ;用来存放从文件中读取出来的字符
path db 'D:\emu8086\MyBuild\bank.txt',00 ;文件的绝对地址
codename db 10 dup(0) ;用来保存文件代号
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
call file_open ;打开文件
call file_read ;将文件内容读取至x中
call file_close ;关闭文件
list:
lea dx,cr
mov ah,9
int 21h
lea dx,menu
mov ah,9
int 21h ;显示菜单
mov ah,1
int 21h
cmp al,'1'
jnz a1 ;输入1,调用query,显示x中的数,以十进制显示
call query
jmp list
a1: cmp al,'2'
jnz a2 ;输入2,调用save,对x中的数据进行操作(加法)
call save
jmp list
a2: cmp al,'3'
jnz a3 ;输入3,调用take,对x中的数据进行操作(减法)
call take
jmp list
a3: cmp al,'4'
jz e ;输入4,调用exit,退出程序
lea dx,error
mov ax,9
int 21h
jmp list
e: call file_open ;打开文件
call file_write ;将x中的数写入到文件中
call file_close ;关闭文件
call exit ;退出程序
query proc ;以十进制显示内存x中的数
call cr_lf ;回车+换行
lea dx,money ;我是新手,这个子程序从网上找的,试了下似乎没有问题,目前没完全理解,所以没有注释
mov ah,9
int 21h
mov ax,x
xor cx,cx
mov bx,10
nx1:
xor dx,dx
div bx
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz nx1
nx2: pop ax
int 10h
loop nx2
ret
query endp
save proc ;读取内存x中的数,加上键盘键入的数,再回存至x中
mov ax,0
push ax ;初始化ax,并放入堆栈保护起来
save_loop:
call cr_lf ;回车+换行
lea dx,number ;显示"number:"
mov ah,9
int 21h
save_in:
mov ah,1
int 21h ;输入一个字符
cmp al,13 ;输入的若是回车,则结束输入
je save_end
cmp al,'0'