第四章习题解答.docx
- 文档编号:2156958
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:15
- 大小:18.24KB
第四章习题解答.docx
《第四章习题解答.docx》由会员分享,可在线阅读,更多相关《第四章习题解答.docx(15页珍藏版)》请在冰豆网上搜索。
第四章习题解答
〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。
〔解答〕假设ax=1011010011111101
思路:
设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。
仅列出代码段:
movbl,al ;将al中的两组分开
andal,0fh ;屏蔽高四位后送al:
1101
movcl,4 ;原al中的数据逻辑右移4次送bl
shrbl,cl;bl内容:
1111
movdl,ah ;将ah中的两组分开
anddl,0f0h ;屏蔽低高四位后送dl
movcl,4 ;原ah中的数据逻辑右移4次送dl
shrdl,cl;dl:
1011
movcl,ah ;屏蔽高四位后送cl:
0100
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数码管显示的代码表为:
LEDtable DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
DB80h,90h,88h,83h,0c6h,0c1h,86h,8eh
它依次表示0~9、A~F这16个数码的显示代码。
现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。
〔解答〕
.modelsmall
.stack256
.data
LEDtable DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
DB80h,90h,88h,83h,0c6h,0clh、86h,8eh
lednum DB?
.code
.startup
movbx,offsetLEDtable
moval,lednum
xlat ;al中存有对应的LED显示代码
.exit0
end
〔习题4.10〕设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:
如果X大于等于0,保存0;如果X小于0,保存-1(ffh)。
编写该程序。
〔解答〕
.modelsmall
.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.11〕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 ;cmpx,y?
?
?
?
?
可以吗?
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.16〕编程实现把键入的一个字符,用二进制形式(0/1)显示出它的ASCII代码值。
〔解答〕
.modelsmall
.stack256
.data
stri1 db'pleaseinput',0dh,0ah,'$'
.code
.startup
mov dx,offsetstri1
movah,09h
int21h
movah,01h
int21h
movcx,8
again:
xordl,dl
shlal,1
adcdl,'0' :
dl=dl+’0’+cf:
如果cf=0,那么dl=30h;
如果cf=1,那么dl=0+30h+1=31h
movah,02h
int21h
loopagain
.exit0
end
〔习题4.17〕编写程序,要求从键盘接收一个数bellN(0~9),然后响铃bellN次。
〔解答〕
.modelsmall
.stack
.data
stri1 db'pleaseinputnumber:
1--9',0dh,0ah,'$'
.code
.startup
again:
mov dx,offsetstri1 ;显示stri1,提示输入
movah,09h
int21h
movah,01h ;调用输入一个字符
int 21h ;输入一个字符存在al中
cmpal,'1' ;判该字符,如不在‘1’--‘9’
jb again ;重新输入
cmpal,'9'
ja again
andal,0fh ;将31h和39h转换为1和9
在‘1’--‘9’,屏蔽高4位
movcl,al ;振铃次数送cx
xorch,ch
abc:
movdl,07h ;调用一次振铃
movah,02h
int21h
loopabc
.exit0
end
〔习题4.19〕编写计算100个正整数之和的程序。
如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow’。
〔解答〕
.modelsmall
.stack
.data
num equ100
wlist dwnumdup(?
)
wordsum dw?
error db'overflow.$'
.code
.startup
movbx,offsetwlist
movcx,num
xorax,ax
again:
addax,[bx]
jcnext
incbx
incbx
loopagain
mov[bx],ax
jmpdone
next:
movdx,offseterror
movah,9
int21h
done:
.exit0
end
〔习题4.22〕过程定义的一般格式是怎样的?
子程序入口为什么常有PUSH指令、出口为什么有POP指令?
下面的程序段有什么不妥吗?
若有,请改正:
crazy PROC
pushax
xor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 习题 解答
![提示](https://static.bdocx.com/images/bang_tan.gif)