微机原理与接口技术习题集 下载本文

LEA DI,0200H MOV CX,0080H MOV AL,0 N: MOV [DI],AL INC DI DEC CX JNZ N HLT

7、试编写一程序段,将字符串CHR1中的20个字符传送到CHR2中。

LEA SI,CHR1 或

LEA DI,CHR2 LEA SI,CHR1 MOV CX,20 LEA DI,CHR2 NEXT: MOV AL,[SI] MOV CX,20 MOV [DI],AL REP MOVSB INC SI HLT INC DI LOOP NEXT HLT 8、某工厂8种产品的加工程序R0、R1、…、S7分别存

放在以S0、S1、…、S7为首地址的内存区域中,而这8个首地址偏移量连续存放在以BASE为首地址的跳转表内。

假设8种产品的编号分别为0、1、2、…、7,请编程实现根据产品编号跳转到相应的执行程序。

9、统计一个20字数据块中负元素的个数,数据块的首地址为BASE,负元素的个数存放在这20字数据块之后的单元中。 LEA BX,BASE MOV CX,20

MOV DX,0

LOP1: MOV AX,[BX]

CMP AX,0 ;可用AND AX,AX JGE JUS

INC DX JUS: INC BX INC BX DEC CX JNZ LOP1 ;或LOOP LOP1

INC BX MOV [BX],DX

HLT

10、已知存储器中存放有100个8位带符号数,存储区的首地址为ARRAY,试将其中的最大值和最小值找出来,分别存放在MAX和MIN单元中。

LEA SI,ARRAY

MOV CX,100

MOV AL,80H ;-128送AL

LP1:

CLC

5

CMP AL,[SI] JL BB

JMP AA BB: MOV AL,[SI] AA:

INC SI

LOOP LP1 MOV MAX,AL

;找出最大数

;------------------------------------ LEA SI,ARRAY MOV CX,100

MOV AL,07FH ;+127送AL

LP2: CLC CMP AL,[SI] JG CC

JMP DD CC: MOV AL,[SI] DD:

INC SI

LOOP LP2 MOV MIN,AL ;找出最小数

HLT

11、统计寄存器AX内16位二进制数中0、1的个数,0的个数存CH,1的个数存CL。

MOV CX,0 ;清CH、CL

MOV DL,16 ;循环16次

CLC

;清进位位 LP: RCL AX,1

;带CF循环左移

JC NEXT ;CF=1转NEXT INC CH ;CF=0则CH内容加1

JMP AA

NEXT: INC CL ;CF=1则CL内容加1

AA: DEC DL

JNZ LP

HLT

12、数据段中有两个字符串,分别存在STR1和STR2开始的单元中。比较两个字符串是否相同,若相同使DX为0,否则使DX为0FFFFH。

LEA SI,STR1

;取源串首地址 LEA DI,STR2

;取目的串首地址

MOV CX,N ;字符串长度送计数寄存器 CLD

;增地址 REPE CMPSB ;串比较

AND CX,0FFH

;是否比较到最后字节

JZ EQQ

;串相等转EQQ MOV DX,0 否则0送DX寄存器

JMP END

EQQ: MOV DX,0FFFFH ;0FFFFH送DX寄存器

END:

HLT

13、编制一个程序,对DAT字节单元中的数(255)分别统计出有多少个10,余下有多少个5,再余下有多少个2,再余下有多少个1。统计得到的各数分别存在DAT0、DAT1、DAT2、DAT3中。 方法一:

LEA BX,DAT ;取首址 MOV AL,[BX]

;取这个字节数

6

MOV AH,0 ;AH清0 MOV DL,10 ; DIV DL

;除10

MOV DAT0,AL ;商即10的个数

MOV AL,AH MOV AH,0 MOV DL,5 DIV DL

;余数除5

MOV DAT1,AL ;商即5的个数 MOV AL,AH MOV AH,0 MOV DL,2 DIV DL

;余数除2

MOV DAT2,AL ;商即2的个数 MOV DAT3,AH

;余数即1的个数方法二: MOV BL,DAT ;取数

MOV CL,0 ;计数个数 AA: SUB BL,10 ;减10 JC BB

;借位转BB INC CL ;否则CL加1

JMP AA

BB: MOV DAT0,CL ;存10个数 MOV CL,0

ADD BL,10 ;恢复BL差值

BB1: SUB BL,5

JC CC INC CL

JMP BB1

CC: MOV DAT1,CL ;存5个数

MOV CL,0 ADD BL,5 ;恢复

DD1: SUB BL,2

JC DD INC CL

JMP DD1

DD: MOV DAT2,CL ;存2个数 ADD BL,2

MOV DAT3,BL ;存1个数

HLT

14、写出实现下列功能的指令组: (1)传送10H到AL寄存器 (2)将AL的内容乘以2 (3)传送15H到BL寄存器 (4)AL的内容乘以BL的内容 问:最后结果AX=?

15、计算Z=((X+Y)×5-Y)/2。设X的值为2,Y的值为1,结果存入数据段中的DATA单元。

7

16、编程检测50H端口输入的字节数据,若为正,将BL清0;若为负,将BL置为 FFH。

VR3 DD CONT DUP(?)

VR4 DB 2 DUP(?,CONT DUP(0)) VR5 DB ?HOW ARE YOU ??

解:为VR1分配2字节;为VR2分配10字节;为VR3分配40字节;为VR4分配22字节;为VR5分配12字节。 2、下面语句有何区别?

X1 EQU 1000H 和 X2= 1000H

解:为X1赋值1000H,之后,不能再对X1重新赋值;为X2赋值1000H,之后,可

17、寄存器DX和AX的内容构成32位数,DX内容为高16位,AX内容为低16位,以再对X2重新赋值。 编写程序段:

1)将该32位数左移两位,并将移出的高位保存在CL的低两位中; 2)将该32位数右移两位,并将移出的低位保存在BL的低两位中。

3、分析操作符有哪几种?分别举例加以说明。

解:(1)SEG [符号名] 如:MOV AX,SEG DATA (2)OFFSET [符号名] 如:MOV AX,OFFSET DAT

数据段中以变址寄存器SI为偏移地址的内存单元中连续存放着十个字节压缩型BCD (3)TYPE [符号名] 如:MOV AX,TYPE A 码,编程求它们的BCD和,要求结果存放到AX中。

(4)SIZE [符号名] 如:MOV AX,SIZE D1 (5)LENGTH [符号名] 如:MOV AX,LENGTH D1

注:DATA 是段名;DAT是定义的变量名;A是定义的数据类型变量名;D1是用DUP()定义的变量名。

4、8086/8088汇编语言程序中段的类型有几种,各段如何定义?段定义中,定位类型、组合类型、类别名各起什么作用,各有什么含义?

第五章 习题

1、下列语句在存储器中分别为变量分配多少字节?

VR1 DW 9

VR2 DW 4 DUP(?),2 CONT EQU 10

5、宏定义如下,请问要把BX寄存器左移4位,如何进行宏调用?

SHIFT MACRO X,Y,Z MOV CL,X SA&Y Z,CL ENDM

8