IBMPC汇编语言程序设计第2版课后参考答案沈美明温冬婵_第1页
IBMPC汇编语言程序设计第2版课后参考答案沈美明温冬婵_第2页
IBMPC汇编语言程序设计第2版课后参考答案沈美明温冬婵_第3页
IBMPC汇编语言程序设计第2版课后参考答案沈美明温冬婵_第4页
IBMPC汇编语言程序设计第2版课后参考答案沈美明温冬婵_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

附录IBMPC汇编语言程序设计习题参考答案第一章习题11用降幂法和除法将下列十进制数转换为二进制数和十六进制数136921000034095432767答1369101110001B171H21000010011100010000B2710H34095111111111111BFFFH432767111111111111111B7FFFH12将下列二进制数转换为十六进制数和十进制数110110121000000031111111111111111411111111答1101101B2DH45210000000B80H12831111111111111111BFFFFH65535411111111BFFH25513将下列十六进制数转换为二进制数和十进制数1FA25B3FFFE41234答1FAH11111010B25025BH1011011B913FFFEH1111111111111110B6553441234H1001000110100B466014完成下列十六进制数的运算,并转换为十进制数进行校核13AB721234AF3ABCDFE47AB6F答13AB7HF1H24121234AFH12E3H48353ABCDFEHAACFH4372747AB6FH35325H21789315下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。185762857638576485765857668576答1857610101011B01001100B11110111B0F7H;CF0;OF02857601010101B10110100B00001001B09H;CF1;OF03857601010101B01001100B01010101B10110100B00001001B09H;CF0;OF04857601010101B10110100B01010101B01001100B10100001B0A1H;CF0;OF15857610101011B01001100B10101011B10110100B01011111B5FH;CF0;OF16857610101011B10110100B10101011B01001100B11110111B0F7H;CF0;OF016下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么1D82FF答1D8H表示的带符号数为40,D8H表示的无符号数为216;2FFH表示的带符号数为1,FFH表示的无符号数为255。17下列各数均为用十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的数或字符的ASCII码时,它们所表示的十进制数及字符是什么14F22B373459答14FH表示的十进制数为79,4FH表示的字符为O;22BH表示的十进制数为43,2BH表示的字符为;373H表示的十进制数为115,73H表示的字符为S;459H表示的十进制数为89,59H表示的字符为Y。18请写出下列字符串的ASCII码值。FOREXAMPLE,THISISANUMBER3692答46H6FH72H20H65H78H61H6DH70H6CH65H2CH0AH0DH54H68H69H73H20H69H73H20H61H20H6EH75H6DH62H65H72H20H33H36H39H32H2EH0AH0DH第二章习题21在80X86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00FFH的端口号。试问可直接由指令指定的I/O端口数。答可直接由指令指定的I/O端口数为256个。22有两个16位字1EE5H和2A3CH分别存放在80X86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。答存储器里的存放情况如右上图所示。23在IBMPC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。答30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元的内容为AB34H;30022H字单元的内容为CDABH。24在实模式下,段地址和偏移地址为3017000A的存储单元的物理地址是什么如果段地址和偏移地址是3015002A和3010007A呢答3017000A、3015002A和3010007A的存储单元的物理地址都是3017AH。25如果在一个程序开始执行以前CS0A7F0H,如16进制数的最高位为字母,则应在其前加一个0IP2B40H,试问该程序的第一个字的物理地址是多少答该程序的第一个字的物理地址是0AAA40H。26在实模式下,存储器中每一段最多可有10000H个字节。如果用调试程序DEBUG的R命令在终端上显示出当前各寄存器的内容如下,请画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。CDEBUGRAX0000BX0000CX0079DX0000SPFFEEBP0000SI0000DI0000DS10E4ES10F4SS21F0CS31FFIP0100NVUPDIPLNZNAPONC答此时存储器分段的示意图如右图所示。OF、SF、ZF、CF的值都为0。27下列操作可使用那些寄存器1加法和减法数据寄存器等2循环计数CX3乘法和除法AX、DX,乘数和除数用其他寄存器或存储器4保存段地址段寄存器5表示运算结果为0ZF16将要执行的指令地址CSIP7将要从堆栈取出数据的地址SSSP答答案见题目的右边。28那些寄存器可以用来指示存储器地址答BX、BP、SI、DI、堆栈操作时的SP、对应的段地址、386及其后继机型的EXX。29请将下列左边的项和右边的解释联系起来把所选字母放在括号中1CPUMA保存当前栈顶地址的寄存器。2存储器CB指示下一条要执行的指令的地址。3堆栈DC存储程序、数据等信息的记忆装置,微机有RAM和ROM两种。4IPBD以后进先出方式工作的存储空间。5SPAE把汇编语言程序翻译成机器语言程序的系统程序。6状态标志LF唯一代表存储空间中每个字节单元的地址。7控制标志KG能被计算机直接识别的语言。34H30021HABH30022HCDH30023HEFH30024H存储器23题的信息存放情况12H30020HE5H000B0H1EH000B1H3CH000B3H2AH000B4H存储器22题的信息存放情况000B2H10F4010E4020F4020E4021F0031F0031FF041FF0附加段数据段堆栈段代码段26题的存储器分段示意图8段寄存器JH用指令的助记符、符号地址、标号等符号书写程序的语言。9物理地址FI把若干个模块连接起来成为可执行文件的系统程序。10汇编语言HJ保存各逻辑段的起始地址的寄存器,8086/8088机有四个CS、DS、SS、ES。11机器语言GK控制操作的标志,如DF位。12汇编程序EL记录指令操作结果的标志,共6位OF、SF、ZF、AF、PF、CF。13连接程序IM分析、控制并执行指令的部件,由算术逻辑部件ALU和寄存器等组成。14指令ON由汇编程序在汇编过程中执行的指令。15伪指令NO告诉CPU要执行的操作一般还要指出操作数地址,在程序运行时执行。答答案见题目的括号中。第三章习题31给定BX637DH,SI2A9BH,位移量D7237H,试确定在以下各种寻址方式下的有效地址是什么1立即寻址2直接寻址3使用BX的寄存器寻址4使用BX的简接寻址5使用BX的寄存器相对寻址6基址变址寻址7相对基址变址寻址答1操作数在指令中,即立即数;2EAD7237H;3无EA,操作数为BX637DH;4EABX637DH;5EABXD0D5B4H;6EABXSI8E18H;7EABXSID1004FH;超过了段的边界,最高进位位丢失,因此EA004FH。32试根据以下要求写出相应的汇编语言指令1把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。2用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。3用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX相加,并把结果送回存储器中。4用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。5把数0B5H与AL相加,并把结果送回AL中。答1ADDDX,BX2ADDAL,BXSI3ADDBX0B2H,CX4ADDWORDPTR0524H,2A59H5ADDAL,0B5H33写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式1寄存器间接寻址2寄存器相对寻址3基址变址寻址答1MOVBX,OFFSETBLOCKADDBX,612MOVDX,BX2MOVBX,OFFSETBLOCK改为MOVBX,612MOVDX,BX612也可MOVDX,BLOCKBX3MOVBX,OFFSETBLOCKMOVSI,612MOVDX,BXSI34现有DS2000H,BX0100H,SI0002H,20100H12H,20101H34H,20102H56H,20103H78H,21200H2AH,21201H4CH,21202HB7H,21203H65H,试说明下列各条指令执行完后AX寄存器的内容。1MOVAX,1200H2MOVAX,BX3MOVAX,1200H4MOVAX,BX5MOVAX,1100BX6MOVAX,BXSI7MOVAX,1100BXSI答1AX1200H2AX0100H3AX4C2AH4AX3412H5AX4C2AH6AX7856H7AX65B7H35给定IP2BC0H,CS0200H,位移量D5119H,BX1200H,DS212AH,224A0H0600H,275B9H098AH,试为以下的转移指令找出转移的偏移地址。1段内直接寻址2使用BX及寄存器间接寻址方式的段内间接寻址3使用BX及寄存器相对寻址方式的段内间接寻址答1JMPNEARPTR5119H;IP5119HIP03H7CDCH,物理地址PA09CDCHIP03H是JMPNEARPTR5119H指令的下一条指令的首地址。2JMPWORDPTRBX;IPDS10HBX0600H,PA02600H3JMPDBX;IPDS10HBXD098AH,PA0298AH36设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来。答MOVBX,2000H;图示如上所示。MOVAX,2000H2MOVES,AXMOVAX,ESBX37在0624H单元内有一条二字节JMPSHORTOBJ指令,如其中位移量为127H,26BH,30C6H,试问转向地址OBJ的值是多少答1OBJ0624H02H27H064DH2OBJ0624H02H6BH0691H3OBJ0624H02H0C6H05ECH;C6H对应的负数为3AH(向上转移,负位移量)38假定DS2000H,ES2100H,SS1500H,SI00A0H,BX0100H,BP0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么其物理地址值是多少1MOVAX,0ABH2MOVAX,BX3MOVAX,100H4MOVAX,VAL5MOVAX,BX6MOVAX,ESBX7MOVAX,BP8MOVAX,SI9MOVAX,BX1010MOVAX,VALBX11MOVAX,BXSI12MOVAX,VALBXSI答1立即方式;操作数在本条指令中FFH00H80H36题的作图表示10H1B002000H1B002001H1B002002H1B002003H8000FF10H8000FF11HALAHMOVBX,2000HLESBX,BXMOVAX,ESBX2寄存器寻址方式;操作数为BX0100H3直接寻址方式;PA20100H4直接寻址方式;PA20050H5BX寄存器间接寻址方式;PA20100H6附加段BX寄存器间接寻址方式;PA21100H7BP寄存器间接寻址方式;PA15010H8SI寄存器间接寻址方式;PA200A0H9BX寄存器相对寻址方式;PA20110H10BX寄存器相对寻址方式;PA20150H11BX和SI寄存器基址变址寻址方式;PA201A0H12BX和SI寄存器相对基址变址寻址方式;PA201F0H39在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下ARRAYDW23,36,2,100,32000,54,0ZERODW1如果BX包含数组ARRAY的初始地址,请编写指令将数据0传送给ZERO单元。2如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元。答1MOVAX,BX712MOVBX72,AX2MOVAX,ARRAYBXMOVARRAYBX2,AX310如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别指令执行完后AX寄存器的内容是什么MOVAX,TABLELEAAX,TABLE答MOVAX,TABLE是将TABLE单元的内容送到AX,AX1234HLEAAX,TABLE是将TABLE单元的有效地址送到AX,AX0032H311执行下列指令后AX寄存器中的内容是什么TABLEDW10,20,30,40,50;000AH,0014H,001EH,0028H,0032HENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,BX答AX1E00HTABLE的存储方式如右图所示312下列ASCII码串包括空格符依次存储在起始地址为CSTRING的字节单元中CSTRINGDBBASEDADDRESSING请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。答MOVDH,CSTRINGMOVDL,CSTRING71313已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的内容变化过程示意图标出存储单元的物理地址。答堆栈区和SP的内容变化过程示意图如下左图所示。314设DS1B00H,ES2B00H,有关存储单元的内容如上右图所示。请写出两条指令把字变量X0AH00H14H00H1EH00H28H00H32H00HTABLETABLE3311题的TABLE存储方式79H0FH57H80HFFAACHFFAB0H313题的堆栈区和SP的内容变化过程示意图FFAAEH首次进栈SPSP2再次进栈SPSP2出栈时SPSP28000H1B002000314题的存储区情况2B00HX1B0020022B008000装入AX寄存器。答MOVBX,2000HMOVAX,ESBX315求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF和OF的值。11234H24321H3CFA0H49D60H答1和为74D4H;SF0,ZF0,CF0,OF02和为A5C1H;SF1,ZF0,CF0,OF13和为3240H;SF0,ZF0,CF1,OF04和为0000H;SF0,ZF1,CF1,OF0316求出以下各十六进制数与十六进制数4AE0H的差值,并根据结果设置标志位SF、ZF、CF和OF的值。11234H25D90H39090H4EA04H答1差为C754H;SF1,ZF0,CF1,OF02差为12B0H;SF0,ZF0,CF0,OF03差为45B0H;SF0,ZF0,CF0,OF14差为9F24H;SF1,ZF0,CF0,OF0317写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。1ZWZX2ZWX6R93ZWX/Y6,R余数4ZWX/5Y2答1MOVAX,Z;以下程序都未考虑带符号数的溢出SUBAX,XADDAX,WMOVZ,AX2MOVBX,XADDBX,6MOVCX,RADDCR,9MOVAX,WSUBAX,BXSUBAX,CXMOVZ,AX3ADDY,6MOVAX,WIMULXIDIVYMOVZ,AXMOVR,DX4MOVAX,WSUBAX,XCWDMOVBX,5IDIVBXIMULYSHLAX,1;DX,AX2RCLDX,1318已知程序段如下MOVAX,1234H;AX1234H,标志位不变MOVCL,4;AX和标志位都不变ROLAX,CL;AX2341H,CF1,SF和ZF不变DECAX;AX2340H,CF1不变,SF0,ZF0MOVCX,4;AX和标志位都不变MULCX;AX8D00H,CFOF0,其它标志无定义INT20H试问1每条指令执行完后,AX寄存器的内容是什么2每条指令执行完后,进位、符号和零标志的值是什么3程序结束时,AX和DX的内容是什么答1见注释;2见注释;3AX8D00H,DX0319下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么MOVAX,0;AX0,标志位不变DECAX;AX0FFFFH,CF不变,SF1,ZF0,OF0ADDAX,7FFFH;AX7FFEH,CF1,SF0,ZF0,OF0ADDAX,2;AX8000H,CF0,SF1,ZF0,OF1NOTAX;AX7FFFH,标志位不变SUBAX,0FFFFH;AX8000H,CF1,SF1,ZF0,OF1ADDAX,8000H;AX0,CF1,SF0,ZF1,OF1SUBAX,1;AX0FFFFH,CF1,SF1,ZF0,OF0ANDAX,58D1H;AX58D1H,CF0,SF0,ZF0,OF0SALAX,1;AX0B1A2H,CF0,SF1,ZF0,OF1SARAX,1;AX0D8D1H,CF0,SF1,ZF0,OF0NEGAX;AX272FH,CF1,SF0,ZF0,OF0RORAX,1;AX9397H,CF1,SF和ZF不变,OF1答见注释。320变量DATAX和变量DATAY的定义如下DATAXDW0148HDW2316HDATAYDW0237HDW4052H请按下列要求写出指令序列1DATAX和DATAY两个字数据相加,和存放在DATAY中。2DATAX和DATAY两个双字数据相加,和存放在从DATAY开始的双字单元中。3解释下列指令的作用STCMOVBX,DATAXADCBX,DATAY4DATAX和DATAY两个字数据相乘用MUL。5DATAX和DATAY两个双字数据相乘用MUL。6DATAX除以23用DIV。7DATAX双字除以字DATAY用DIV。答1MOVAX,DATAXADDDATAY,AXMOVAX,DATAX2ADDDATAY2,AX2MOVAX,DATAXADDDATAY,AXMOVAX,DATAX2ADCDATAY2,AXMOVDATAY4,0;用于存放进位位ADCDATAY4,03DATAX和DATAY两个字数据之和加1,结果存入BX寄存器。4RESULT1DW0DW0RESULT2DW0DW0MOVAX,DATAXMULDATAYMOVRESULT1,AXMOVRESULT12,DXMOVAX,DATAX2MULDATAY2MOVRESULT2,AXMOVRESULT22,DX5AADW0BBDW0CCDW0DDDW0MOVAX,DATAXMULDATAYMOVAA,AXMOVBB,DXMOVAX,DATAXMULDATAY2ADDBB,AXADCCC,DXMOVAX,DATAX2MULDATAYADDBB,AXADCCC,DXADCDD,0MOVAX,DATAX2MULDATAY2ADDCC,AXADCDD,DX6MOVAX,DATAXMOVBL,23DIVBL7MOVDX,DATAX2MOVAX,DATAXDIVDATAY321写出对存放在DX和AX中的双字长数求补的指令序列。答NEGDX也可为NOTDXNEGAXNOTAXSBBDX,0ADDAX,1ADCDX,0322试编写一程序求出双字长数的绝对值。双字长数在A和A2单元中,结果存放在B和B2单元中。答程序段如下MOVAX,AMOVDX,A2CMPDX,0JNSZHENSHU;不是负数则转走NEGDXNEGAXSBBDX,0ZHENSHUMOVB,AXMOVB2,DXINT20H323假设BX0E3H,变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。1XORBX,VALUE;BX9AH,CF、OF都为0,AF无定义,SF1,ZF0,PF12ANDBX,VALUE;BX61H,CF、OF都为0,AF无定义,SF0,ZF0,PF03ORBX,VALUE;BX0FBH,CF、OF都为0,AF无定义,SF1,ZF0,PF04XORBX,0FFH;BX1CH,CF、OF都为0,AF无定义,SF0,ZF0,PF05ANDBX,0;BX00H,CF、OF都为0,AF无定义,SF0,ZF1,PF16TESTBX,01H;BX0E3H,CF、OF都为0,AF无定义,SF1,ZF0,PF0答见注释。324试写出执行下列指令序列后BX寄存器的内容。执行前BX6D16H。MOVCL,7SHRBX,CL答BX00DAH。325试用移位指令把十进制数53和49分别乘以2。它们应该用什么指令得到的结果是什么如果要除以2呢答MOVAL,53SALAL,1;AL5326AHMOVAL,49SALAL,1;AL4929EHMOVAL,53SARAL,1;AL53/21AHMOVAL,49SARAL,1;AL49/20E7H326试分析下面的程序段完成什么功能MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答本程序段将DX,AX的双字同时左移4位,即将此双字乘以10H16。327假定DX0B9H,CL3,CF1,确定下列各条指令单独执行后DX中的值。1SHRDX,1;DX05CH2SARDX,CL;DX17H3SHLDX,CL;DX5C8H4SHLDL,1;DX72H5RORDX,CL;DX2017H6ROLDL,CL;DX0CDH7SALDH,1;DX0B9H8RCLDX,CL;DX2CCH4RCRDL,1;DX0DCH答见注释。328下列程序段执行完后,BX寄存器的内容是什么MOVCL,3MOVBX,0B7HROLBX,1RORBX,CL答BX0C02DH。329假设数据段定义如下CONAMEDBSPACEEXPLORERSINCPRLINEDB20DUP用串指令编写程序段分别完成以下功能1从左到右把CONAME中的字符串传送到PRLINE。2从右到左把CONAME中的字符串传送到PRLINE。3把CONAME中的第3和第4个字节装入AX。4把AX寄存器的内容存入从PRLINE5开始的字节中。5检查CONAME字符串中有无空格字符,如有则把第一个空格字符的地址传送给BX寄存器。答1MOVCX,20CLDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMELEADI,PRLINEREPMOVSB2MOVCX,20STDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMEADDSI,201LEADI,PRLINEADDDI,201REPMOVSB3MOVAX,WORDPTRCONAME314MOVWORDPTRPRLINE5,AX5MOVAL,;空格的ASCII码送AL寄存器CLDMOVDI,SEGCONAMEMOVES,DILEADI,CONAMEREPNESCASBJNENEXTDECDIMOVBX,DINEXT330编写程序段,把字符串STRING中的利用文件代号式建立文件程序MODELSMALLSTACK100HDATAPROMPT1DBPLEASEINPUTPART提示输入零件号PROMPT2DBPLEASEINPUTDESCRIPTION提示输入零件名称PROMPT3DBPLEASEINPUTPRICE提示输入单价MAXLENDB13最大输入长度,输入字符串功能的缓冲区ACTLENDB实际输入长度BUFFERDB13DUP输入字符串缓冲区CRLFDB0DH,0AH,PATHNAMEDBFILENAMELST,0HANDLEDWDTADB19DUPDTAERRCDEDB0错误处理指示OPNMSGDBOPENERROR,0DH,0AHWRTMSGDBWRITEERROR,0DH,0AHCODEBEGINPROCFARMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,0600HCALLSCREN清屏CALLCURS设置光标CALLCREATH建立文件CMPERRCDE,0建立错误吗JNZA0错误,转结束CONTINCALLPROCH记录处理CMPACTLEN,0输入的字符串长度为0,结束输入吗JNECONTIN不结束,继续CALLCLSEH结束输入,关闭文件A0MOVAX,4C00H退出程序,返回DOSINT21HBEGINENDP建立文件CREATHPROCNEARMOVAH,3CHMOVCX,0普通属性LEADX,PATHNAMEINT21HJCBBB建立文件错误吗MOVHANDLE,AX没有错,保存文件代号RETBBBLEADX,OPNMSG建立文件错误CALLERRM显示出错信息RETCREATHENDP接收输入PROCHPROCNEARCLDLEADI,DTA在DI中设置DTA的首地址LEADX,PROMPT1输入零件号MOVBX,3零件号最多3个字符CALLIN_PROCJCEXIT没有输入,结束LEADX,PROMPT2输入零件名称MOVBX,12零件名称最多12个字符CALLIN_PROCJCEXIT没有输入,结束LEADX,PROMPT3输入单价MOVBX,5零件单价最多5个十进制字符相当于一个二进制字CALLIN_PROCCALLDEC_BIN将十进制的单价转换为二进制的单价MOVWORDPTRDTA17,0A0DH在DTA的最后插入回车换行符CALLWRITH用文件代号法写记录EXITRETPROCHENDP输入字符串子程序IN_PROCPROCNEARMOVAH,09H显示提示信息INT21HPUSHDILEADI,BUFFER在BUFFER中填入空格符MOVCL,MAXLENMOVCH,0MOVAL,REPSTOSBPOPDIMOVAH,0AH输入字符串LEADX,MAXLENINT21HCALLDISP_CRLFCMPACTLEN,0实际输入字符数0,则没有输入,结束JEEND_INPUSHDILEADI,BUFFER在BUFFER的后面填入空格符MOVAL,ACTLENMOVAH,0ADDDI,AXMOVCL,MAXLENMOVCH,0MOVAL,ACTLENSUBCL,ALMOVAL,REPSTOSBPOPDILEASI,BUFFER将BUFFER缓冲区内容送入DTAMOVCX,BXREPMOVSB将输入内容送入DTACLC有输入字符,返回CF0JMPIN_ENDEND_INSTC没有输入字符,返回CF1IN_ENDRETIN_PROCENDP将十进制的单价转换为二进制的单价子程序DEC_BINPROCNEARMOVBX,0MOVSI,0MOVCX,5TRANSFERMOVAL,BUFFERSI从十进制的高位到低位取数CMPAL,0DH是回车吗JEDEC_BIN1CMPAL,是空格吗JEDEC_BIN1ANDAL,0FH将ASCII码转换为十进制数MOVAH,0PUSHCXXCHGAX,BX十进制数高位10低位二进制数MOVCX,10MULCXXCHGAX,BXADDBX,AX转换的二进制数在BX中POPCXINCSILOOPTRANSFERDEC_BIN1MOVWORDPTRDTA15,BX存入单价到DTA中的单价位置RETDEC_BINENDP用文件代号法写记录WRITHPROCNEARMOVAH,40HMOVBX,HANDLEMOVCX,19LEADX,DTAINT21HJNCDDD写文件错误吗LEADX,WRTMSGCALLERRM显示出错信息MOVACTLEN,0DDDRETWRITHENDP用文件代号法关闭文件CLSEHPROCNEARMOVDTA,1AH写文件结束符1AHCALLWRITHMOVAH,3EHMOVBX,HANDLEINT21HRETCLSEHENDP屏幕上卷SCRENPROCNEAR入口参数为AXMOVBH,1EH设置颜色MOVCX,0屏幕左上角MOVDX,184FH屏幕右下角INT10HRETSCRENENDP设置光标CURSPROCNEARMOVAH,2设置光标MOVBH,0MOVDH,0行号MOVDL,0列号INT10HRETCURSENDP显示出错信息ERRMPROCNEARMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,20INT21HMOVERRCDE,01错误代码置1RETERRMENDPDISP_CRLFPROCNEAR显示回车换行符子程序LEADX,CRLFMOVAH,09HINT21HRETDISP_CRLFENDPDISP_CRLF子程序结束ENDBEGIN汇编语言源程序结束1110编写一个程序使用文件代号式读出并显示119题建立的文件。注意,要把二进制数表示的单价转换为ASCII码。答用文件代号式读出并显示文件,程序如下TITLEHANDREADEXE利用文件代号式顺序读并显示文件程序READDISKRECORDSCREATEDBYHANCREATMODELSMALLSTACK100HDATAENDCDEDB0结束处理指示CRLFDB0DH,0AH,PATHNAMEDBFILENAMELST,0MESSAGEDBPARTDESCRIPTIONPRICE,0DH,0AH,HANDLEDWTACKLINEDB|DTADB19DUPDTAERRCDEDB0错误处理指示OPNMSGDBOPENERROR,0DH,0AHREADMSGDBREADERROR,0DH,0AHROWDB0CODEBEGINPROCFARMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,0600HCALLSCREEN清屏CALLCURS设置光标LEADX,MESSAGE显示标题MOVAH,09HINT21HINCROWCALLOPENH打开文件,设置DTACMPENDCDE,0打开错误吗JNZA0错误,转结束CONTINCALLREADH读磁盘记录CMPENDCDE,0读错误吗JNZA0错误,转结束CALLDISPH没错,显示记录JMPCONTINA0MOVAX,4C00H退出程序,返回DOSINT21HBEGINENDP打开文件OPENHPROCNEARMOVAH,3DHMOVAL,0LEADX,PATHNAMEINT21HJCBBB打开错误吗MOVHANDLE,AX没有错,保存文件代号RETBBBMOVENDCDE,01打开错误,指示结束处理LEADX,READMSGCALLERRM显示出错信息RETOPENHENDP读磁盘记录READHPROCNEARMOVAH,3FHMOVBX,HANDLEMOVCX,19LEADX,DTAINT21HJCC1读错误吗CMPAX,0文件已读完吗JEC2读完,退出CMPDTA,1AH文件结束符吗JEC2RETC1LEADX,OPNMSG读错误CALLERRM显示出错信息C2MOVENDCDE,01读错误或文件读完,指示结束处理RETREADHENDP显示记录DISPHPROCNEARLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,3LEADX,DTAINT21HLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,12LEADX,DTA3INT21HLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HMOVSI,WORDPTRDTA15CALLBIN_DEC转换为十进制数显示LEADX,TACKLINE显示输出“|”MOVAH,09HINT21HCALLDISP_CRLFCMPROW,24已到屏幕底部吗JAEDDD已到屏幕底部,退出INCROWRETDDDMOVAX,0601HCALLSCREEN屏幕上卷一行CALLCURS设置光标RETDISPHENDP将二进制的单价转换为十进制的单价并显示子程序BIN_DECPROCNEARPUSHCXMOVCX,10000DCALLDEC_DIV调除法并显示输出子程序MOVCX,1000DCALLDEC_DIVMOVCX,100DCALLDEC_DIVMOVCX,10DCALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPCXRETBIN_DECENDP除法并显示输出子程序DEC_DIVPROCNEARMOVAX,SIMOVDX,0DIVCXMOVSI,DX余数保存在SI中作下一次的除法MOVDL,AL商在00H09H范围内送DLADDDL,30H转换为09的ASCII码MOVAH,02H显示输出INT21HRETDEC_DIVENDP屏幕上卷SCREENPROCNEAR入口参数为AXMOVBH,1EH设置颜色MOVCX,0屏幕左上角MOVDX,184FH屏幕右下角INT10HRETSCREENENDP设置光标CURSPROCNEARMOVAH,2设置光标MOVBH,0MOVDH,ROW行号MOVDL,0列号INT10HRETCURSENDP显示出错信息ERRMPROCNEARMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,20INT21HRETERRMENDPDISP_CRLFPROCNEAR显示回车换行符子程序LEADX,CRLFMOVAH,09HINT21HRETDISP_CRLFENDPDISP_CRLF子程序结束ENDBEGIN1111对119题建立的文件按下面的要求编写程序1把所有的记录读入内存的数据缓冲区TABLE;2显示字符串提示用户输入零配件号及其数量;3按零件搜索TABLE;4如果发现所要求的零件,用它的单价计算出总价单价数量;5显示零配件说明及总价值。答程序如下TITLEREAD11EXE利用文件代号式读并计算显示程序READDISKRECORDSCREATEDBYHANCREATMODELSMALLSTACK100HDATAENDCDEDB0结束处理指示PATHNAMEDBFILENAMELST,0IN_MES1DB请输入3位数的零件号PART,IN_MES2DB请输入该零件的数量,OUT_MES1DB输入的不是数字请重新输入数字,OUT_MES2DB输入的零件号不存在请重新输入3位数的零件号PART,IN_BUFFERDB6,6DUP20H输入缓冲区MESSAGEDBPARTDESCRIPTIONSUM_PRICE,0DH,0AH,TACKLINEDB|SUM_PRICEDW0,0DECIMALDB10DUP0,CRLFDB0DH,0AH,HANDLEDWTABLEDB19100DUPTABLE,足够大ERRCDEDB0错误处理指示OPNMSGDBOPENERROR,0DH,0AHREADMSGDBREADERROR,0DH,0AHCODEBEGINPROCFARMOVAX,DATAMOVDS,AXMOVES,AXMOVAX,0600HCALLSCREEN清屏CALLCURS设置光标CALLOPENH打开文件,设置TABLECMPENDCDE,0打开错误吗JNZA0错误,转结束CALLREADH读磁盘记录CMPENDCDE,0读错误吗JNZA0错误,转结束CALLIN_PART没错,输入零件号和零件数量A0MOVAX,4C00H退出程序,返回DOSINT21HBEGINENDP打开文件OPENHPROCNEARMOVAH,3DHMOVAL,0LEADX,PATHNAMEINT21HJCBBB打开错误吗MOVHANDLE,AX没有错,保存文件代号RETBBBMOVENDCDE,01打开错误,指示结束处理LEADX,OPNMSGCALLERRM显示出错信息RETOPENHENDP读磁盘记录READHPROCNEARMOVAH,3FHMOVBX,HANDLEMOVCX,19100准备读入的字节数LEADX,TABLEINT21HJCC1读错误吗CMPAX,0文件已读完吗JEC2读完,退出CMPTABLE,1AH文件结束符吗JEC2MOVBP,AX读成功则在AX中返回实际读入的字节数存入BPRETC1LEADX,READMSG读错误CALLERRM显示出错信息C2MOVENDCDE,01读错误或文件读完,指示结束处理RETREADHENDP输入零件号和零件数量IN_PARTPROCNEARLEADX,IN_MES1显示提示信息,提示输入零件号IN_PART1CALLINPUT输入数据CMPIN_BUFFER1,3输入的零件号个数是3位吗LEADX,OUT_MES2显示提示信息,提示重新输入零件号JNEIN_PART1CLDMOVAX,BP取实际读入文件的字节数MOVCL,19每个记录的长度为19个字符DIVCL计算实际读取的记录数在AL中MOVBL,ALMOVBH,0从第0个记录开始顺序查找IN_PART2LEASI,IN_BUFFER2查找零件号对应的零件LEADI,TABLEMOVAL,19MULBHADDDI,AX计算某个记录的首地址MOVWORDPTRDECIMAL,DI保存首地址MOVCX,3REPECMPSBJEIN_PART3找到对应的零件INCBH找下一个记录CMPBH,BLJBIN_PART2JMPIN_PART1未找到对应的零件重新输入IN_PART3LEADX,IN_MES2显示提示信息,提示输入零件数量CALLINPUT输入数据CALLDEC_BIN将输入数据转换为二进制数,在BX中MOVDI,WORDPTRDECIMADI指向该记录的首地址MOVAX,DI15取单价MULBX总价格在DX,AX中MOVSUM_PRICE,AXMOVSUM_PRICE2,DXCALLDISP_REC显示信息RETIN_PARTENDP输入数据INPUTPROCNEARINPUT1MOVAH,09H显示字符串INT21HMOVAH,0AH输入字符串LEADX,IN_BUFFERINT21HLEADX,OUT_MES1显示提示信息MOVCL,IN_BUFFER1CMPCL,0输入的数字个数为0吗JZINPUT1MOVCH,0MOVBX,2INPUT2MOVAL,IN_BUFFERBX输入的是数字09吗CMPAL,0JBINPUT1CMPAL,9JAINPUT1INCBXLOOPINPUT2RETINPUTENDP将十进制数转换为二进制数子程序DEC_BINPROCNEARMOVBX,0MOVSI,2MOVCL,IN_BUFFER1MOVCH,0TRANSFERMOVAL,IN_BUFFERSI从十进制的高位到低位取数ANDAL,0FH将ASCII码转换为十进制数MOVAH,0PUSHCXXCHGAX,BX十进制数高位10低位二进制数MOVCX,10MULCXADDBX,AX转换的二进制数在BX中POPCXINCSILOOPTRANSFERRETDEC_BINENDP显示记录DISP_RECPROCNEARCALLDISP_CRLFLEADX,MESSAGE显示标题MOVAH,09HINT21HLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,3显示3位数的零件号MOVDX,WORDPTRDECIMADX指向该记录的首地址INT21HLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01标准输出设备的文件代号01MOVCX,12显示12位的零件说明MOVDX,WORDPTRDECIMADX指向该记录的首地址ADDDX,3INT21HLEADX,TACKLINE显示输出“|”MOVAH,09HINT21HCALLBIN_DEC总价格转换为十进制数显示LEADX,TACKLINE显示输出“|”MOVAH,09HINT21HCALLDISP_CRLFRETDISP_RECENDP4字节二进制数转换为10进制子程序BIN_DECPROCNEARMOVBX,010字节的BCD码单元清0MOVCX,10BIN_DEC1MOVDECIMALBX,0INCBXLOOPBIN_DEC1MOVCX,484字节二进制数共4832位BIN_DEC2MOVBX,101计算A312A302A292A0SHLWORDPTRSUM_PRICE,14字节二进制数左移1位RCLWORDPTRSUM_PRICE2,1PUSHCXMOVCX,10BIN_DEC3MOVAL,DECIMALBX计算2AI,AI由进位位带入ADCAL,ALAAA非压缩BCD码加法调整MOVDECIMALBX,ALDECBXLOOPBIN_DEC3POPCXLOOPBIN_DEC2CALLDISPRETBIN_DECENDPDISPPROCNEAR显示输出子程序MOVCX,10MOVBX,0DISP1ADDDECIMALBX,30H变为ASCII码INCBXLOOPDISP1MOVCX,10下面5条指令是为了不显示数据左边的“0”CLDLEADI,DECIMALMOVAL,30H30H为“0”的ASCII码REPESCASBDECDIMOVDX,DIMOVAH,09HINT21HRETDISPENDPDISP子程序结束屏幕上卷SCREENPROCNEAR入口参数为AXMOVBH,1EH设置颜色MOVCX,0屏幕左上角MOVDX,184FH屏幕右下角INT10HRETSCREENENDP设置光标CURSPROCNEARMOVAH,2设置光标MOVBH,0MOVDH,0行号MOVDL,0列号INT10HRETCURSENDP显示出错信息ERRMPROCNEARMOVAH,40H向标准输出设备文件代号01写文件MOVBX,01

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论