当前位置:首页 > 微机原理与接口技术习题答案4
L1:
MOV AX,VAR2 LEA SI,VAR2 JMP OVER L2:
CMP BX,VAR3 JZ OVER MOV AX,VAR3 LEA SI,VAR3 OVER:
7. 分析下列程序段的功能:
MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
解:程序段完成DX:AX组成的32位无符号数左移4位,低位补零(也即除以16)。 8. 下列程序段执行后,求BX寄存器的内容:
MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL
解:实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。 9. 下列程序段执行后,求BX寄存器的内容:
MOV CL,5 MOV BX,7D5CH SHR BX,CL
解:完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。
10. 将BUFFERS中N个字按相反顺序传递到BUFFERT中。 解:
LEA SI,BUFFERS LEA DI,BUFFERT MOV CX,N ADD DI,N ADD DI,N SUB DI,2 L1:
MOV AX,[SI] MOV [DI],AX ADD SI,2 SUB DI,2 LOOP L1
11. 数组ARRAY中存放有一组字型数据,前两个字节存放数据长度(5的倍数)。为给这
个数组中的数据进行加密保护,每5个数据取出一个数据进行加密处理:奇数位进行取反,偶数位不变,例如对数据0110 1100 1011 0001B加密后变成1100 0110 0001 1011B,编写加密程序encrpytion 和解密程序 unencrpytion 。
解:约定从第一个数据开始,每5个数据为一组,每组中的第一个数据采取加密/解密处理。由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一个程序。
ENCRPYTION PROC NEAR
LEA SI,ARRAY
XOR DX,DX MOV AX,[SI] MOV BX,5 DIV BX MOV CX, AX ADD SI, 2
L1:
MOV AX, [SI] XOR AX,0AAAAH MOV [SI], AX ADD SI,10 LOOP L1 RET
ENCRPYTION ENDP
13. 设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)
和最大值(存入DX)。
解:BUF存放有N个无符号数的程序如下: MOV CX,N-1 LEA SI,BUF MOV AX,[SI] MOV DX,AX ADD SI,2 L1:
CMP AX,[SI] JBE NOCHG1 XCHG AX,[SI] NOCHG1:
CMP DX,[SI] JAE NOCHG2 XCHG DX,[SI] NOCHG2:
ADD SI,2 LOOP L1
如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:
JBE NOCHG1 JAE NOCHG2
改成:JLE NOCHG1 改成:JGE NOCHG2
14. 设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的
0元素抹去,并更新其长度。
解:设BUFFER中存放的是字节型数据。采用双指针方法:SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。
LEA SI, BUFFER XOR CX,CX MOV CL, [SI] INC SI MOV DI, SI XOR BH,BH XOR AL,AL L1:
CMP [SI],AL JZ L2 MOV BL,[SI] MOV [DI],BL INC DI INC BH L2:
INC SI LOOP L1
MOV BUFFER,BH
16. 编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个
数相等的元素个数。
解:统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为: COUNTBYTE PROC NEAR PUSH AX PUSH CX
共分享92篇相关文档