第四章习题解答文档格式.docx
《第四章习题解答文档格式.docx》由会员分享,可在线阅读,更多相关《第四章习题解答文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
将ah中的两组分开
anddl,0f0h
屏蔽低高四位后送dl
原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
z'
ja
subal,20h
是小写字母转换为大写字母
movdl,al
movah,02h
显示
〔习题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
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)。
编写该程序。
.stack
bufX
dw-7
signX
db?
cmpbufX,0
;
testbufX,80h
jlnext
jnznext
movsignX,0
jmpdone
next:
movsignX,-1
done:
.exit0
〔习题4.11〕bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序:
(1)如果这3个数都不相等,则显示0;
(2)如果这3个数中有两个数相等,则显示1;
(3)如果这3个数都相等,则显示2。
bufx
dw?
bufY
bufz
movax,
bufX
;
cmpx,y?
?
可以吗?
movbx,
bufY
movcx,
bufZ
movdl,'
0'
cmpax,bx
jnznext1
incdl
next1:
cmpax,cx
jnznext2
next2:
cmpbx,cx
jnznext3
next3:
cmpdl,’3’
jbnext4
movdl,’2’
next4:
movah,02h
〔习题4.16〕编程实现把键入的一个字符,用二进制形式(0/1)显示出它的ASCII代码值。
.modelsmall
stri1
db'
pleaseinput'
0dh,0ah,'
$'
mov
dx,offsetstri1
movah,09h
movah,01h
int21h
movcx,8
again:
xordl,dl
shlal,1
adcdl,'
:
dl=dl+’0’+cf:
如果cf=0,那么dl=30h;
如果cf=1,那么dl=0+30h+1=31h
movah,02h
loopagain
〔习题4.17〕编写程序,要求从键盘接收一个数bellN(0~9),然后响铃bellN次。
pleaseinputnumber:
1--9'
again:
显示stri1,提示输入
movah,01h
调用输入一个字符
int
21h
;
输入一个字符存在al中
cmpal,'
1'
判该字符,如不在‘1’--‘9’
jb
again
重新输入
9'
again
andal,0fh
将31h和39h转换为1和9
在‘1’--‘9’,屏蔽高4位
movcl,al
振铃次数送cx
xorch,ch
abc:
movdl,07h
调用一次振铃
movah,02h
loopabc
〔习题4.19〕编写计算100个正整数之和的程序。
如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘overflow’。
num
equ100
wlist
dwnumdup(?
)
wordsum
error
overflow.$'
movbx,offsetwlist
movcx,num
xorax,ax
addax,[bx]
jcnext
incbx
loopagain
mov[bx],ax
movdx,offseterror
movah,9
〔习题4.22〕过程定义的一般格式是怎样的?
子程序入口为什么常有PUSH指令、出口为什么有POP指令?
下面的程序段有什么不妥吗?
若有,请改正:
crazy
PROC
pushax
xor