汇编课后习题答案-第十一章_第1页
汇编课后习题答案-第十一章_第2页
汇编课后习题答案-第十一章_第3页
汇编课后习题答案-第十一章_第4页
汇编课后习题答案-第十一章_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首页入门学习程序员计算机考研计算机)了•出下载硬件知识网络知识专业课程答粢下载视频教程下载

第十一章

作者:佚名来源:网络

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论