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

上传人:平*** 文档编号:9516260 上传时间:2017-10-03 格式:DOC 页数:19 大小:93.50KB
返回 下载 相关 举报
汇编语言程序设计(第四版)第4章【课后答案】_第1页
第1页 / 共19页
汇编语言程序设计(第四版)第4章【课后答案】_第2页
第2页 / 共19页
汇编语言程序设计(第四版)第4章【课后答案】_第3页
第3页 / 共19页
汇编语言程序设计(第四版)第4章【课后答案】_第4页
第4页 / 共19页
汇编语言程序设计(第四版)第4章【课后答案】_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《汇编语言程序设计(第四版)第4章【课后答案】》由会员分享,可在线阅读,更多相关《汇编语言程序设计(第四版)第4章【课后答案】(19页珍藏版)》请在金锄头文库上搜索。

1、- 1 -汇编语言程序设计 第四版 【课后习题答案】 -囮裑為檤第 4 章 基本汇编语言程序设计习题 4.1例题 4.2 如果要求算术右移 8 位,如何修改程序。 解答思路: 首先由最高位字节向次低位字节传送次低位字节向最低位字节传送(共 7 次) ;再判最高位字节符号位,如为 0,送 00h 到最高位字节;如为 1,送 ffh 到最高位字节。传送可参考例题 4.2,不过应从第一号字节送第零号字节,最高位字节向次低位字节传送;也可以用循环来完成:.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov cx,7mo

2、v si,1again: mov al, byte ptr qvarsimov byte ptr qvarsi-1,alinc siloop againtest al,80hjz ezzmov bl,0ffhjmp doneezz: mov bl,0done: mov byte ptr qvar7,bl .exit 0end习题 4.2例题 4.2 如果要求算术左移 7 位,如何用移位指令实现。 解答思路:可设计外循环体为 8 个字节左移一次,方法是:最低位字节算术左移一次, 次低位字节至最高位字节依次带 CF 位循环左移一次(内循环共 8 次) ,外循环体控制执行7 次即可。.model s

3、mall.stack 256.dataqvar dq 1234567887654321h- 2 -.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar0 ;最低位字节送 axlpp: shl ax, 1 ;最低位字节左移一次,其 d7 移入 CF 位 mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvarsi, 1 ;高位字节依次左移 P50inc siloop againdec dxjnz lpp.exit 0.end习题 4.3将 AX 寄存器中的 16 位数连续 4 位分成一组,共 4 组,然后把

4、这 4 组数分别放在 AL、BL、CL 和 DL 寄存器中。 解答思路:设这四组从低位到高位分别放在 AL、BL、CL 和 DL 寄存器中。仅列出代码段:mov bl, al ;将 al 中的两组分开and al, 0fh ;屏蔽高四位后送 almov cl, 4 ;原 al 中的数据逻辑右移 4 次送 blshr bl, clmov dl, ah ;将 ah 中的两组分开and dl, 0f0h ;屏蔽低高四位后送 dlmov cl, 4 ;原 ah 中的数据逻辑右移 4 次送 dlshr dl, clmov cl, ah ;屏蔽高四位后送 cland cl, 0fh习题 4.4编写一个程序

5、,把从键盘输入的一个小写字母用大写字母显示出来。 解答getkey: mov ah, 1 ;从键盘输入,出口:al 存键值int 21hcmp al, a ;判键值是小写字母?jb getkaycmp al, zja getkaysub al,20h ;是小写字母转换为大写字母mov dl,almov ah, 02h ;显示int 21h习题 4.5已知用于 LED 数码管显示的代码表为: - 3 -LEDtable DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hDB 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示 0 9、A F

6、这 16 个数码的显示代码。现编写一个程序实现将 lednum 中的一个数字(0 9、A F)转换成对应的 LED 显示代码。解答.model small.stack 256.dataLEDtable DB 0c0h,0f9h ,0a4h,0b0h,99h,92h,82h,0f8hDB 80h,90h ,88h,83h,0c6h,0clh、86h,8ehlednum DB ? .code.startupmov bx, offset LEDtable mov al, lednumxlat ;al 中存有对应的 LED 显示代码.exit 0end习题 4.6编制一个程序,把变量 bufX 和 b

7、ufY 中较大者存入 bufZ;若两者相等,则把其中之一存入 bufZ 中。假设变量存放的是 8 位无符号数。 解答.model small.stack 256.databufx db ?bufY db ?bufz db ?.code.startupmov al, bufXmov bl, bufYcmp al,blja nextmov bufZ, bljmp donenext: mov bufZ, aldone: .exit 0end习题 4.7设变量 bufX 为有符号 16 位数,请将它的符号状态保存在 signX,即:如果X 大于等于 0,保存 0;如果 X 小于 0,保存-1(ffh)

8、 。编写该程序。 解答.model small- 4 -.stack.databufX dw -7signX db ?.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end习题 4.8bufX、bufY 和 bufZ 是 3 个有符号 16 进制数,编写一个比较相等关系的程序:(1)如果这 3 个数都不相等,则显示 0;(2)如果这 3 个数中有两个数相等,则显示 1;(3)如果这 3 个数都相等,则显示 2。解答.model sma

9、ll.stack 256.databufx dw ?bufY dw ? bufz dw ? .code.startupmov ax, bufX mov bx, bufY mov cx, bufZ mov dl, 0cmp ax,bxjnz next1inc dlnext1: cmp ax,cxjnz next2inc dlnext2: cmp bx,cxjnz next3inc dlnext3: cmp dl,3jb next4 mov dl,2- 5 -next4: mov ah,02h ;显示int 21h.exit 0end习题 4.9例题 4.8 内外循环次数共是多少?如果要求按从大到

10、小排序,程序如何修改?解答外循环次数是: count-1 次 (19 次)内循环次数是: (count-1)!次 ( 19! 次)内外循环次数共是 count-1 + (count-1 )!次 ,即 19+19!次习题 4.10串操作指令常要利用循环结构,现在不用串操作指令实现字符串 string1 内容传送到字符串 string2,字符长度为 count。 解答.model small.stack 256.datastring1 db good morning!len = $-string1string2 db len dup(?).code.startupmov cx, len ;字符数m

11、ov si, offset string1 ;源指针mov di, offset string2 ;目标指针again: mov al, si ;送一个字符mov di, alinc si ;修改指针inc di ;修改指针 loop again ;cx=cx-1,cx=0 时退出循环.exit 0end 习题 4.11不用串操作指令求主存 0040h : 0 开始的一个 64KB 物理段中共有多少个空格?解答这里仅列出主程序段:mov ax,0040h ;送段地址mov ds, ax xor si, si ;偏移量地址xor cx, cx ;计数(循环次数)xor dx, dx ;空格计数器

12、清零again: cmp si, 20h ;与空格的 ASCII 码比较jne next ;不是空格,转- 6 -inc dx ;是空格,空格数加 1next: inc si ;修改地址指针loop again ;cx=cx-1,如 cx=0 退出循环.exit 0end习题 4.12编程实现把键入的一个字符,用二进制形式(0 / 1)显示出它的 ASCII 代码值。 解答.model small.stack 256.datastri1 db please input,0dh,0ah,$ .code.startupmov dx,offset stri1 mov ah,09hint 21hmov

13、 ah, 01h int 21h mov cx, 8 again: xor dl,dlshl al, 1 adc dl, 0 mov ah,02hint 21hloop again .exit 0end习题 4.13编写程序,要求从键盘接收一个数 bellN(0 9) ,然后响铃 bellN 次。 解答.model small.stack.datastri1 db please input number:1-9,0dh,0ah,$ .code.startupagain: mov dx,offset stri1 ;显示 stri1,提示输入mov ah,09hint 21hmov ah,01h ;调用输入一个字符int 21h ;输入一个字符存在 al 中cmp al, 1 ;判该字符,如不在1-9- 7 -jb again ;重新输入cmp al, 9ja againand al,0fh ;在1-9 ,屏蔽高 4 位mov cl, al ;振铃次数送 cxxor ch,chabc: mov dl, 07h ;调用一次振铃mov ah,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号