版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE 微机技术习题解答上册第1章 绪论1.1 8086CPU由哪两大部分组成?简述他们的主要功能?答:执行部件(BIU)和总线接口部件(EU)。主要功能:EU从BIU的指令队列中获得指令,然后执行该指令,完成指令所规定的操作。EU用来对寄存器内容和指令操作数进行算术和逻辑运算,以及进行内存有效地址的计算。EU负责全部指令的执行,向BIU提供数据和所需访问的内存或I/O端口地址,并对通用寄存器,标志寄存器和指令操作数进行管理。BIU负责从内存从内存储器的指定区域中取出指令送到指令队列中去排队,执行指令时所需要的操作数也有总线接口部件从相应的其内存区域或I/O端口中取出,传送给执行部件EU。1
2、.5 8086微处理器有那几个段寄存器?简述他们的主要功能。答:4个,CS内容指出当前代码段,SS内容指出当前程序所使用的堆栈段,DS指出了当前程序使用的数据段,ES指出了当前程序使用的附加段。第2章 Pentium系列微处理器的基本结构2.3 什么是指令周期?什么是总线周期?什么是时钟周期?说明三者的关系。答:时钟周期:CPU脉冲时间。总线周期:CPU经过总线执行信息的输入/输出过程,称为总线周期。指令周期:完成一条指令的时间。关系:一个总线周期包含多个时钟周期,一个时钟周期包含多个指令周期。2.5 IP/EIP寄存器的用途是什么?答:IP/EIP内容为下一条要取入CPU的指令在内存中的偏移
3、地址。CPU复位后,IP/EIP清零。每取一条指令,IP/EIP自动增加取入CPU的字节数目。2.6 Pentium 微处理机在实模式下操作时,段寄存器的用途是什么?答:在实地址模式下,Pentium的运行方式为8086方式,CPU可以直接访问段寄存器,每个段寄存器定义一个64KB存储器段的起点,既给出相应的段基址。CS内容指出当前代码段,SS内容指出当前程序所使用的堆栈段,DS指出了当前程序使用的数据段,ES指出了当前程序使用的附加段。2.7 在实模式下,段寄存器中装入如下数值,写出每个段的起始地址和结束地址。2000H2345H6700H0E000H答: 在实模式下,Pentium微处理器
4、具有与8086同样的基本体系结构。 物理地址是由段寄存器内容左移4位加上有效地址,而且有效地址的范围是: 0000HFFFFH. 所以2000H段寄存器的段起始地址和结束地址分别是: 20000H2FFFFH2345H段寄存器的段起始地址和结束地址分别是: 23450H3344FH6700H段寄存器的段起始地址和结束地址分别是: 67000H76FFFH0E000H段寄存器的段起始地址和结束地址分别是:0E0000H0EFFFFH2.8 Pentium微处理器在实模式下操作,对于CS:IP组合,指出要执行的指令的存储器地址。CS=2000H和IP=3000HCS=4000H 和IP=5000H
5、CS=2340H和IP=1600HCS=5A00H和IP=0B000H答: Pentium在实模式下,物理地址=段地址16+偏移量CS=2000H和IP=3000HA1=20000H+3000H=23000HCS=4000H 和IP=5000HA2=40000H+5000H=45000HCS=2340H和IP=1600HA3=23400H+1600H=24A0CS=5A00H和IP=0B000HA4=5A000H+0B000H=65000H第3章 指令系统3.1设DS=3000H,SS=2000H,AX=2A2BH,BX=1200H,CX=889AH,BP=1200H,SP=1352H,SI=
6、1354H,(31350H)=35H,(31351H)=03CH,(31352H)=8FH,(31353H)=86H,(31354H)=52H,(31355H)=97H,(326A4)=98H,(326A5H)=86H,(23150H)=88H,(23151H)=31H,(23152H)=99H(23153H)=77H答:下列指令在上述环境下执行,请填空;(1)MOV AX , 1352H ; AX= 1352H(2)MOV AX , 1352H ; AX= 868FH(3)MOV 0150HBX , CH ; (31350H)= 88H (31351H)= 03CH(4)MOV AX , 0
7、150HBP ; AX= 3188H(5)POP AX ; AX=7799H , SP= 1354H(6)ADDSI , CX ; (31354H)=ECH , (31355H)= 1FH , SF= 0,ZF= 0 ,PF= 0 ,CF= 1,OF= 1(7)SUB BH , 0150HBXSI ; BH= 7AH , SF= 0,ZF= 0 ,PF= 0 ,CF= 1,OF= 0(8)INC BYTE PTR 0152HBX ; (31352H)=90H , (31353H)= 86H , CF= 不变(9)INC WORD PTR 0152HBX ; (31352H)=90H , (31
8、353H)= 86H , CF= 不变分析:中的1352H是立即数中是直接寻址方式,要和(1)区别,加上了 就要去存储器寻址了中0150HBX和0150H+BX是一样的,还有就是BX的隐含段是DS中注意BP的隐含段是SS中注意要将SP所指向的内存的字内容传给AX,因为传的是字内容所以还有要将SP+2和(7)要注意状态标志寄存器和(9)的区别是一个是对字的处理一个是对字节的处理,但是本题个人看来没有影响3.2 阅读下列程序段填空(1)MOV BL , 98H MOV AL , 29H ADD AL , BL DAA答:AL= 27H BL= 98H CF= 1(2)MOV AX , BX NOT
9、 AX ADD AX , BX INC AX答:AX= 0H CF= 0(3)MOV AX , 0FE60H STC MOC CX , 98 XOR CH , 0FFH SBB AX , CX答:AX= FEFEH CF= 1(4)MOV DX , 0FFEEH MOV CL , 2 XAR DX , CL答:DX= FFFBH CF= 1分析:(1)看到DAA就可以将之看成“10进制”处理(2)NOT是取反操作,个人感觉NOT和INC的配合就是补码表示算法(3)注意“MOV CX , 98” 中98是10进制数(4)SAR是向右移位,同时最高位补位,其中CL存的是移位次数,移动时要先将16进
10、制数化成2进制数,再移动两次,同时最高位补位。3.3 试指出下列指令中源操作数的寻址方式(1)ADC CX ,35BX SI(2) MOV AX , 3300H(3) AND BX , BX(4) INC WORD PTR BX(5) MOV EAX , EBX ESI答案:1.相对基址变址寻址 2.直接寻址 3.寄存器间接寻址 4.寄存器间接寻址 5.基址变址寻址3.4 按下列题意要求 分别为每一小题写出相应的汇编语言指令 (1) 以寄存器BX和SI作为基址变址寻址方式把存储器的一个字传送到CX寄存器 (2) 以寄存器BX和位移量25H作为寄存器相对寻址方式把存储器的一个子和AX相加,把结果
11、送回那个字单元中 (3)将一个字节立即数0B6H与偏移地址为867H的存储器字节单元内容相比较 (4)清除寄存器SI间接寻址的存储器字但愿,同时清零CF标志位答案:1. MOV CX, BX+SI 2. ADD BX+25H , AX 3. CMP BYTE PTR 867H, 0B6H 4. AND WORD PTR SI, 03.5 设X. Y. R. S. Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)/(R-S)Z有程序如下,是在空格处填入适当的命令 MOV AX, X MOV CX, R SUB CX, S MOV Z, AX MOV Z+2, DX HLT答案:ADD A
12、X, Y MUL Z DIV CX3.6 解释PUSH DI指令是怎样工作的答案:(1)SPSP-1,调整SP指针。(2)将DI内容的高8位压入堆栈指针SP所指的存储单元。(3)SPSP-1,调整SP指针。(4)将DI内容的低8位压入堆栈指针SP所指的存储单元。第4章 汇编语言程序格式4.1 伪指令的作用是什么?答:伪指令又称为操作,他们不像机器指令那样在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编是由汇编程序处理的操作。伪指令主要完成处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。 4.2 标号的作用是什么?答:代码段中的名字字段叫做标号。它用来表示一个指令语
13、句的符号地址,可以用该符号地址来访问该指令。4.3 MASM识别的标号中最多字符数是多少个?答:根据书中的对一条指令的名字字段的定义规则:名字的长度任意,但只有前31位有效,可知字符数最多是31个。4.4 假设VAR12和VAR34为字变量,LAB为标号,试指出下列指令的错误之处。 (1) ADD VAR12 ,VAR34 ADD指令的源操作数和目的操作数不能同时为内存操作数,但VAR12和VAR34都是内存操作数。 (2) SUB AL ,VAR12 VAR12是字变量,而AL是字节型的,不匹配 (3) JMP LAB DI JMP 跳转指令,后面直接跟指令标号,所以不应该有DI. (4)
14、JNZ VAR12 JNZ条件跳转指令,后面直接跟指令标号,但是VAR12 不是标号。画图说明下列语句所分配的存储空间及初始的数据值AAA2 DB BYTE,12,5DUP(0,?,2DUP(1,2),?);BB3 DW 5DUP(0,1,2),?,-8; 假设两题的初始地址都是0H 变量名偏移量存储单元内容AAA20000H42H0001H59H0002H54H0003H45H0004H0CH0005H0H0006H保留原值0007H1H0008H2H0009H1H000AH2H000BH保留原值000CH0H000DH保留原值000EH1H000FH2H0010H1H0011H2H0012
15、H保留原值0013H0H0014H保留原值0015H1H0016H2H0017H1H0018H2H0019H保留原值001AH0H001BH保留原值001CH1H001DH2H001EH1H001FH2H0020H保留原值0021H0H0022H保留原值0023H1H0024H2H0025H1H0026H2H0027H保留原值BB30000H00H0001H00H0002H01H0003H00H0004H02H0005H00H0006H00H0007H00H0008H01H0009H00H000AH02H000BH00H000CH00H000DH00H000EH01H000FH00H0010H
16、02H0011H00H0012H00H0013H00H0014H01H0015H00H0016H02H0017H00H0018H00H0019H00H001AH01H001BH00H001CH02H001DH00H001EH保留原值001FH保留原值0020HF8H0021HFFH4.6 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?FLDB1 DB ?TABLEA2 DW 20 DUP (?)TABLEB3 DB ABCDTABLEA4 DW 10 DUP (?)TABLEB5 DB 20 DUP (?)TABLEC6 DB 1234 MOV AX, TYPE FLD
17、B1 ;执行该语句后AX内容为 0001H MOV AX, TYPE TABLEA2 ;执行该语句后AX内容为 0002H MOV CX, LENGTH TABLEA2 ;执行该语句后CX 内容为0014H MOV DX, SIZE TABLEA2 ;执行该语句后DX内容为0028H MOV CX, LENGTH TABLEB3 ;执行该语句后CX内容为0001H MOV AX, LENGTH TABLEA4 ;执行该语句后AX内容为 000AH MOV BL, LENGTH TABLEB5 :执行该语句后BL内容为14H MOV CL, LENGTH TABLEC6 ;执行该语句后CL内容为
18、 01H4.7 设已知语句为: ORG 0024H DATA1 DW 4, 12H, $+4则执行指令 MOV AX, DATA1+4 后 AX值是多少?答案:0024H0024H 04H 00H 12H0028H H 00H0028H H 2CH 00H (0028H为在给$ +4分配空间时 $ 的值)由题目知道DATA1指向偏移地址0024H , 而指令是将DATA1+4所指向位置的内容取出送给AX寄存器,故由图示可以知道指令执行后AX中的内容为002CH第5章 程序设计5.1 一定义了两个整数变量A和B,试编写一个源程序完成如下功能: (1)若两数中有一个是偶数,则将奇数存入A中,偶数存
19、入B中; (2)若两数均为奇数,则把变量A和B交换; (3)若两数均为偶数,则两数除以2后再存入原变量中。答案:DATA SEGMENTA DB X ;X,Y为整数变量B DB Y DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART : MOV AX, DATA MOV DS, AX MOV AL, A MOV BL, B SAR AL, 1 ;算术右移,取数的最末位判断A中数是奇数还是偶数,同时实现对原数除2操作 JC AA1 ;若果跳转表明A中为奇数 SAR BL, 1 JC AA2 ;若跳转表明A中为偶数,B中为奇数 MOV A, A
20、L ;执行到这里,表明A,B都为偶数,由于之前的算术右移已经实现除2操作,故直接将其移回即可 MOV B, BL JMP AA3 ;若不添加跳转会依次往下执行AA1 : SAL BL, 1 JC AA3 ;此处跳转,表明A奇数B偶数,符合(1),不必变化,否则为两个奇数,交换此处修改此处修改AA2 : MOV AL, A ;由于之前对AL, BL中的数有改动,此处重新赋值 MOV BL, B XCHG AL, BL ;实现AL 和 BL中的数交换; MOV A, AL MOV B, BLAA3 : MOV AH, 4CH ;返回DOS系统 INT 21HCODE EDNS END START
21、上机调试,运行通过的程序:DATA SEGMENTA DB 12 B DB 15 DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART : MOV AX, DATA MOV DS, AX MOV AL, A MOV BL, B SAR AL, 1 ;算术右移,判断奇偶,并实现除2 JC AA1 ;跳转表明AL中为奇数 SAR BL, 1 JC AA2 ;跳转表明AL中为偶数,BL中为奇数 MOV A, AL MOV B, BL JMP AA3 AA1 : SAL BL, 1 JC AA2 ;表明AL,BL中都为奇数 AA2 : MOV AL,
22、 A MOV BL, B XCHG AL, BL MOV A, AL MOV B, BLAA3 : MOV AH, 4CH INT 21HCODE ENDS END START ;该程序实例未显示AL,BL最后结果到CRT上5.2 编写统计AX中1、0个数的源程序。1的个数存入CH,0的个数存入CL。答案:DATA SEGMENTA DW X ;X中存的是任意数据DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, A ;将变量移入AX中 MOV DL, 16 ;设置计数值 MOV
23、 CX, 0 ;清零结果寄存器 AA1: ROL AX, 1 ;循环左移,最高位数值会依次移入CF中 JC AA2 ;当CF为1时,跳转 INC CL ;若未跳转,表明当前位为0,故CL值增1 DEC DL ;修改计数值 JNZ AA1 ;未将AX中的位判断完 JMP AA3 AA2: INC CH ;当前位为1 DEC DL JNZ AA1 AA3: MOV AH 4CH ;返回DOS系统 INT 21HCODE ENDS END START上机调试,运行通过的程序:DATA SEGMENTA DW 1234H B DB 0AH,0DH,CL DE GE SHU $ ; 在CRT上只显示CL
24、中的数,即0的个数 DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, A MOV DL, 16 ;循环计数条件 MOV CX, 0 ;清零结果寄存器 AA1: ROL AX, 1 JC AA2 ;跳转表明当前位为一 INC CL DEC DL JNZ AA1 JMP AA0 ;循环结束处理CLAA2: INC CH DEC DL JNZ AA1AA0: LEA DX, B ;dos功能显示字符串 MOV AH,9 INT 21H MOV BL, CL ;仅处理CL中的数,显示到
25、CRT上 MOV DH, 2 ;控制CL高四位和低四位的分别处理 SHR CL, 1 ;处理高位 SHR CL, 1 SHR CL, 1 SHR CL, 1AA4: CMP CL, 0AH JC AA5 ADD CL, 37H JMP AA6AA5: ADD CL, 30HAA6: MOV DL, CL MOV AH, 2 INT 21H MOV CL, BL ;处理低四位 AND CL, 0FH DEC DH JNZ AA4AA3: MOV AH, 4CH INT 21HCODE ENDS END START5.3试编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序
26、,若相同则显示MATCH,若不同则显示NO MATCH。答案:说明:(1)AA1用于判断两个串是不是相等; (2)AA2处理不等的情况; (3) AA3处理将MATCH 和 NO MATCH 显示到CRT上 DATA SEGMENT STRING1 DB afjlaf ;这里的字符串可以自己定义NUM1 EQU $-STRING1 ;用以记录STRING1的字串长度,方便设置计数STRING2 DB alfgheNUM2 EQU $-STRING2VAR1 DB MATCHNUM3 EQU $-VAR1VAR2 DB NO MATCHNUM4 EOQ $-VAR2DATA ENDSCODE S
27、EGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX LEA SI, STRING1 ;用以标记字符串1的起始位置 LEA DI, STRING2 MOV AX, NUM1 MOV BX, NUM2 ;将要比较的两个串的长度赋给寄存器 CMP AX, BX JNZ AA2 ;两串长度不同,一定不满足题目条件 MOV CX, AX ;由于之前已判断两字符串等长,将其长度赋给寄存器CX,用以控制计数条件AA1: MOV AL, SI MOV AH, DI CMP AL, AH JNZ AA2 ;跳转表明有字符不匹配 INC SI
28、INC DI LOOP AA1 LEA修改 DI, VAR1 ;此时LOOP循环结束,两串相同显示MATCH修改 MOV CX, NUM3 JMP AA3AA2: LEA修改 DI, VAR2 修改 MOV CX, NUM4AA3: MOV DL, DI ;显示字符串到CRT上 MOV AH, 2 INT 21H INC DI LOOP MOV AH 4CH ;返回DOS系统 INT 21HCODE ENDS END START上机调试,运行通过的程序:DATA SEGMENT STRING1 DB afjlaf NUM1 EQU $-STRING1 ;记录STRING1的长度,后面处理类似
29、STRING2 DB alfgheNUM2 EQU $-STRING2VAR1 DB MATCHNUM3 EQU $-VAR1VAR2 DB NO MATCHNUM4 EQU $-VAR2DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX LEA SI, STRING1 LEA DI, STRING2 MOV AX, NUM1 ;取两个串长度 MOV BX, NUM2 CMP AX, BX ;若长度不等,肯定不匹配 JNZ AA2 MOV CX, AX ;此步表明两串等长,于是逐个比较两串字符
30、AA1: MOV AL, SI MOV AH, DI CMP AL, AH JNZ AA2 ;只要出现不等就表明两串不匹配 INC SI INC DI LOOP AA1 LEA DI, VAR1 ;将DI指向MATCH串的地址 MOV CX, NUM3 JMP AA3AA2: LEA DI, VAR2 MOV CX, NUM4AA3: MOV DL, DI ;处理将MATCH 或NO MATCH 显示在CRT上 MOV AH, 2 INT 21H INC DI LOOP MOV AH, 4CH INT 21HCODE ENDS ;此例中显示NO MATCH END START5.4 试编写从键
31、盘上接收一个4位的十六进制数,并在CRT上显示出与它等值的二进制数的源程序。答案:基本思想:(1)十六进制数包括1-9,A-F,并且输入后会以ASCII码形式保存于AL中,需要分 别处理;(2)需要解决如何将等值的二进制数数出到屏幕上,输出的应为0,1形式;DATA SEGMENTBUF DB 4DPU(?) ;用以保存输入的四位十六进制数DATA ENDSCODE SEGEMNT ASSUME CS:CODE,DS:DATASTART: MOVE AX, DATA MOVE DS, AX MOV CX, 4 ;设置输入时的循环次数 LEA SI, BUF ;从此处开始的部分进行对输入字符的处
32、理AA1: MOV AH, 1 INT 21H CMP AL, 40H ;40H为小于A的ASCII码值 JC AA5 ;跳转表明AL中的值小于A,故输入的为数字 SUB AL, 37H ;将A-F的ASCII码转换为对应的二进制值AA5: AND AL, 0FH ;将19的ASCII码转换为对应的二进制值 MOV SI, AL ;保存到BUF中 INC SI LOOP AA1 ;循环输入四次 LEA SI, BUF ;从此处往下的部分处理如何将等值的二进制数输出到CRT上 MOV DH, 4 ;控制每次从BUF中取出一位数进行处理 MOV CL, 4 ;BUF单元中的数只有低四位是需要显示的
33、AA2: MOV AL, SI ROL AL, CL ;将取出的数据左移四位至高位 MOV BL, 4 ;控制对AL中高4位的0,1处理AA4: MOV DL, 30H ;DL中为0的ASCII码 ROL AL, 1 ;循环左移以此判断每一位的0,1情况 JNC AA3 ;CF不为表明当前位为0 ADD DL, 1 ;否则为 1,需要对DL增1 AA3: MOV AH, 2 INT 21H DEC BL ;修改内循环计数值 JNZ AA4 INC SI ;修改外循环计数值 DEC DH JNZ AA2 MOV AH, 4CH INT 21HCODE ENDS END START上机调试,运行通
34、过的程序:DATA SEGMENTBUF DB 4 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX, DATA MOV DS, AX MOV CL, 4 LEA SI, BUF ;将从键盘输入的字符保存在BUF中 AA1: MOV AH, 1 INT 21H MOV SI,AL INC SI DEC CL JNZ AA1 LEA SI, BUF ;处理BUF中的字符,输入的内部表示为ASCII码,要先转换为16进制 MOV BL, 4 ;控制外循环,一共有四个需要处理的字符AA3: MOV CH, 4 MOV B
35、H, SI CMP BH, 3AH ;判断是否为0-9 JNC AA4 ;跳转表明属于A-F AND BH, 0FH MOV CL, 4 SHL BH, CL ;将低四位的值移到高四位 JMP AA5AA4: SUB BH, 37H MOV CL, 4 SHL BH, CLAA5: MOV DL, 30H ;处理将16进制的数以2进制形式显示在CRT上 SHL BH,1 JNC AA6 ;当前位不为1 ADD DL, 1AA6: MOV AH,2 INT 21H DEC CH ;CH为内循环判断每一个字符的2进制0,1情况 JNZ AA5 INC SI DEC BL JNZ AA3 MOV A
36、H,4CH INT 21HCODE ENDSEND START5.5 设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NUM开始的内存区中,大写字母送入BCHAR开始的内存区中,小写字母送入LCHAR开始的内存区中,其他字母符存入OTHER开始的内存区中。答案:DATA SEGMENTSTRING B AJ29FdjalS3$VAR DB $ ;作为条件控制判断NUM DB 20 DUP (?)BCHAR DB 30 DUP (?)LCHAR DB 30 DUP (?)OTHER DB 50 DUP (?) ;50可以视要保存的其余字符的
37、多少来更改DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS: DATASTART: LEA SI, STRING ;令SI指向要判断的字符 MOV BH, VAR ;作为循环控制条件 MOV BL, SI LEA DX, NUM ;取NUM首址 LEA DI, BCHAR ;取BCHAR首址 LEA CX, LCHAR ;取LCHAR首址 LEA BP, OTHER ;取OTHER首址AA1: MOV AL, 30H ;数字0的ASCLL码 CMP BL JC AA2 ;CF =1,表明BL小于AL中的内容,属于OTHER ADD AL, AH ;(AL)=AH
38、+30H=3AH CMP BL JC AA3 ; (BL)(AL),BL中的内容属于数字区,应存入NUM ADD AL, 8H ;(AL)=41H,A的ASCLL码 CMP BL JC AA2 ADD AL, 1AH ;(AL)=5BH CMP BL JC AA4 ;属于AZ之间 ADD AL, 7H ;(AL)=61H,a的ASCLL码 CMP BL JC AA2 ADD AL, 1AH ;(AL)=7BH CMP BL JC AA5 ;属于az之间,否则为OTHER直接往下处理即可AA2: MOV BP, BL INC BP JMP AA6AA3: MOV DX, BL INC DX JM
39、P AA6 AA4: MOV DI, BL INC DI JMP AA6 AA5: MOV CX, BL INC CXAA6: INC SI MOV BL, SI CMP BL, BH;判断是否是字符串结尾 JNZ AA1 MOV AH, 4CH INT 21HCODE ENDS END START上机调试,运行通过的程序:DATA SEGMENTSTRING DB AJ29Fdjal*(%S3$3 VAR DB $ NUM DB 20 DUP (?)CHAR DB 50 DUP (?)BCHAR DB 30 DUP (?)LCHAR DB 30 DUP (?)OTHER DB 50 DUP
40、(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS,AX LEA SI, STRING ;取数进行比较处理 LEA DI, NUM LEA BX, CHAR LEA BP, OTHER MOV AH, VAR ;设置计数判断标志 AA1: MOV AL, SI ;分类比较 CMP AL, 30H JC AA2 CMP AL, 3AH ;是否属于数字区 JC AA3 CMP AL, 40H JC AA2 CMP AL, 5BH ;是否属于大写字母区A-F JC AA4 CMP AL, 60H JC
41、 AA2 ;转向AA2的为其他字符 CMP AL, 7BH ;是否为小写字母区a-z JC AA4 AA2: MOV BP, AL INC BP JMP AA6AA3: MOV DI, AL INC DI JMP AA6 AA4: MOV BX, AL ;由于在这里使用的必须为基址或变址寄存器,AA4只处理 ;将字母放进CHAR中保存,以便进一步处理区分大小写 INC BX AA6: INC SI MOV AL, SI CMP AL, AH ;判断是否为结尾$ JNZ AA1 MOV DI, AH ;分别为各段设置以$结尾,便于使用dos 输出字符串9的功能 MOV BX, AH MOV BP
42、, AH LEA SI, CHAR ;将CHAR中保存的字母按大小写区分放进BCHAR 和 LCHAR LEA BX, BCHAR LEA BP, LCHARA1: MOV AL, SI ;A1-A4处理过程同AA1到AA6 CMP AL, 5BH JC A3A2: MOV BP, AL INC BP JMP A4A3: MOV BX, AL INC BXA4: INC SI MOV AL, SI CMP AL, AH JNZ A1 MOV BX, AH MOV BP, AH LEA SI, NUM ;输出数字段 MOV DX,SI MOV AH,9 INT 21H MOV DL,20H ;显
43、示空格 MOV AH,2 INT 21H LEA SI,BCHAR ;输出大写字母段 MOV DX,SI MOV AH,9 INT 21H MOV DL,20H MOV AH,2 INT 21H LEA SI, LCHAR ;输出小写字母段 MOV DX,SI MOV AH,9 INT 21H MOV DL,20H ;显示空格 MOV AH,2 INT 21H LEA SI,OTHER ;输出其他符号 MOV DX,SI MOV AH,9 INT 21H MOV DL,20H MOV AH,2 INT 21H MOV AH, 4CH INT 21HCODE ENDS END START5.6试
44、编写找出首地址为BUF数据块中的最小偶数(该数据块中有100个带符号字节数),并以16进制形式显示在CRT上的源程序。答案:问题思想:(1)如何对一百个有符号数比较处理; (2)将得到的结果以十六进制形式回显CRT上;DATA SEGMENTBUF DB (100个带符号数据)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX LEA SI, BUF ;取数据缓冲区首址 MOV CX, 100 ;对一百个数据的比较循环计数 MOV AL, 7E ;设置AX中为最大偶数,AX最终保存的为找到的最小
45、偶数AA1: MOV BL, SI SHR BL, 1 ;对BL中数据逻辑右移一位,判断是否为偶数 JC AA2 ;跳转表明当前取出的数为奇数 CMP AL, SI JLE AA2 ;表明AL中的数不大于SI存贮单元中的数 MOV AL, SI ;否则将SI存储单元中的数赋给ALAA2: INC SI LOOP AA1 MOV CL, 4 ;AL中保存的是最小的偶数,但要以十六进制的形式显示,需要对AL中的数据进行处理,此处开始处理数据 MOV DL, AL ;把AL中的数移近DL中 SHR DL, CL ;将DL的高四位移至低四位AA3: OR DL, 30H CMP DL, 3AH ;判断
46、是否为0-9 JC AA4 ADD DL, 7 ;形成A-F的ASCII码AA4: MOV AH, 2 ;显示高四位的数值 INT 21H MOV DL, AL ;处理低四位 AND DL, OF ;取低四位数据 OR DL, 30H CMP DL, 3AH ;判断是否为0-9 JC AA5 ADD DL, 7 ;形成A-F的ASCII码AA5: MOV AH, 2 INT 21H MOV DL, H ;显示H MOV AH, 2 INT 21H MOV AH 4CH INT 21HCODE EDNSEND START 上机调试,运行通过的程序:DATA SEGMENTBUF DB 0FAH,
47、02H,93H,0A3H,0BDH,89H ;一百个数据在此处只写了7个示例VAR EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,BUF ;取数据缓冲区首址 MOV CX,VAR ;对一百个数据的比较循环计数 DEC CX MOV AL,7EH ;设置AX中为最大偶数,AX最终保存的为找到的最小偶数AA1: MOV BL,SI SHR BL,1 ;对BL中数据逻辑右移一位,判断是否为偶数 JC AA2 ;跳转表明当前取出的数为奇数 MOV BL,SI CMP AL
48、,BL JL AA2 ; (AL)LINK DD.OBJMicrosoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File DD.EXE: DDList File NUL.MAP:Libraries .LIB:LINK : warning L4021: no stack segmentD:MASM5.0DD55 67 78 98 64 77 84 76 93 88 91 84 69 83 79 80 94 71 83 89 61 62 63 6
49、4 65 66 69 73 95 9798D:MASM5.0 6.2 用子程序结构编写计算: S=1! + 2! + 3!+ 4!+ 5!+ 6!+ 7!解:通过设计一个可以用来求阶乘的子程序,然后在主程序中调用7次实现题目要求。 汇编程序如下: DATA1 SEGMENT SUM DW , 0H DATA1 ENDS CODE1 SEGMENT ASSUMNE CS:CODE1,DS:DATA1 MAIN PROC FAR MOV AX , DATA1 MOV DS, AX MOV CX, 0AA1: INC CXCALL MM ;子程序返回阶乘数,放在DX中ADD SUM, DXCMP C
50、X , 7JNE AA1MOV AH,4CHINT 21HMM PROC NEAR ;求阶乘的子程序 PUSH AX MOV AX ,1 BB1: MUL CXDEC CXCMP CX, 0JNE BB1MOV DX, AXPOP AXMOX AH,4CHINT 21HMM ENDP MAIN ENDPCODE1 ENDS END上机调试,运行通过的程序:CODE1 SEGMENT ASSUME CS:CODE1MAIN PROC FAR MOV SI,0 MOV BX,0 MOV AX,0 AA1: INC BX CALL MM ;BX作为子程序的参数,返回求得的阶乘值 ADD SI,AX
51、;SI中保存累加的和 CMP BX,7 JNE AA1 ;循环7次 MOV DX,SI MOV BX,SI ;将SI中的和按从高到低输出 MOV CL,4 SHR DH,CL MOV DL,DH ADD DL,30H MOV AH,2 ;千位 INT 21H MOV DH,BH AND DH,0FH ADD DH,30H MOV DL,DH MOV AH,2 ;百位 INT 21H MOV DL,BL SHR DL,CL ADD DL,30H MOV AH,2 ;十位 INT 21H MOV DH,BL AND DH,0FH ADD DH,30H MOV DL,DH MOV AH,2 ;个位
52、INT 21H MOV AH,4CH INT 21HMAIN ENDPMM PROC NEAR PUSH CX MOV CX,BX MOV AX,1 BB1: MUL CX DEC CX CMP CX,0 JNE BB1 POP CX RET MM ENDPCODE1 ENDSEND MAIN运行结果Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename EE.OBJ: EESource listing
53、NUL.LST: EECross-reference NUL.CRF: EE 49610 + 451238 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsD:MASM5.0LINK EE.OBJMicrosoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File EE.EXE: EEList File NUL.MAP:Libraries .LIB:LINK : warning L4021: no stack segmentD:MASM5.0EE1719D:MASM5.0第7章 宏汇编第8章 存储器8.1.什么叫刷新?为什么要刷新?说明刷新有几种方法?答:1.所谓刷新,就是将存储单元的内容重新按原样设置一边。2.不管是哪一种动态RAM,都是利用电容存储电荷的原理来保存信息的,由于电容会逐渐放电,所以对动态RAM必须不断进行读出和再写入,以使泄放的电荷收到补充,也就是进行刷新。3.集中刷新方式在2ms间隔内集中地安排若干刷
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借他人钱财合同范例
- 农村老人买房合同范例
- 公共厕所装修合同范例
- 2024乙方甲方城乡规划设计咨询合同
- 2024年广告保密协议:专业定制版
- 3D打印项目招标公司上墙规范
- 博物馆停车场管理规定
- 制造业生产通讯协议
- 水利工程电子招投标实施办法
- 商业综合体电气设备招投标文件
- 小学数学人教四年级上册(2022年新编)平行四边形和梯形认识平行四边形
- 2021年深圳市地铁集团有限公司校园招聘笔试试题及答案解析
- 犟龟-完整版获奖课件
- 工业产品CAD技能三级试题及其评分标准
- 汉语词性专题练习(附答案)
- 劳动合同-高管补充协议20110520
- 浙江省温州市地图矢量PPT模板(图文)
- 上海市建设工程项目管理机构管理人员情况表
- 北师大版二年级数学上册第九单元《除法》知识点梳理复习ppt
- 空气能室外机保养维护记录表
- DB37∕T 5162-2020 装配式混凝土结构钢筋套筒灌浆连接应用技术规程
评论
0/150
提交评论