微机原理习题答案1234章 下载本文

DATA SEGMENT BUFFER DB 3 DB 'ABC'

DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV AX,STACK MOV SS,AX LEA SP,TOP MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,BUFFER XOR CX,CX MOV CL,[DI] INC DI

CALL SETEVEN MOV AH,4CH MOV AL,0 INT 21H SETEVEN PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DI SETEVEN1:

MOV AL,[DI] CALL COUNTBYTE

- 32 -

;首字节为字符串长度 ;字符串

;返回DOS

;加偶校验子程序

AND BL,01H JZ SETEVEN2 OR AL,80H MOV [DI],AL SETEVEN2: INC DI

LOOP SETEVEN1 POP DI POP CX POP BX POP AX RET SETEVEN ENDP COUNTBYTE

PROC NEAR

PUSH AX PUSH CX MOV CX,8 XOR BL,BL

COU1:

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

CODE ENDS END START

20. 编写程序完成求多位数(N个字)的绝对值。

- 33 -

21. 已知斐波那契数列的定义为:F1数列前n项的子程序。

?1,F2?1,Fi?Fi?1?Fi?2(i?3),编写求该

解:设奖斐波那契数列存放在字变量RESULT中。在数据段中定义 RESULT DW 100H DUP(?)

在代码段中编写子程序 FIBONACCI

PROC NEAR

XOR DI,DI

MOV RESULT[DI],1

;前两个数为1

MOV RESULT[DI+2],1

ADD DI,4 MOV CX,N

L1:

MOV AX, RESULT[DI-4] ADD AX, RESULT[DI-2] MOV RESULT[DI],AX ADD DI,2 LOOP L1 RET FIBONACCI ENDP

22. 编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。 解:在数据段中定义变量:

TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5 DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代码段中编写程序段:

MOV XOR MOV MOV

CX,10 SI,SI

DX,TABLE[SI] AH,9

L1:

- 34 -

INT ADD CALL LOOP

21H SI,2 WAIT L1

这里,WAIT为延时子程序,用于在显示信息之间的停顿。

23. 编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。

解:先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。

DISPALD PROC NEAR

PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL,100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2

- 35 -