ImageVerifierCode 换一换
格式:DOC , 页数:63 ,大小:74.04KB ,
资源ID:9782956      下载积分:14 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9782956.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(IBMPC汇编语言程序设计课后习题答案第二版沈美明.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

IBMPC汇编语言程序设计课后习题答案第二版沈美明.doc

1、 第五章5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, a ;输入字符z吗?JA STOPSUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可MOV DL, AL ;显示一个字符的DOS调用MOV AH, 2INT 21HJMP BEGINSTOP: RET5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符与后续字符,再按顺序显示这三个字符。答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的

2、DOS调用INT 21HCMP AL, a ;输入字符z吗?JA STOPDEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL与DL中。答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP (?)DSEG ENDSBEGIN: MOV CL, 4 ;右移四次MOV CH, 4 ;循环四次LEA BX, STOREA10: MO

3、V DX, AXAND DX, 0FH ;取AX的低四位MOV BX, DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次DEC CHJNZ A10 ;循环四次完了码?B10: MOV DL, STORE ;四组数分别放在AL、BL、CL与DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET5.4 试编写一程序,要求比较两个字符串STRING1与STRING2所含字符是否完全相同,若相同则显示MATCH, 若不相同则显示NO MATCH。答:程序如下:DSEG SEGMENTSTRING1 DB I am a

4、 student.STRING2 DB I am a student!YES DB MATCH, 0DH, 0AH, $NO DB NO MATCH, 0DH, 0AH, $DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值MOV ES, AX ;给ES赋值BEGIN: LEA SI, STRING1 ;设置串比较指令的初值LEA DI, STRING2CLDMOV CX

5、 STRING2 - STRING1REPE CMPSB ;串比较JNE DISPNOLEA DX, YES ;显示MATCHJMP DISPLAYDISPNO: LEA DX, NO ;显示NO MATCHDISPLAY: MOV AH, 9 ;显示一个字符串的DOS调用INT 21HRETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.5 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HSUB AL, 0JB STOP ;输入字

6、符9吗?JA STOPCBWMOV CX, AX ;响铃次数NJCXZ STOPBELL: MOV DL, 07H ;准备响铃MOV AH, 2 ;显示一个字符的DOS调用,实际为响铃INT 21HCALL DELAY100ms ;延时100msLOOP BELLSTOP: RET5.6 编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组P与负数数组N,并分别把这两个数组中数据的个数显示出来。答:程序如下:DSEG SEGMENTCOUNT EQU 20ARRAY DW 20 DUP (?) ;存放数组COUNT1 DB 0 ;存放正数的个数ARRAY1 DW 20 DUP (?)

7、 ;存放正数COUNT2 DB 0 ;存放负数的个数ARRAY2 DW 20 DUP (?) ;存放负数ZHEN DB 0DH, 0AH, The positive number is:, $ ;正数的个数是:FU DB 0DH, 0AH, The negative number is:, $ ;负数的个数是:CRLF DB 0DH, 0AH, $DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给D

8、S赋值BEGIN: MOV CX, COUNTLEA BX, ARRAYLEA SI, ARRAY1LEA DI, ARRAY2BEGIN1: MOV AX, BXCMP AX, 0 ;是负数码?JS FUSHUMOV SI, AX ;是正数,存入正数数组INC COUNT1 ;正数个数+1ADD SI, 2JMP SHORT NEXTFUSHU: MOV DI, AX ;是负数,存入负数数组INC COUNT2 ;负数个数+1ADD DI, 2NEXT: ADD BX, 2LOOP BEGIN1LEA DX, ZHEN ;显示正数个数MOV AL, COUNT1CALL DISPLAY ;调

9、显示子程序LEA DX, FU ;显示负数个数MOV AL, COUNT2CALL DISPLAY ;调显示子程序RETMAIN ENDPDISPLAY PROC NEAR ;显示子程序MOV AH, 9 ;显示一个字符串的DOS调用INT 21HAAM ;将(AL)中的二进制数转换为二个非压缩BCD码ADD AH, 0 ;变为09的ASCII码MOV DL, AHMOV AH, 2 ;显示一个字符的DOS调用INT 21HADD AL, 0 ;变为09的ASCII码MOV DL, ALMOV AH, 2 ;显示一个字符的DOS调用INT 21HLEA DX, CRLF ;显示回车换行MOV

10、AH, 9 ;显示一个字符串的DOS调用INT 21HRETDISPLAY ENDP ;显示子程序结束CSEG ENDS ;以上定义代码段END START5.7 试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。答:程序段如下:BEGIN: MOV BX, 0 MOV CX, 100COMPARE: MOV AX, DATABX ;取数组的第一个偶数ADD BX, 2TEST AX, 01H ;是偶数吗?LOOPNZ COMPARE ;不是,比较下一个数JNZ STOP ;没有偶数,退出JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出CO

11、MPARE1: MOV DX, DATABX ;取数组的下一个偶数ADD BX, 2TEST DX, 01H ;是偶数吗?JNZ NEXT ;不是,比较下一个数CMP AX, DX ;(AX)(DX)吗?JLE NEXTMOV AX, DX ;(AX)(DX),则置换(AX)为最小偶数NEXT: LOOP COMPARE1STOP: RET5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。答:程序段如下:BEGIN: MOV DL, 0 ;计数初始值MOV CX, 8CO

12、MPARE: TEST AX, 03H ;是数03吗?JNZ NOEQUAL ;不是,转走INC DL ;是,计数NOEQUAL: ROR AX, 1 ;准备判断下一个数ROR AX, 1LOOP COMPAREADD DL, 0 ;将计数值转换为ASCII码MOV AH, 2 ;进行显示INT 21HSTOP: RET5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数。答:程序段如下:BEGIN: MOV BX, 0 ;用于存放四位的16进制数MOV CH, 4MOV CL, 4INPUT: SHL BX, CL ;将前面输入的数左移4位MO

13、V AH, 1 ;从键盘取数INT 21HCMP AL, 30H ;0吗?JB INPUT ;不是0F的数重新输入CMP AL, 39H ;是09吗?JA AF ;不是,转AF的处理AND AL, 0FH ;转换为:0000B1001BJMP BINARYAF: AND AL, 1101 1111B ;转换为大写字母CMP AL, 41H ;又F吗?JA INPUT ;不是AF的数重新输入AND AL, 0FH ;转换为:1010B1111BADD AL, 9BINARY: OR BL, AL ;将键盘输入的数进行组合DEL CHJNZ INPUTDISPN: MOV CX, 16 ;将16位

14、二进制数一位位地转换成ASCII码显示DISP: MOV DL, 0ROL BX, 1RCL DL, 1OR DL, 30HMOV AH, 2 ;进行显示INT 21HLOOP DISPSTOP: RET5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN:xxxx”显示出次数。答:程序如下:DSEG SEGMENTENG DB Here is sun, sun ,$DISP DB SUN:DAT DB 0000 , 0DH, 0AH, $KEYWORD DB sunDSEG ENDSCSEG SEGMENTMAIN P

15、ROC FARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值MOV ES, AX ;给ES赋值BEGIN: MOV AX, 0MOV DX, DISP-ENG-2 ;计算ENG的长度(每次比较sun,因此比较次数-2)LEA BX, ENGCOMP: MOV DI, BXLEA SI, KEYWORDMOV CX, 3REPE CMPSB ;串比较JNZ NOMATCHINC AX ;是,SUN的个数加1ADD BX, 2NOMATC

16、H: INC BX ;指向ENG的下一个字母DEC DXJNZ COMPDONE: MOV CH, 4 ;将次数转换为16进制数的ASCII码MOV CL, 4LEA BX, DAT ;转换结果存入DAT单元中DONE1: ROL AX, CLMOV DX, AXAND DL, 0FH ;取一位16进制数ADD DL, 30HCMP DL, 39HJLE STOREADD DL, 07H ;是“AF”所以要加7STORE: MOV BX, DL ;转换结果存入DAT单元中INC BXDEC CHJNZ DONE1DISPLAY: LEA DX, DISP ;显示字符串程序(将DISP与DAT一

17、起显示)MOV AH, 09HINT 21HRETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。答:程序段如下:DSEG SEGMENTBUFF DB 50 DUP ( )COUNT DW 0DSEG ENDSBEGIN: LEA BX, BUFFMOV COUNT, 0INPUT: MOV AH, 01 ;从键盘输入一个字符的功能调用INT 21HMOV BX, ALINC BXCMP AL, $ ;是$结束符吗?JNZ INPUT ;不是,继续输入LEA BX, BUFF

18、 ;对非数字字符进行计数NEXT: MOV CL, BXINC BXCMP CL, $ ;是$结束符,则转去显示JZ DISPCMP CL, 30H ;小于0是非数字字符JB NEXTCMP CL, 39H ;大于9是非数字字符JA NEXTINC COUNT ;个数+1JMP NEXTDISP: ;16进制数显示程序段(省略)5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。答:程序如下:DSEG SEGMENTMEM DW 100 DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FA

19、RASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV SI, (100-1)*2 ;(SI)指向MEM的末元素的首地址MOV BX, -2 ;地址指针的初值MOV CX, 100COMP: ADD BX, 2CMP MEM BX, 0JZ CONSLOOP COMPJMP FINISH ;比较完了,已无0则结束CONS: MOV DI, BXCONS1: CMP DI, SI ;到了最后单元码?JAE NOMOVMOV AX, MEM D

20、I+2 ;后面的元素向前移位MOV MEM DI, AXADD DI, 2JMP CONS1NOMOV: MOV WORD PTR SI, 0 ;最后单元补0LOOP COMPFINISH: RETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一个程序测试该字符串中是否存在数字,如有则把CL的第5位置1,否则将该位置0。答:程序如下:DSEG SEGMENTSTRING DB 100 DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG

21、 DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV SI, 0 ;(SI)作为地址指针的变化值MOV CX, 100REPEAT: MOV AL, STRING SICMP AL, 30HJB GO_ONCMP AL, 39HJA GO_ONOR CL, 20H ;存在数字把CL的第5位置1JMP EXITGO_ON: INC SILOOP REPEATAND CL, 0DFH ;不存在数字把CL的第5位置0EXIT: RETMAIN ENDPCSEG ENDS ;以

22、上定义代码段END START5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数与其出现次数分别存放于AX与CX中。答:程序如下:DSEG SEGMENTTABLE DW 100H DUP (?) ;数组中的数据是按增序排列的DATA DW ?COUNT DW 0DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV

23、 CX, 100H ;循环计数器MOV SI, 0NEXT: MOV DX, 0MOV AX, TABLE SICOMP: CMP TABLE SI, AX ;计算一个数的出现次数JNE ADDRINC DXADD SI, 2LOOP COMPADDR: CMP DX, COUNT ;此数出现的次数最多吗?JLE DONEMOV COUNT, DX ;目前此数出现的次数最多,记下次数MOV DATA, AX ;记下此数DONE: LOOP NEXT ;准备取下一个数MOV CX, COUNT ;出现最多的次数存入(CX)MOV AX, DATA ;出现最多的数存入(AX)RETMAIN END

24、PCSEG ENDS ;以上定义代码段END START5.15 数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。答:程序如下:DSEG SEGMENTn EQU 100H ;假设n=100HM DW n DUP (?)DATA DW ? ;M+2n单元ADDR DW ? ;M+2(n+1)单元DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH

25、AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV CX, n ;循环计数器LEA DI, MMOV AX, DI ;取第一个数MOV ADDR, DI ;记下绝对值最大的数的地址CMP AX, 0 ;此数是正数吗?JNS ZHEN ;是正数,即为绝对值,转去判断下一个数NEG AX ;不是正数,变为其绝对值ZHEN: MOV BX, DICMP BX, 0 ;此数是正数吗?JNS COMP ;是正数,即为绝对值,转去比较绝对值大小NEG BX ;不是正数,变为其绝对值COMP: CMP AX, BX ;判断绝对值大小JAE ADDRESSMOV AX, BX

26、AX)(BX),使(AX)中为绝对值最大的数MOV ADDR, DI ;记下绝对值最大的数的地址ADDRESS: ADD DI, 2LOOP ZHENMOV DATA, AX ;记下此数RETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.16 在首地址为DATA的字数组中存放着100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。答:程序如下:DSEG SEGMENTDATA DW 100H DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUM

27、E CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV CX, 100H ;循环计数器MOV SI, 0MOV BX, 0 ;与(DI),(BX)的初始值MOV DI, 0NEXT: MOV AX, DATA SICWDADD BX, AX ;求与ADC DI, DX ;加上进位位ADD SI, 2LOOP NEXTMOV DX, DI ;将(DI),(BX)中的累加与放入(DX),(AX)中MOV AX, BXMOV CX, 100HIDIV CX

28、带符号数求平均值,放入(AX)中MOV BX, 0MOV SI, 0COMP: CMP AX, DATA SI ;寻找小于平均值的数JLE NOINC BX ;小于平均值数的个数+1NO: ADD SI, 2LOOP COMPRETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.17 试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。答:程序如下:DSEG SEGMENTMEM DB 4 DUP (?)

29、N DW 2A49HDSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV CH, 4 ;循环计数器MOV CL, 4MOV AX, NLEA BX, MEMROTATE: MOV DL, AL ;从最低四位开始转换为ASCII码AND DL, 0FHADD DL, 30HCMP DL, 3AH ;是09吗?JL NEXTADD DL, 07H ;是AFNEXT: MOV B

30、X, DL ;转换的ASCII码送入MEM中INC BXROR AX, CL ;准备转换下一位DEC CHJNZ ROTATERETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.18 把0100D之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生的人数加1。)答:程序如下:DSEG SEGMENTGRADE DW 30

31、 DUP (?) ;假设已预先存好30名学生的成绩RANK DW 30 DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV DI, 0 MOV CX, 30 ;外循环计数器LOOP1: PUSH CXMOV CX, 30 ;内循环计数器MOV SI, 0MOV AX, GRADE DIMOV DX, 1 ;起始名次为第1名LOOP2: CMP GRADE S

32、I, AX ;成绩比较JBE GO_ONINC DX ;名次+1GO_ON: ADD SI, 2LOOP LOOP2POP CXMOV RNAK DI, DX ;名次存入RANK数组ADD DI, 2LOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.19 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一程序把既在A中又在B中出现的整数存放于数组C中。答:程序如下:DSEG SEGMENTA DW 15 DUP (?)B DW 20 DUP (?)C DW 15 DUP ( )DSEG ENDSCSEG SEGMEN

33、TMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV SI, 0MOV BX, 0MOV CX, 15 ;外循环计数器LOOP1: PUSH CXMOV CX, 20 ;内循环计数器MOV DI, 0MOV AX, A SI ;取A数组中的一个数LOOP2: CMP B DI, AX ;与B数组中的数相等吗?JNE NOMOV C BX, AX ;相等存入C数组中ADD BX, 2NO: ADD DI, 2LOO

34、P LOOP2ADD SI, 2POP CXLOOP LOOP1RETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.20 设在A、B与C单元中分别存放着三个数。若三个数都不是0,则求出三数之与存放在D单元中;若其中有一个数为0,则把其它两单元也清0。请编写此程序。答:程序如下:DSEG SEGMENTA DW ?B DW ?C DW ?D DW 0DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSE

35、GMOV DS, AX ;给DS赋值BEGIN: CMP A, 0JE NEXTCMP B, 0JE NEXTCMP C, 0JE NEXTMOV AX, AADD AX, BADD AX, CMOV D, AXJMP SHORT EXITNEXT: MOV A, 0MOV B, 0MOV C, 0EXIT: RETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.21 试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息:(1) 如果三个数都不相等则显示0;(2) 如果三个数有二个数相等则显示1;(3) 如果三个数都相等则显示

36、2。答:程序如下:DSEG SEGMENTARRAY DW 3 DUP (?)DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: LEA SI, ARRAYMOV DX, 0 ;(DX)用于存放所求的结果MOV AX, SIMOV BX, SI+2CMP AX, BX ;比较第一与第二两个数是否相等JNE NEXT1INC DXNEXT1: CMP SI+4, AX ;比较第一与

37、第三两个数是否相等JNE NEXT2INC DXNEXT2: CMP SI+4, BX ;比较第二与第三两个数是否相等JNE NUMINC DXNUM: CMP DX, 3JL DISPDEC DXDISP: ADD DL, 30H ;转换为ASCII码MOV AH, 2 ;显示一个字符INT 21HRETMAIN ENDPCSEG ENDS ;以上定义代码段END START5.22 从键盘输入一系列字符(以回车符结束),并按字母、数字、与其它字符分类计数,最后显示出这三类的计数结果。答:程序如下:DSEG SEGMENTALPHABET DB 输入的字母字符个数为:, $NUMBER DB

38、 输入的数字字符个数为:, $OTHER DB 输入的其它字符个数为:, $CRLF DB 0DH, 0AH, $DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV BX, 0 ;字母字符计数器MOV SI, 0 ;数字字符计数器MOV DI, 0 ;其它字符计数器INPUT: MOV AH, 1 ;输入一个字符INT 21HCMP AL, 0DH ;是回车符吗?JE D

39、ISPCMP AL, 30H ;数字9吗?JA NEXT2INC SI ;是数字字符JMP SHORT INPUTNEXT2: CMP AL, 41H ;字母Z吗?JA NEXT4INC BX ;是字母字符AZJMP SHORT INPUTNEXT4: CMP AL, 61H ;字母z吗?JA SHORT OTHER ;是其它字符INC BX ;是字母字符azJMP SHORT INPUTDISP: LEA DX, ALPHABETCALL DISPLAYLEA DX, NUMBERMOV BX, SICALL DISPLAYLEA DX, OTHERMOV BX, DICALL DISPLA

40、YRETMAIN ENDPDISPLAY PROC NEARMOV AH, 09H ;显示字符串功能调用INT 21HCALL BINIHEX ;调把BX中二进制数转换为16进制显示子程序LEA DX, CRLFMOV AH, 09H ;显示回车换行INT 21HRETDISPLAY ENDPBINIHEX PROC NEAR ;将BX中二进制数转换为16进制数显示子程序MOV CH, 4ROTATE: MOV CL, 4ROL BX, CLMOV DL, BLAND DL, 0FHADD DL, 30HCMP DL, 3AH ;是AF吗?JL PRINT_ITADD DL, 07HPRINT

41、IT: MOV AH, 02H ;显示一个字符INT 21HDEC CHJNZ ROTATERETBINIHEX ENDPCSEG ENDS ;以上定义代码段END START5.23 已定义了两个整数变量A与B,试编写程序完成下列功能:(1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中;(2) 若两个数中均为奇数,则将两数加1后存回原变量;(3) 若两个数中均为偶数,则两个变量均不改变。答:程序如下:DSEG SEGMENTA DW ?B DW ?DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART:

42、PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV AX, AMOV BX, BXOR AX, BXTEST AX, 0001H ;A与B同为奇数或偶数吗?JZ CLASS ;A与B都为奇数或偶数,转走TEST BX, 0001HJZ EXIT ;B为偶数,转走XCHG BX, A ;A为偶数,将奇数存入A中MOV B, BX ;将偶数存入B中JMP EXITCLASS: TEST BX, 0001H ;A与B都为奇数吗?JZ EXIT ;A与B同为偶数,转走INC BINC AEXIT: RETMA

43、IN ENDPCSEG ENDS ;以上定义代码段END START5.24 假设已编制好5个歌曲程序,它们的段地址与偏移地址存放在数据段的跳跃表SINGLIST中。试编制一程序,根据从键盘输入的歌曲编号15,转去执行五个歌曲程序中的某一个。答:程序如下:DSEG SEGMENTSINGLIST DD SING1DD SING2DD SING3DD SING4DD SING5ERRMSG DB Error! Invalid parameter!, 0DH, 0AH, $DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOS

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服