请编制程序,其功能是:内存中连续存放着5个递增的无符号8位二进制数,此5个数分别对应于某非线性温度传感器在温度0℃、3℃、6℃、9℃和12℃时的输出值Yn(n=0、3、6、9、12),现采用分段线性插值法求出传感器在温度1℃、2℃、4℃、5℃、7℃、8℃、10℃和11℃时的近似输出值Yk(k=1、2、4、5、7、8、10、11),Yk取整数,其公式为Yk=[(Yn+3-Yn)/3]*(k-n)+Yn,其中k=n+1、n+2,n=0、3、6、9,将结果存入内存。 例如:" @, f) T- O$ ]3 H
内存中有 01H,0AH,19H,31H,5EH
& W7 ]6 k8 }' ^ 结果为 04H,07H,0FH,14H,21H,29H,40H,4FH
2 A0 L3 v5 |2 W& t 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。$ z: j7 A. O0 C a% t% q3 O
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
+ P" `/ F1 N* ~) P" x 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。& G% K) J5 D# B6 I# h+ u
试题程序:* {( M+ I, c" ?. W S1 H x0 i
EXTRN LOAD:FAR,SAVE:FAR* g/ D! e, l4 x
N EQU 5
/ Q, X8 r0 y& a STAC SEGMENT STACK) F6 R1 W5 V% k8 a! R
DB 128 DUP(?)
l( C. }. A5 _ STAC ENDS$ V- S( l, V- r/ t5 Y
DATA SEGMENT) S( Q/ V9 C# z9 f4 d* S
SOURCE DB N DUP(?) ;顺序存放10个字节数 K* [* Z0 A/ c* S7 X/ J) ?; E
RESULT DB 5 DUP(0) ;存放结果8 O( S; z, \ B$ z
NAME0 DB 'INPUT1.DAT',0# r" r. H- p( }% g: }
NAME1 DB 'OUTPUT1.DAT',0
/ p. v; C8 {7 ?) K) O' G DATA ENDS
- ^9 A( Y. F' W CODE SEGMENT! e/ M* ^4 B3 d6 }
ASSUME CS:CODE,DS:DATA,SS:STAC8 \/ r+ A# V6 j& R- m" @# E/ o
START PROC FAR
+ ]7 e7 d1 O1 T! A, e. f PUSH DS
- ?" O" j: P4 g3 x6 ~" ^ XOR AX,AX
+ y1 w) ]. ~7 b) y0 y+ B PUSH AX5 l: x0 [- Y: C! p% R7 `. W8 n! E
MOV AX,DATA
5 P7 \( ~2 m- W% L MOV DS,AX
7 U) m; S9 E4 o: s+ t2 W LEA DX,SOURCE ;数据区起始地址! {4 K! Y0 s: o0 v0 H. U
LEA SI,NAME0 ;原始数据文件名: r/ f5 E' q* ~' P4 v
MOV CX,N*2 ;字数5 J7 W# o( f. x2 f
CALL LOAD ;从'INPUT1.DAT'中读取数据3 a3 V/ y9 }8 v( N
;****BEGIN****
, M) O, h u" U* A LEA SI,SOURCE4 S1 {! h/ P! e4 e( @
LEA DI,RESULT
/ J- b; ~ d4 G( i MOV CX,4
7 K, ]/ B% Y4 Z: A/ l% Z __________________________" d! G1 |3 n2 P* K% [2 C l% x
AGN0: MOV BL,[SI]
1 j5 B j9 N" M. K. y0 X0 S1 h INC SI/ r% K1 P8 ~* p+ v
MOV AL,[SI]
& [$ K: i& ` U+ w SUB AL,BL' a- C: T6 W% j2 @* R; x( |- N
__________________________9 a2 m2 h) T; d7 A& f/ s
MOV BH,1- T7 f0 l8 S$ J4 a
AGN1: MUL _________________
9 b! H: u( F r9 P DIV DL
+ E) h8 r, K, F% V, Q! k* R ADD ___________,BL
' }( w Y ]& [! h1 [ MOV [DI],AL
7 B- ]8 O) i5 C2 u0 z! i INC DI
5 e( |/ u5 w2 _$ t. Y8 \ __________________________& ?0 p: C0 U+ s7 b6 b# O
INC BH! [9 a/ Z6 [/ K* R1 p8 D: g
CMP BH,______________
) Y4 n# O6 _) Z; F$ }4 O# o) o2 v JNA AGN1
! B6 g/ {! U- I! x4 e$ ]8 m/ \ ^ LOOP AGN03 p* d. n) ?6 _
;****END****
1 _+ _4 J5 t& e2 }0 W LEA DX,RESULT ;结果数据区首址6 O8 h H0 T" D% H
LEA SI,NAME1 ;结果文件名5 c9 n) \2 C9 ^: b
MOV CX,8 ;结果字节数/ h' k& c' m" G0 t
CALL SAVE ;保存结果到文件* p @5 Y7 w/ _; ~( S" F8 O; g: f
RET
. z5 B2 f5 W3 V' _, Y' Y: b START ENDP
& q. b3 z) o1 ]# B d5 P( e6 G5 Q: t CODE ENDS
" n7 d4 J* A. r END START |