错误!未指定书签。与接口技术
(3) SHL BL,CL (4) SAL BL,1 (5) ROR BX,CL (6) RCL BX,CL (7) ROL BH,1 (8) RCR BL,1
解: (1)(BX)=0053H (2) (BX)=0014H (3) (BX)=0030H (4) (BX)=004CH
(5)(BX)=0C014H (6) (BX)=0534H (7) (BX)=0A6H (8) (BX)=00D3H
5.16 已知有一32位的无符号数在(DX,AX)中,试编写指令序列,将该32位数左移4位,将低4位用0填补;将移出的高4位存入CH的低4位中。
解: MOV CL,4
MOV CH,DH SHR CH,CL SHL DX,CL MOV BL,AH SHR BL,CL SHL AX,CL OR DL,BL
5.17 利用移位指令、传送指令和加法指令完成乘法运算(AX)×10。 解: SAL AX,1
MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX
5.18 试分别指出在下列3种条件下执行指令 SUB AX,BX 时,对标志位OF、CF、SF、ZF影响的情况: (1) (AX)=14C6H , (BX)=80DCH (2) (AX)=42C8H , (BX)=608DH (3) (AX)=0D023H , (BX)=9FD0H
解: (1) OF=1,CF=1,SF=1,ZF=0
(2) OF=0,CF=1,SF=1,ZF=0 (3) OF=0,CF=0,SF=0,ZF=0
5.19 在8086/8088指令系统中,哪些指令可以加重复前缀?重复前缀共有哪几种形式?它们的操作功能是什么?
解: 可加重复前缀的指令有:MOVS、STOS、SCAS、LODS、CMPS; 重复前缀的形式有:REP、REPE/REPZ、REPNE/REPNZ
5.20 在一个名为STRING、长度为100字节的字符串中查找是否含有字符“$”,如果有则将第一次发现的“$”字符所在单元的偏移地址送入BX寄存器中;如果未曾找到,则将0FFFFH送入BX寄存器中。 解: CLD
MOV AL,‘$’ LEA DI,STRING MOV CX,100 REPNE SCASB JNE ZER DEC DI
MOV BX,DI JMP STOP
ZER: MOV BX,0FFFFH STOP: HLT
文件名:微机原理与接口技术习题 第 16 页 共 61 页
习 题
5.21 将2000H段中名为BUFST的缓冲区中长度为200个字节的数据串移到3000H段中名为DSTST的缓冲区中。编写两种采用不同指令实现该功能的程序段。 解:(1) MOV AX,2000H
MOV DS,AX MOV AX,3000H MOV ES,AX MOV CX,200 CLD
LEA SI,BUFST LEA DI,DSTST REP MOVSB HLT
(2) MOV AX,2000H
MOV DS,AX MOV AX,3000H MOV ES,AX MOV CX,200
MOV SI,OFFSET BUFST MOV DI,OFFSET DSTST
AGN: MOV AL,[SI]
MOV ES:[DI],AL INC SI INC DI LOOP AGN HLT
5.22 将1000段中名为DATSTR的字符串,向高地址方向平移20个字节,字符串的长度为45字节。 解: STD
MOV AX,1000H MOV DS,AX MOV ES,AX
LEA SI,DATSTR+44 LEA DI,DATSTR+64 MOV CX,45 REP MOVSB HLT
5.23 用其它指令完成与下列指令同样的功能
(1) REP MOVSB (2) REPE CMPSW (3) REP STOSB (4) REPNE SCASB
解: (1) AGAIN:MOV AL,[SI] (2)AGAIN: MOV AL,[SI]
MOV ES:[DI],AL CMP AL,ES:[DI] INC SI INC SI INC DI INC DI LOOP AGAIN LOOPE AGAIN
(3) AGAIN: MOV ES:[DI],AL (4)AGAIN: CMP AL,[DI]
INC DI INC DI LOOP AGAIN LOOPNE AGAIN
文件名:微机原理与接口技术习题 第 17 页 共 61 页
错误!未指定书签。与接口技术
5.24 有100个学生的计算机课程成绩存放在COMPUT缓冲区中,编写指令序列统计85分以上、60~85分、60分以下各有多少人,并把统计结果存入ORDER开始的三个字节单元中。 解: LEA SI,COMPUT
MOV CX,100 MOV BL,10 MOV BH,0 MOV DX,0
AGAIN: MOV AL, [SI]
CBW
IDIV BL CMP AL,9 JGE RANGE1 CMP AL,8 JE GE85 CMP AL,6 JGE RANGE2 INC BH JMP NEXT
GE85: CMP AH,5
JGE RANGE1
RANGE2: INC DL
JMP NEXT
RANGE1: INC DH
NEXT: INC SI
LOOP AGAIN
MOV ORDER,DH MOV ORDER+1,DL MOV ORDER+2,BH HLT
5.25 在内存数据区从4000H开始存放着由30个字符组成的字符串,编写指令序列,查找并统计串中空格符的个数,并将统计结果存入4020H单元中。 解: MOV SI,4000H
MOV CX,30 SUB BL,BL MOV AL,20H
AGAIN: CMP AL,[SI]
JNZ NEXT INC BL
NEXT: INC SI
LOOP AGAIN MOV SI,4020H MOV [SI],BL HLT
5.26 编写一指令序列,统计寄存器BX中内容含“1”的个数,将统计结果送入CX寄存器中。 解: SUB CX,CX GOON: CMP BX,0
JZ STOP
文件名:微机原理与接口技术习题 第 18 页 共 61 页
SHR BX,1 JNC JUMP INC CX
JUMP: JMP GOON STOP: HLT
5.27 试分析下列程序段:
习 题
ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5
如果AX和BX的内容给定如下: AX BX (1) 147BH 80DCH (2) 0B568H 54B7H (3) 4C28H 608DH (4) 0D023H 9FD0H (5) 94B7H 0B568H
问在该5种条件下,以上程序执行完后程序将转向哪里?
解: (1) L1; (2) L1; (3) L2; (4) L5; (5) L5
5.28 设在内存数据段中有一个由28个字节数据组成的数组,数组的起始地址为2000H,试编写程序段,将其分成正数组和负数组,正数组存放于2020H开始的单元中;负数组存放于2040H开始的单元中。 解: MOV BX,2000H
MOV CX,1CH MOV SI,2020H MOV DI,2040H
LOOP1: MOV AL,[BX]
SUB AL,0 JS NEGAT MOV [SI],AL INC SI JMP NEXT
NEGAT: MOV [DI],AL
INC DI
NEXT: LOOP LOOP1
HLT
5.29 在首地址为VALU的字数组中,存放有10个无符号数,编写指令序列,求出它们的平均值并存放于BL寄存器中(只取整数)。再统计出数组中有多少个小于平均值的数,将结果存于DL寄存器中。 解: MOV SI,0
MOV DX,0 MOV CX,DX
AVERAGE: MOV AL,VALU[SI]
CBW
ADD DX,AX INC SI
文件名:微机原理与接口技术习题 第 19 页 共 61 页
错误!未指定书签。与接口技术
LOOP AVERAGE MOV AX,DX MOV BL,10 DIV BL MOV BL,AL MOV SI,0 MOV DX,0 MOV CX,0
COMPARE: MOV AL,VALU[SI]
CMP AL,BL JAE GOON INC DL
GOON: INC SI
LOOP COMPARE HLT
5.30 有20个ASCII码表示的分离式BCD码存放在缓冲区UNPBCD中,编写指令序列将它们转换成组合式BCD码,即把两个相邻字节单元的数码合并成一个字节单元,高地址单元存放在高4位,低地址单元存放在低4位,转换结果存放于PABCD缓冲区中。 解: MOV CX,14H
LEA SI,UNPBCD LEA DI,PABCD
CONVERT: PUSH CX
MOV AL,[SI] SUB AL,30H MOV BL,AL
MOV AL,[SI+1] SUB AL,30H MOV CL,4 SHL AL,CL ADD AL,BL MOV [DI],AL POP CX ADD SI,2 INC DI
LOOP CONVERT HLT
习题六
6.1 请指出变量与标号都有哪些属性?它们的主要区别是什么? 解:变量的属性有:段属性,偏移属性,类型属性。
标号的属性有:段属性,偏移属性,距离属性。
变量和标号都是一种符号地址。变量的内容是代表存放在某些存储单元中的数据,变量名就代表这些单元的起始地址;标号是代表一条指令目标代码的起始地址。
文件名:微机原理与接口技术习题 第 20 页 共 61 页