欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:18471252       资源大小:22.87KB        全文页数:40页
    • 资源格式: DOCX        下载积分:6金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要6金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、IBMPC汇编语言程序设计课后习题答案第二版 沈美明 第五章 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:程序段如下: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: RET 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。答:程序段如下:BEGIN: MO

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

    3、, STOREA10: MOV 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: RET 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示MATCH, 若不相同则显示NO MATCH。答:程序如下:DSEG SEGMENTSTRING1

    4、 DB I am a student.STRING2 DB I am a student!YES DB MATCH, 0DH, 0AH, $NO DB NO MATCH, 0DH, 0AH, $DSEG ENDS;-CSEG 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, STR

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

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

    7、DUP () ;存放正数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 ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS,

    8、 AX ;给DS赋值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 DISP

    9、LAY ;调显示子程序LEA DX, FU ;显示负数个数MOV AL, COUNT2CALL DISPLAY ;调显示子程序RETMAIN ENDP;-DISPLAY 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 ;显示

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

    11、数,退出COMPARE1: 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: RET 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。答:程序段如下:BEGIN: MOV DL, 0 ;计数初始值MOV CX, 8C

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

    13、H, 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: RET 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN:xxxx”显示出次数。答:程序如下:DSEG SEGMENTENG DB Here is sun, sun ,$DISP DB SUN:DAT DB 0000 , 0DH, 0AH, $KEYWORD DB sunDSEG ENDS;-CSEG SEGMENTMAIN PROC FARA

    15、SSUME 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, 2NOMATCH: INC B

    16、X ;指向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一起显示)MOV

    17、AH, 09HINT 21HRETMAIN ENDPCSEG ENDS ;以上定义代码段;-END START 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。答:程序段如下: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进制数显示程序段(省略) 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。答:程序如下:DSEG SEGMENTMEM DW 100 DUP ()DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CS

    19、EG, 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 DI+2 ;后面的元素向前移位M

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

    21、 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 ;以上定义代码段;-END STAR

    22、T 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放于AX和CX中。答:程序如下:DSEG SEGMENTTABLE DW 100H DUP () ;数组中的数据是按增序排列的DATA DW COUNT DW 0DSEG ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX ;给DS赋值BEGIN: MOV CX, 100H ;循环计数器MO

    23、V 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 ENDPCSEG ENDS ;以上定义代码段

    24、;-END START 数据段中已定义了一个有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 ENDS;-CSEG SEGMENTMAIN PROC FARASSUME CS: CSEG, DS: DSEGSTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DSEGMOV DS, AX

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


    注意事项

    本文(IBMPC汇编语言程序设计课后习题答案第二版 沈美明.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开