请编制程序,其功能是:内存中连续存放的20个八位无符号数是一个自动抄表示抄录的20个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X表示用水量;Y表示水费,单位为分): a) Y=X*70 X<=10 b) Y=10*70

admin2010-09-01  31

问题 请编制程序,其功能是:内存中连续存放的20个八位无符号数是一个自动抄表示抄录的20个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X表示用水量;Y表示水费,单位为分):
   a) Y=X*70    X<=10
   b) Y=10*70+(X-10)*120    X>10
   例如:
   用水量(X):04H,0FH,18H…
   水费(Y):  0118H,0514H,094CH…
   试计算出这20个用户应缴纳的水费,结果用字(word)表示。
   部分程序已给出原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。
   请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   【试题程序】
       EXTRN    LOAD:FAR,SAVE:FAR
N       EQU      20
RATE1   EQU      70
RATE2   EQU      120
DELTA   EQU      10
STAC    SEGMENT  STACK
       DB       128 DUP(?)
STAC    ENDS
DATA    SEGMENT
SOURCE  DB       N DUP(?)
RESULT  DW       N DUP(0)
NAME0   DB       ’INPUT.DAT’,0
NAME1   DB       ’OUTPUT.DAT’,0
DATA    ENDS
CODE    SEGMENT
       ASSUME   CS:CODE,  DS:DATA,  SS:STAC
START   PROC     FAR
       PUSH     DS
       XOR      AX,AX
       PUSH     AX
       NOV      AX, DATA
       MOV      DS,AX
       LEA      DX,SOURCE                     ; 数据区起始地址
       LEA      SI,NAME0                      ; 原始数据文件名起始地址
       NOV      CX,N                          ; 字节数
       CALL     LOAD                          ; 从’INPUT.DAT’中读取数据
; ******** BEGIN ********
       LEA      SI,  SOURCE
       LEA      DI,  RESULT
       CLD
       MOV      CX,N
       MOV      BL,RATE1
       MOV      BH,RATE2
NEXT:    (1)  
       CMP      AL,DELTA
       J  (2)   GREAT
       MUL      BL
       JMP      STORE
GREAT:    (3)  
       MUL      BH
         (4)  
STORE:    (5)  
         (6)  
       INC      SI
       LOOP     NEXT
; ******** END ********
       LEA      DX,RESULT                   ; 结果数据区首址
       LEA      SI,NAME1                    ; 结果文件名起始地址
       MOV      CX,N*2                      ; 字节数
       CALL     SAVE                        ; 保存结果到’OUTPUT.DAT’文件
       RET
START   ENDP
CODE    ENDS
       END      START

选项

答案(1)MOV AL,[SI] (2) A (3) SUB AL,10(4) ADD AX,10*70 (5) MOV [DI],AX (6) ADD DI,2

解析 本题是一道分段计算题,此类题型的关键是确定数据范围、数据类型以及计算方法。本题的数据范围在题目中已明确给出,即20个无符号字节数,共占20个存储单元。这样数据的类型也一同确定了,需要计算的原始数据为无符号字节数,运算结果按序以字的形式连续存放,因此在计算运算结果的偏移位置时要特别小心。
   很明显计算方法是本题的重点,题目要求的是根据不同的数值范围,采用不同的计算方法,因此要特别注意每个数据计算方法的确定。
转载请注明原文地址:https://kaotiyun.com/show/rTgZ777K
0

最新回复(0)