微机原理习题答案1234章

发布时间 : 星期日 文章微机原理习题答案1234章更新完毕开始阅读

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:

- 28 -

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 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

- 29 -

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

- 30 -

MOV CX,8 XOR BL,BL

COU1:

SHR AL,1 ADC BL,0 LOOP COU1 POP CX POP AX RET COUNTBYTE ENDP

在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字

节中有4个1。设BUF中有N个字节型数据,结果保持在BH中。

MOV CX,N LEA SI, BUF XOR BH,BH L1: MOV AL,[SI]

CALL COUNTBYTE CMP BL,4 JNZ L2 INC BH L2: INC SI

LOOP L1

19. 在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存放字

符的ASCII码,编写子程序完成在最高位给字符加上偶校验。 解:STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL BYTE

STACK ENDS

- 31 -

联系合同范文客服:xxxxx#qq.com(#替换为@)