请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列Ai和Bi(i=0…9),Ai在前,Bi在后。求Ci,Ci=|Ai+Bi|。结果Ci用字单元按C0,…,C9的顺序存放。 例如:0 [+ Y* R m# L: a4 f3 t
序列Ai为: 98H,53H,39H…4 L. `8 f+ K! p
序列Bi为: 80H,67H,94H…
/ }/ n$ n0 M% r4 |. O 序列Ci为: 00E8H,00BAH,0033H…
0 ? n* V' A2 J- L4 w( Q 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。3 t1 O( r* p+ L: n0 x$ ~8 @
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
5 N* E6 Y$ T+ `8 L 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
* A( M- E4 q- k P. W2 l- D7 i w 试题程序:9 o- D( @% G9 ]& b- t
EXTRN LOAD:FAR,SAVE:FAR( ]( t' W+ h: K
N EQU 10 ;每个序列的长度 S1 i8 z( N' |0 }
STAC SEGMENT STACK+ x. A- [: |$ D& ~0 q3 }3 S1 w
DB 128 DUP(?)
( V/ [0 Y5 g2 O1 c9 b7 ` STAC ENDS
" q1 q7 e( F6 N% w- X DATA SEGMENT6 [" `8 \ m/ _
SOURCE DB N*2 DUP(?) ;顺序存放A0,L,A9,B0,L,B9' P4 n; D% V3 Q" } I
RESULT DW N DUP(0) ;顺序存放C0,L,C9) `0 b5 E. @+ q* N$ K
NAME0 DB 'INPUT1.DAT',0
/ j S/ y4 s6 P- J( r9 s6 y$ x7 D NAME1 DB 'OUTPUT1.DAT',0
, K D9 ^+ B5 Y2 G- A DATA ENDS
5 W8 L; T( ^$ `, X7 H, w7 j: a% K CODE SEGMENT0 I" D& s9 Q- \% `
ASSUME CS:CODE,DS:DATA,SS:STAC7 \; |9 Z3 g6 w: R* [1 f, O" w
START PROC FAR
! ^' u2 J. ^4 P PUSH DS
' c: c6 T p4 z2 w6 M" x/ ~( X. O; W XOR AX,AX1 _! w" O' {8 t+ d
PUSH AX( V" [6 E( m$ P9 d. D% D
MOV AX,DATA- r( E& V" Z. x8 b* B* h
MOV DS,AX
5 B7 A/ h$ c- f: o. Z LEA DX,SOURCE ;数据区起始地址
3 U: s3 p5 f2 `+ ]3 t- X LEA SI,NAME0 ;原始数据文件名* n' k% ]$ @6 `- E
MOV CX,N*2 ;字节数
. `% \8 r0 q m3 E) k' o+ H CALL LOAD ;从'INPUT1.DAT'中读取数据
7 Q% c6 J7 H+ t. y& ?: Z5 d ;****BEGIN****
* X2 m' t/ i8 c% v$ N' e MOV DI,OFFSET RESULT ;结果从RESULT开始存放
; D+ X5 R$ Y/ E9 [1 ^- R MOV BX,0
, e6 s: a0 o! m+ S3 i9 i; d# B, H. p MOV CX,_______________
- { B" \! Q8 h1 r PRO: MOV AH,08 D% \1 x6 _# M2 l
MOV AL,_______________ ;序列Bi中的一个整数
9 q+ a; h1 z4 p/ | MOV DL,AL ;暂存Bi ^% X2 c% s& F, Y0 J% @
ADD AL,_______________ ;Ci=Bi+Ai6 y2 B0 V( p+ Y, v# U3 o( {) W
JNO STAY ;无溢出转STAY
3 S# K: U' S) ?5 v8 W JUMP1: MOV AH,00 ;有溢出
) x8 {5 i4 Q5 z o# { Y) W ADD DL,0
, ?" L# r+ d, l% R, B% e JNS JUMP ;Bi是正数(为一个正数加上一个正数,结果为
' ^! L+ g# \) W ;负数的溢出情况)转JUMP(AH已为00H)! @( D' ]2 b1 ^ x$ v( X2 b; \9 f! O
MOV AH,_______________ ;Bi是负数(为一个负数加上一个负数,结果为6 k# n$ B# T& \
;正数的溢出情况)将结果变为负数. O, \! r5 s+ o& R+ g
JMP __________________
5 d8 k4 Y# }0 @ v STAY: ___________________________ ;AL中数的符号扩展到AH
8 Y5 Q1 I0 D# \6 g9 p0 o: a: z" [ JUMP: AND AX,AX( T" e5 ?) o, v0 D2 c
________ PLP2 |. O; j2 ]) N! w
NEG AX7 Q! j( E" v# M. o2 `
PLP: MOV [DI],AX+ C t0 S6 n" Z# C+ J& R) e$ _
ADD DI,2! ~2 h+ V) @( ?* e
INC BX+ m) l: V" B U6 N% A
DEC CX7 n) R0 m, w5 b# C; M# d
JNZ PRO7 o4 P' W! @4 K. ]7 f/ S
;****END****- H; R5 o, c3 G0 l
LEA DX,RESULT ;结果数据区首址' \( n0 P8 F) M7 I! ~4 E
LEA SI,NAME1 ;结果文件名
/ m) i$ ^" [ g8 l* Q MOV CX,N*2 ;字节数8 J4 e M/ q9 v7 |
CALL SAVE ;保存结果到文件
, U+ I# p+ @$ U" }) ] RET+ j. g+ T2 W/ y @
START ENDP& r, y1 b' p. y# S$ w# Y
CODE ENDS
& f% U7 a% K6 z% N END START |