汇编语言程序设计第四版第4章课后答案.docx

上传人:b****2 文档编号:1606924 上传时间:2022-10-23 格式:DOCX 页数:26 大小:38.14KB
下载 相关 举报
汇编语言程序设计第四版第4章课后答案.docx_第1页
第1页 / 共26页
汇编语言程序设计第四版第4章课后答案.docx_第2页
第2页 / 共26页
汇编语言程序设计第四版第4章课后答案.docx_第3页
第3页 / 共26页
汇编语言程序设计第四版第4章课后答案.docx_第4页
第4页 / 共26页
汇编语言程序设计第四版第4章课后答案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计第四版第4章课后答案.docx

《汇编语言程序设计第四版第4章课后答案.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计第四版第4章课后答案.docx(26页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计第四版第4章课后答案.docx

汇编语言程序设计第四版第4章课后答案

汇编语言程序设计第四版

【课后习题答案】--囮裑為檤

第4章基本汇编语言程序设计

 

〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。

〔解答〕

思路:

首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。

传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:

          .modelsmall

          .stack256

          .data

 qvar    dq 1234567887654321h

          .code

          .startup

          movcx,7

          movsi,1

 again:

  moval,byteptrqvar[si]

         movbyteptrqvar[si-1],al

          incsi

          loopagain

          testal,80h

          jzezz

          movbl,0ffh

          jmp done

   ezz:

  movbl,0

  done:

  movbyteptrqvar[7],bl

          .exit0

          end

〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。

〔解答〕

思路:

可设计外循环体为8个字节左移一次,方法是:

最低位字节算术左移一次,      次低位字节至最高位字节依次带CF位循环左移一次(内循环共8次),外循环体控制执行7次即可。

       .modelsmall

       .stack256

       .data

qvar    dq 1234567887654321h

       .code

       .startup

       movdx,7                           ;外循环次数

       movax,byteptrqvar[0]      ;最低位字节送ax

lpp:

    shlax,1                             ;最低位字节左移一次,其d7移入CF位

       mov si,1

       movcx,7                              ;内循环次数

again:

  rclbyteptrqvar[si],1          ;高位字节依次左移P50

       inc si

       loop again

       decdx

       jnz lpp

       .exit0

       .end

〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。

〔解答〕

思路:

设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。

仅列出代码段:

              movbl,al         ;将al中的两组分开

              andal,0fh        ;屏蔽高四位后送al

              movcl,4          ;原al中的数据逻辑右移4次送bl

              shrbl,cl

              movdl,ah         ;将ah中的两组分开

              anddl,0f0h       ;屏蔽低高四位后送dl

              movcl,4          ;原ah中的数据逻辑右移4次送dl

              shrdl,cl

              movcl,ah         ;屏蔽高四位后送cl

              andcl,0fh

〔习题4.4〕编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。

〔解答〕

getkey:

    movah,1           ;从键盘输入,出口:

al存键值

          int21h

          cmp al,'a'         ;判键值是小写字母?

            jb getkay

            cmp al,'z'

            ja getkay

            subal,20h          ;是小写字母转换为大写字母

            movdl,al

            movah,02h         ;显示

            int21h

〔习题4.5〕已知用于LED数码管显示的代码表为:

          .stack

          .data

bufX      dw-7

signX     db?

          .code

          .startup

          cmpbufX,0           ;testbufX,80h

          jlnext              ;jnznext

          movsignX,0

          jmpdone

next:

     movsignX,-1

done:

     .exit0

          end

〔习题4.8〕bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序:

(1)如果这3个数都不相等,则显示0;

(2)如果这3个数中有两个数相等,则显示1;

(3)如果这3个数都相等,则显示2。

〔解答〕

 .modelsmall

          .stack256

          .data

bufx      dw?

bufY      dw?

 

bufz      dw?

 

          .code

          .startup

          movax, bufX 

          movbx, bufY

          movcx, bufZ

          movdl,'0'

          cmpax,bx

          jnznext1

          incdl

next1:

    cmpax,cx

          jnznext2

          incdl

next2:

    cmpbx,cx

          jnznext3

          incdl

next3:

    cmpdl,’3’

          jbnext4

          movdl,’2’

next4:

    movah,02h       ;显示

          int21h

          .exit0

          end

 

〔习题4.9〕例题4.8内外循环次数共是多少?

如果要求按从大到小排序,程序如何修改?

〔解答〕

外循环次数是:

count-1次(19次)

内循环次数是:

(count-1)!

次 (19!

次)

内外循环次数共是count-1+(count-1)!

次,即19+19!

〔习题4.10〕串操作指令常要利用循环结构,现在不用串操作指令实现字符串string1内容传送到字符串string2,字符长度为count。

〔解答〕

 .model small

            .stack256

            .data

  string1  db 'goodmorning!

'

  len    = $-string1

  string2  db lendup(?

            .code

            .startup

            movcx,len             ;字符数

            movsi,offsetstring1  ;源指针

            movdi,offsetstring2  ;目标指针

again:

     moval,[si]              ;送一个字符

            mov[di],al

            incsi                     ;修改指针

            incdi                     ;修改指针

           loopagain                 ;cx=cx-1,cx=0时退出循环

            .exit0

            end          

〔习题4.11〕不用串操作指令求主存0040h:

0开始的一个64KB物理段中共有多少个空格?

〔解答〕

这里仅列出主程序段:

            movax,0040h     ;送段地址

            movds,ax   

            xorsi,si       ;偏移量地址

            xorcx,cx        ;计数(循环次数)

            xordx,dx       ;空格计数器清零

again:

     cmp[si],20h   ;与空格的ASCII码比较

            jne  next       ;不是空格,转

            incdx           ;是空格,空格数加1

next:

     incsi           ;修改地址指针

          loopagain      ;cx=cx-1,如cx=0退出循环

            .exit0

            end

〔习题4.12〕编程实现把键入的一个字符,用二进制形式(0/1)显示出它的ASCII代码值。

〔解答〕

.modelsmall

            .stack256

            .data

    stri1  db'pleaseinput',0dh,0ah,'$'  

            .code

            .startup

            mov dx,offsetstri1  

            

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1