版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
首页入门学习程序员计算机考研计算机)了•出下载硬件知识网络知识专业课程答粢下载视频教程下载
第十一章
作者:佚名来源:网络
11.1写出文件代号式磁盘存取操作的错误代码:
(1)非法文件代号(2)路径未发现(3)写保护磁盘
答:错误代码为:
(1)06(2)03(4)19
11.2使用3cH功能建立一文件,而该文件已经存在,这时会发生什么情况?
答:此操作将文件长度置为0,写新文件,原文件内容被清除。
11.3从缓冲区写信息到一个文件,如果没有关闭文件,可能会出现什么问题?
答:文件结尾的部分信息就没有被写入磁盘,从而造成写入的文件不完整。
11.4下面的ASCIZ串有什么错误?
PATH_NAMEDB'C:\PROGRAMS\TEST.DAT'
答:此ASCIZ串的最后少了一个全0字节,应改为:
PATH_NAMEDB'C:\PROGRAMS\TEST.DAT',0
11.5下面为保存文件代号定义的变量有什么错误?
FILE_HNDLDB?
答:文件代号是字类型,因此应改为:
FILE_HNDLDW?
11.6在ASCPATH字节变量中为驱动器D的文件PATIENT.LST,请定义ASCIZ串。
答:ASCPATHDB'D:\PATIENT.LST',0
11.7对11.6题中的文件,它的每个记录包含:
病例号(patientnumber):5字符,姓名(name):20字符,
城市(city):20字符,街道(streetaddress):20字符,
出生年月(mmddyy):6字符,性别(M/Fcode):1字符,
病房号(roomnumber):2字符,床号(bednumber):2字符,
(1)定义病人记录的各个域(2)定义保存文件代号的变量FHANDLE
(3)建文件(4)把PATNTOUT中的记录写入
(5)关文件(6)以上文件操作包括测试错误
答:(1)PATNTOUTEQUTHISBYTE
patientDB5DUP(?)
nameDB20DUP(?)
cityDB20DUP(?)
streetDB20DUP(?)
mmddyyDB6DUP(?)
M_FcodeDB?
roomDB2DUP(?)
bedDB2DUP(?),OAH,ODH
COUNT=$-PATNTOUT;记录长度
(2)FHANDLEDW?
(3)MOVAH,3CH;建文件功能
MOVCX,00;普通文件属性
LEADX,ASCPATH
INT21H
JCERROR
MOVFHANDLE,AX;保存文件代号
(4)MOVAH,40H;写文件功能
MOVBX,FHANDLE;取文件代号
MOVCX,COUNT;记录长度
LEADX,PATNTOUT;记录的首地址
INT21H
JCERROR
CMPAX,COUNT;所有的字节都写入了吗?
JNEERROR1
(5)MOVAH,3EH;关闭文件功能
MOVBX,FHANDLE;取文件代号
INT21H
JCERROR
(6)文件操作的测试错误已包括在(3)、(4)、(5)的操作中。
11.8对11.7题的文件,用文件代号式编写一个完整的读文件程序,读出的每个
记录存入PATNTIN并在屏幕上显示。
答:程序如下:
TITLEREADDISP.EXE;利用文件代号式顺序读文件程序
;Readdiskrecordscreatedbyhancreat
.modelsmall
.stacklOOh
・data
endcdedb0;结束处理指示
fhandledw?
patntindb80DUP('');DTA
ascpathdb'd:\patient.lst’,0
openmsgdb'***openerror***',Odh,Oah
readmsgdb'***readerror***',Odh,Oah
rowdb0
,code
beginprocfar
movax,@data
movds,ax
moves,ax
movax,0600h
callscreen;清屏
callcurs;设置光标
callopenh;打开文件,设置DTA
cmpendcde,0;打开错误吗?
jnzaO;错误,转结束
contin:callreadh;读磁盘记录
cmpendcde,0;读错误吗?
jnzaO;错误,转结束
calldisph;没错,显示记录
jmpcontin
aO:movax,4c00h;退出程序,返回DOS
int21h
beginendp
;打开文件
openhprocnear
movah,3dh
moval,0
leadx,ascpath
int21h
jcbl;打开错误吗?
movfhandle,ax;没有错,保存文件代号
ret
bl:movendcde,01;打开错误,指示结束处理
leadx,openmsg
callerrm;显示出错信息
ret
openhendp
;读磁盘记录
readhprocnear
movah,3fh
movbx,fhandle
movex,80
leadx,patntin
int21h
jccl;读错误吗?
empax,0;文件已读完吗?
jec2;读完,退出
ret
cl:leadx,openmsg;读错误
callerrm;显示出错信息
c2:movendede,01;读错误或文件读完,指示结束处理
ret
readhendp
;显示记录
disphprocnear
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,80
leadx,patntin
int21h
cmprow,24;已到屏幕底部吗?
jaedl;已到屏幕底部,退出
incrow
ret
dl:movax,0601h
callscreen;屏幕上卷一行
callcurs;设置光标
ret
disphendp
♦
;屏幕上卷
screenprocnear;入口参数为ax
movbh,leh;设置颜色
movex,0;屏幕左上角
movdx,184fh;屏幕右下角
intlOh
ret
screenendp
;设置光标
cursprocnear
movah,2;设置光标
movbh,0
movdh,row;行号
movdl,0;列号
intlOh
ret
cursendp
;显示出错信息
errmprocnear
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,20
int21h
ret
errmendp
endbegin
11.9编写建立并写入磁盘文件的程序。允许用户从键盘键入零件号(3字符),
零(配)件名称(12字符),单价(1个字)。程序使用文件代号式建立含有这些信息
的文件。注意要把单价从ASCH码转换为二进制数。下面是输入的例子:
part#Descriptionprice
part#Descriptionprice
023Assemblers00315
024Linkages00430
027Compilers00525
049Compressors00920
114Extractors11250
117Haulers00630
122Lifters10520
124Processors21335
127Labtiers00960
232Bailers05635
237Grinders08250
999000
答:程序如下:
TITLEHANCREAT.EXE;利用文件代号式建立文件程序
.modelsmall
.stacklOOh
・data
prompt1db,PleaseinputPart#:$';提示输入零件号
prompt2db'PleaseinputDescription:$';提示输入零件名称
promptsdb'PleaseinputPrice:$,;提示输入单价
maxlendb13;最大输入长度,输入字符串功能的缓冲区
actlendb?;实际输入长度
bufferdb13DUP('');输入字符串缓冲区
crlfdbOdh,Oah,'$'
pathnamedbJfilename.lst,,0
handledw?
dtadb19DUP('');DTA
errcdedb0;错误处理指示
opnmsgdb'***openerror***',Odh,Oah
wrtmsgdb'***writeerror***',Odh,Oah
.code
beginprocfar
movax,@data
movds,ax
moves,ax
movax,0600h
callscren;清屏
callcurs;设置光标
callcreath;建立文件
cmperrcde,0;建立错误吗?
jnzaO;错误,转结束
contin:callproch;记录处理
cmpactlen,0;输入的字符串长度为0,结束输入吗?
jnecontin;不结束,继续
callclseh;结束输入,关闭文件
aO:movax,4c00h;退出程序,返回DOS
int21h
beginendp
;建立文件
creathprocnear
movah,3ch
movex,0;普通属性
leadx,pathname
int21h
jcbbb;建立文件错误吗?
movhandle,ax;没有错,保存文件代号
ret
bbb:leadx,opnmsg;建立文件错误
callerrm;显示出错信息
ret
creathendp
;接收输入
prochprocnear
cld
leadi,dta;在选中设置dta的首地址
leadx,prompt1;输入零件号
movbx,3;零件号最多3个字符
callin_proc
jcexit;没有输入,结束
leadx,prompt2;输入零件名称
movbx,12;零件名称最多12个字符
callin_proc
jcexit;没有输入,结束
leadx,prompts;输入单价
movbx,5;零件单价最多5个十进制字符(相当于一个二进制字)
callin_proc
calldec_bin;将十进制的单价转换为二进制的单价
movwordptr[dta+17],OaOdh;在DTA的最后插入回车换行符
callwrith;用文件代号法写记录
exit:ret
prochendp
;输入字符串子程序
inprocprocnear
movah,09h;显示提示信息
int21h
pushdi
leadi,buffer;在buffer中填入空格符
movcl,maxlen
movch,0
moval,
repstosb
popdi
movah,Oah;输入字符串
leadx,maxlen
int21h
calldispcrlf
cmpactlen,0;实际输入字符数=0,则没有输入,结束
jeend_in
pushdi
leadi,buffer;在buffer的后面填入空格符
moval,actlen
movah,0
adddi,ax
movcl,maxlen
movch,0
moval,actlen
subcl,al
moval,
repstosb
popdi
leasi,buffer;将buffer缓冲区内容送入dta
movex,bx
repmovsb;将输入内容送入dta
clc;有输入字符,返回(cf)=O
jmpin_end
end_in:stc;没有输入字符,返回(cf)二l
in_end:ret
in_procendp
;将十进制的单价转换为二进制的单价子程序
dec_binprocnear
movbx,0
movsi,0
movex,5
transfer:moval,buffer[si];从十进制的高位到低位取数
empal,Odh;是回车吗?
jedec_binl
empal,'';是空格吗?
jedec_binl
andal,Ofh;将ascii码转换为十进制数
movah,0
pushex
xchgax,bx;十进制数高位X10+低位二二进制数
movex,10
mulex
xchgax,bx
addbx,ax;转换的二进制数在(bx)中
popex
incsi
looptransfer
dec_binl:movwordptr[dta+15],bx;存入单价到dta中的单价位置
ret
dec_binendp
;用文件代号法写记录
writhprocnear
movah,40h
movbx,handle
movex,19
leadx,dta
int21h
jncddd;写文件错误吗?
leadx,wrtmsg
callerrm;显示出错信息
movactlen,0
ddd:ret
writhendp
;用文件代号法关闭文件
clsehprocnear
movdta,lah;写文件结束符lah
callwrith
movah,3eh
movbx,handle
int21h
ret
clsehendp
;屏幕上卷
screnprocnear;入口参数为ax
movbh,leh;设置颜色
movex,0;屏幕左上角
movdx,184fh;屏幕右下角
intlOh
ret
screnendp
;设置光标
cursprocnear
movah,2;设置光标
movbh,0
movdh,0;行号
movdl,0;列号
intlOh
ret
cursendp
;显示出错信息
errmprocnear
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,20
int21h
moverrcde,01;错误代码置1
ret
errmendp
dispcrlfprocnear;显示回车换行符子程序
leadx,crlf
movah,09h
int21h
ret
disp_crlfendp;disp_crlf子程序结束
endbegin;汇编语言源程序结束
11.10编写一个程序使用文件代号式读出并显示11.9题建立的文件。注意,要
把二进制数表示的单价转换为ASCII码。
答:用文件代号式读出并显示文件,程序如下:
TITLEHANDREAD.EXE;利用文件代号式顺序读并显示文件程序
;Readdiskrecordscreatedbyhancreat
.modelsmall
.stacklOOh
・data
endcdedb0;结束处理指示
crlfdbOdh,Oah,'$'
pathnamedb'filename.1st',0
messagedb'Part#DescriptionPrice',Odh,Oah,'$'
handledw?
tacklinedb|$'
dtadb19DUP('');DTA
errcdedb0;错误处理指示
opnmsgdb'***openerror***',Odh,Oah
readmsgdb'***readerror***',Odh,Oah
rowdb0
.code
beginprocfar
movax,©data
movds,ax
moves,ax
movax,0600h
callscreen;清屏
callcurs;设置光标
leadx,message;显示标题
movah,09h
int21h
incrow
callopenh;打开文件,设置DTA
cmpendcde,0;打开错误吗?
jnzaO;错误,转结束
contin:callreadh;读磁盘记录
cmpendcde,0;读错误吗?
jnzaO;错误,转结束
calldisph;没错,显示记录
jmpcontin
aO:movax,4c00h;退出程序,返回DOS
int21h
beginendp
;打开文件
openhprocnear
movah,3dh
moval,0
leadx,pathname
int21h
jcbbb;打开错误吗?
movhandle,ax;没有错,保存文件代号
ret
bbb:movendcde,01;打开错误,指示结束处理
leadx,readmsg
callerrm;显示出错信息
ret
openhendp
;读磁盘记录
readhprocnear
movah,3fh
movbx,handle
movex,19
leadx,dta
int21h
jccl;读错误吗?
empax,0;文件已读完吗?
jec2;读完,退出
cmpdta,lah;文件结束符吗?
Jec2
ret
cl:leadx,opnmsg;读错误
callerrm;显示出错信息
c2:movendcde,01;读错误或文件读完,指示结束处理
ret
readhendp
;显示记录
disphprocnear
leadx,tackline;显示输出“I"
movah,09h
int21h
movah,40h;向标准输出设备(文件代号=01)写文件
movbx,01;标准输出设备的文件代号二01
movex,3
leadx,dta
int21h
leadx,tackline;显示输出“|"
movah,09h
int21h
movah,40h;向标准输出设备(文件代号=01)写文件
movbx,01;标准输出设备的文件代号=01
movex,12
leadx,dta+3
int21h
leadx,tackline;显示输出“|"
movah,09h
int21h
movsi,wordptr[dta+15]
callbin_dec;转换为十进制数显示
leadx,tackline;显示输出a\"
movah,09h
int21h
calldisp_crlf
cmprow,24;已到屏幕底部吗?
jaeddd;已到屏幕底部,退出
incrow
ret
ddd:movax,0601h
callscreen;屏幕上卷一行
callcurs;设置光标
ret
disphendp
;将二进制的单价转换为十进制的单价并显示子程序
bin_decprocnear
pushex
movex,lOOOOd
calldejdiv;调除法并显示输出子程序
movex,lOOOd
calldec_div
movex,lOOd
calldec_div
movex,lOd
calldec_div
movex,Id
calldec_div
popex
ret
bin_decendp
;除法并显示输出子程序
dec_divprocnear
movax,si
movdx,0
divex
movsi,dx;余数保存在(si)中作下一次的除法
movdl,al;商(在00h~09h范围内)送(dl)
adddl,30h;转换为0〜9的ascii码
movah,02h;显示输出
int21h
ret
dec_divendp
;屏幕上卷
screenprocnear;入口参数为ax
movbh,leh;设置颜色
movex,0;屏幕左上角
movdx,184fh;屏幕右下角
intlOh
ret
screenendp
;设置光标
cursprocnear
movah,2;设置光标
movbh,0
movdh,row;行号
movdl,0;列号
intlOh
ret
cursendp
;显示出错信息
errmprocnear
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,20
int21h
ret
errmendp
disp_crlfprocnear;显示回车换行符子程序
leadx,crlf
movah,09h
int21h
ret
disp_crlfendp;disp_crlf子程序结束
endbegin
11.11对IL9题建立的文件按下面的要求编写程序:
(1)把所有的记录读入内存的数据缓冲区TABLE;
(2)显示字符串提示用户输入零(配)件号及其数量;
(3)按零件搜索TABLE;
(4)如果发现所要求的零件,用它的单价计算出总价(单价X数量);
(5)显示零(配)件说明及总价值。
答:程序如下:
TITLEREAD11.EXE;利用文件代号式读并计算显示程序
;Readdiskrecordscreatedbyhancreat
.modelsmall
.stacklOOh
.data
endcdedb0;结束处理指示
pathnamedb'filename.1st,,0
in_mesldb'请输入3位数的零件号Part#:','
in_mes2db'请输入该零件的数量:
out_mesldb'输入的不是数字!请重新输入数字:‘,飞’
outjnes2db'输入的零件号不存在!请重新输入3位数的零件号Part#:
in_bufferdb6,?,6dup(20h);输入缓冲区
messagedb'Part#DescriptionSum_Price,,Odh,Oah,,$'
tacklinedb|$'
sum_pricedw0,0
decimaldb10DUP(O),'$'
crlfdbOdh,Oah,'$'
handledw?
tabledb19*100DUPf');table,足够大
errcdedb0;错误处理指示
opnmsgdb'***openerror***',Odh,Oah
readmsgdb'***readerror***',Odh,Oah
,code
beginprocfar
movax,©data
movds,ax
moves,ax
movax,0600h
callscreen;清屏
callcurs;设置光标
callopenh;打开文件,设置TABLE
cmpendcde,0;打开错误吗?
jnzaO;错误,转结束
callreadh;读磁盘记录
cmpendcde,0;读错误吗?
jnzaO;错误,转结束
callin_Part;没错,输入零件号和零件数量
aO:movax,4c00h;退出程序,返回DOS
int21h
beginendp
;打开文件
openhprocnear
movah,3dh
moval,0
leadx,pathname
int21h
jcbbb;打开错误吗?
movhandle,ax;没有错,保存文件代号
ret
bbb:movendcde,01;打开错误,指示结束处理
leadx,opnmsg
callerrm;显示出错信息
ret
openhendp
;读磁盘记录
readhprocnear
movah,3fh
movbx,handle
movex,19*100;准备读入的字节数
leadx,table
int21h
jccl;读错误吗?
cmpax,0;文件已读完吗?
jec2;读完,退出
cmptable,lah;文件结束符吗?
Jec2
movbp,ax;读成功则在AX中返回实际读入的字节数存入bp
ret
cl:leadx,readmsg;读错误
callerrm;显示出错信息
c2:movendcde,01;读错误或文件读完,指示结束处理
ret
readhendp
;输入零件号和零件数量
in_Partprocnear
leadx,in_mesl;显示提示信息,提示输入零件号
in_Partl:callinput;输入数据
cmpin_buffer+l,3;输入的零件号个数是3位吗?
leadx,out_mes2;显示提示信息,提示重新输入零件号
jnein_Partl
cld
movax,bp;取实际读入文件的字节数
movcl,19;每个记录的长度为19个字符
divcl;计算实际读取的记录数在al中
movbl,al
movbh,0;从第0个记录开始顺序查找
in_Part2:leasi,in_buffer+2;查找零件号对应的零件
leadi,table
moval,19
mulbh
adddi,ax;计算某个记录的首地址
movwordptrdecimal,di;保存首地址
movex,3
repeempsb
jein_Part3;找到对应的零件
incbh;找下一个记录
empbh,bl
jbin_Part2
jmpin_Partl;未找到对应的零件重新输入
inPart3:leadx,inmes2;显示提示信息,提示输入零件数量
callinput;输入数据
calldec_bin;将输入数据转换为二进制数,在bx中
movdi,wordptrdecima;di指向该记录的首地址
movax,[di+15];取单价
mulbx;总价格在(dx),(ax)中
movsum_price,ax
movsum_price+2,dx
calldisprec;显示信息
ret
in_Partendp
;输入数据
inputprocnear
inputl:movah,09h;显示字符串
int21h
movah,Oah;输入字符串
leadx,in_buffer
int21h
leadx,out_mesl;显示提示信息
movcl,in_buffer+l
cmpcl,0;输入的数字个数为。吗?
jzinputl
movch,0
movbx,2
input2:moval,in_buffer[bx];输入的是数字0〜9吗?
cmpal,'O'
jbinputl
cmpal,’9
jainputl
incbx
loopinput2
ret
inputendp
;将十进制数转换为二进制数子程序
dec_binprocnear
movbx,0
movsi,2
movcl,in_buffer+l
movch,0
transfer:moval,in_buffer[si];从十进制的高位到低位取数
andal,Ofh;将ascii码转换为十进制数
movah,0
pushex
xchgax,bx;十进制数高位义10+低位=二进制数
movex,10
mulex
addbx,ax;转换的二进制数在(bx)中
popex
incsi
looptransfer
ret
dec_binendp
;显示记录
disp_recprocnear
calldisp_crlf
leadx,message;显示标题
movah,09h
int21h
leadx,tackline;显示输出a\”
movah,09h
int21h
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,3;显示3位数的零件号
movdx,wordptrdecima;dx才旨向该记录的首地址
int21h
leadx,tackline;显示输出“I"
movah,09h
int21h
movah,40h;向标准输出设备(文件代号二01)写文件
movbx,01;标准输出设备的文件代号二01
movex,12;显示12位的零件说明
movdx,wordptrdecima;dx指向该记录的首地址
adddx,3
int21h
leadx,tackline;显示输出“I"
movah,09h
int21h
callbin_dec;总价格转换为十进制数显示
leadx,tackline;显示输出“|"
movah,09h
int21h
calldisp_crlf
ret
disprecendp
;4字节二进制数转换为10进制子程序
bin_decprocnear
movbx,0;10字节的bed码单元清0
movex,10
bin_decl:movdecimal[bx],0
incbx
loopbin_decl
movex,4*8;4字节二进制数共4*8=32位
bin_dec2:movbx,10-1;计算(((a31*2+a30)*2+a29)..・)*2+a0
shlwordptr[sumprice],1;4字节二进制数左移1位
rclwordptrEsum_price+2],1
pushex
movex,10
bin_dec3:moval,decimal[bx];计算(.・・)*2+ai,ai由进位位带入
adcal,al
aaa;非压缩bed码加法调整
movdecimal[bx],al
decbx
loopbin_dec3
popex
loopbin_dec2
calldisp
ret
bin_decendp
dispprocnear;显示输出子程序
movex,10
movbx,0
displ:adddecimal[bx],30h;变为ascii码
incbx
loopdispl
movex,10;下面5条指令是为了不显示数据左边的“0”
eld
leadi,decimal
moval,30h;30h为“0”的ascii码
repescasb
decdi
movdx,di
movah,09h
int21h
ret
dispendp;disp子程序结束
;屏幕上卷
screenprocnear;入口参数为ax
movbh,leh;设置颜色
movex,0;屏幕左上角
movdx,184fh;屏幕右下角
intlOh
ret
screenendp
;设置光标
cursprocnear
movah,2;设置光标
movbh,0
movdh,0;行号
movdl,0;列号
intlOh
ret
cursendp
;显示出错信息
errmprocnear
movah,40h;向标准输出设备(文件代号=01)写文件
movbx,01;标准输出设备的文件代号二01
movex,20
int21h
ret
errmendp
disp_crlfprocnear;显示回车换行符子程序
leadx,crlf
movah,09h
int21h
ret
disp_crlfendp;disp_crlf子程序结束
endbegin
11.12用随机处理记录的方式编写程序,将用户需要的零(配)件记录读取到
TABLE,并根据键入的数量,计算出总价值,然后显示出零(配)件说明及总价值。
答:程序如下:
TITLEREAD_RAN.EXE;利用文件代号式随机读并计算显示程序
;Readdiskrecordscreatedbyhancreat
.modelsmall
.stacklOOh
・data
endcdedb0;结束处理指示
pathnamedb'filename.lst,,0
in_mesldb'请输入3位数的零件号Part#:','
in_mes2db'请输入该零件的数量:','
out_mesldb'输入的不是数字!请重新输入数字:
out_mes2db'输入的零件号不存在!请重新输入3位数的零件号Part#:
in_bufferdb6,?,6dup(20h);输入缓冲区
messagedb'Part#DescriptionSum_Price,,Odh,Oah,'$'
tacklinedb|$'
sum_pricedw0,0
decimaldb10DUP(O),
crlfdbOdh,Oah,'$'
handledw?
tabledb19DUP(,');table
errcdedb0;错误处理指示
opnmsgdb'***openerror***',Odh,Oah
readmsgdb'***readerror***',Odh,Oah
movmsgdb'***moveerror***',Odh,Oah
.code
beginprocfar
movax,@data
movds,ax
moves,ax
movax,0600h
callscreen;清屏
callcurs;设置光标
callopenh;打开文件,设置TABLE
cmpendcde,0;打开错误吗?
jnzaO;错误,转结束
callin_Part;没错,输入零件号和零件数量
aO:movax,4c00h;退出程序,返回DOS
int21h
beginendp
;打开文件
openhprocnear
movah,3dh
moval,0
leadx,pathname
int21h
jcbbb;打开错误吗?
movhandle,ax;没有错,保存文件代号
ret
bbb:movendcde,01;打开错误,指示结束处理
leadx,opnmsg
callerrm;显示出错信息
ret
openhendp
;读磁盘记录
readhprocnear
movah,3fh
movbx,handle
movex,19;准备读入的字节数
leadx,table
int21h
jccl;读错误吗?
cmpax,0;文件已读完吗?
jec2;读完,退出
cmptable,lah;文件结束符吗?
Jec2
movbp,ax;读成功则在AX中返回实际读入的字节数存入bp
ret
cl:movendcde,01;读错误或文件读完,指示结束处理
leadx,readmsg;读错误
callerrm;显示出错信息
jmpc3
c2:movendcde,02;读错误或文件读完,指示结束处理
c3:ret
readhendp
f
;绝对移动文件读写指针
mov_pointerprocnear
movah,42h
moval,0
movbx,handle
int21h
jcdl;错误吗?
ret
dl:leadx,movmsg;错误
callerrm;显示出错信息
movendcde,01;错误,指示结束处理
ret
mov_pointerendp
;输入零件号和零件数量
in_Partprocnear
leadx,in_mesl;显示提示信息,提示输入零件号
in_Partl:callinput;输入数据
cmpin_buffer+l,3;输入的零件号个数是3位吗?
leadx,out_mes2;显示提示信息,提示重新输入零件号
jnein_Partl
cld
movex,0;位移量的高位字
movdx,0;位移量的低位字
callmov_pointer;绝对移动文件读写指针到文件首
inPart2:callreadh;读磁盘记录
cmpendede,2;读文件结束吗?
jein_Partl;结束,未找到对应的零件重新输入
cmpendede,1;读错误吗?
jein_Part4;错误,转结束
leasi,in_buffer+2;查找零件号对应的零件
leadi,table
movex,3
repeempsb
jein_Part3;找到对应的零件
jmpin_Part2;找下一'个零件
inPart3:leadx,in_mes2;显示提示信息,提示输入零件数量
callinput;输入数据
calldec_bin;将输入数据转换为二进制数,在bx中
leadi,table;di指向该记录的首地址
movax,[di+15];取单价
mulbx;总价格在(dx),(ax)中
movsum_price,ax
movsum_price+2,dx
calldisp_rec;显示信息
in_Part4:ret
in_Partendp
;输入数据
inputprocnear
inputl:movah,09h;显示字符串
int21h
movah,Oah;输入字符串
leadx,in_buffer
int21h
leadx,out_mesl;显示提示信息
movcl,in_buffer+l
cmpcl,0;输入的数字个数为0吗?
jzinputl
movch,0
movbx,2
input2:moval,in_buffer[bx];输入的是数字0、9吗?
cmpal,'O'
jbinputl
cmpal,’9’
jainputl
incbx
loopinput2
ret
inputendp
;将十进制数转换为二进制数子程序
dec_binprocnear
movbx,0
movsi,2
movcl,in_buffer+l
movch,0
transfer:moval,inbuffer[si];从十进制的高位到低位取数
andal,Ofh;将ascii码转换为十进制数
mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班月度工作计划范文
- 2024年版职工岗位聘用协议样本版B版
- 五年级上册教学计划三篇
- 服装店工作计划锦集
- 小学教学计划模板合集六篇
- 2023传染病防控工作计划
- 在酒店实习报告合集10篇
- 蓝金色大气工作汇报模板
- 五年级感恩节的作文400字5篇
- 第三季度营销策划工作总结与计划
- 期末 (试题) -2024-2025学年外研版(三起)(2024)英语三年级上册
- 规范集团中层管理人员退休返聘的若干规定
- 无机及分析化学考试题(附答案)
- “小学数学分层教学研究与实践”课题成果报告
- 航海仪器页课件
- 刘禹锡《陋室铭》课件(17张)
- 2022-2023学年龙泉驿区三年级数学第一学期期末综合测试试题含解析
- 膝关节病护理查房ppt
- 西交《电子商务技术》在线作业答卷
- 2022年工程项目经理任命书
- 《中国古代文学史——李白》优秀PPT课件
评论
0/150
提交评论