计算机等级考试三级PC上级题精选21-30(2)
来源:优易学  2010-1-14 16:08:24   【优易学:中国教育考试门户网】   资料下载   IT书店

上机题之22
以下内容为程序代码: 
;*      请编制程序PROG1.ASM, 其功能是: 内存中从SOURCE开始连续
;*  存放着二十一个八位有符号数(补码),其相邻两数之间差值不超过
;*  -8至7。对这种变化缓慢的数据可采用差分方法进行压缩。即第一
;*  个数据不变,其后的数据取与前一数据的差值并用四位二进制补码
;*  表示, 两个差值拼成一个字节, 前一个差值放在高四位,后一个差
;*  值放在低四位。
;*      例如:
;*           原数据(X[n]): 23H,27H,2AH,29H,22H,...
;*           压缩后(Y[n]): 23H,    43H,    F9H,...
;*      编程按上述方法进行压缩, 结果保存在RESULT开始的内存单
;*  元中。
;*      部分程序已在PROG1.ASM中给出, 请填空BEGIN和END之间已给
;*  出的源程序使其完整(空白已用横线标出, 每行空白一般只需一条
;*  指令, 但功能相当的多条指令亦可)或删除BEGIN和END之间原有的
;*  代码并自行编写程序片段来完成要求的功能。
;*      原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内
;*  存单元中, 结果要求从RESULT开始存放, 由过程SAVE保存到文件
;*  OUTPUT1.DAT中。
;*      对程序必须进行汇编, 并与IO.OBJ链接产生PROG1.EXE 执行文
;*  件, 最终运行程序产生结果(无结果或结果不正确者均不得分)。
           EXTRN      LOAD:FAR,SAVE:FAR
N          EQU        10
STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS
DATA       SEGMENT
SOURCE     DB         2*N+1   DUP(?)
RESULT     DB         N+1     DUP(0)
NAME0      DB         ’INPUT1.DAT’,0
NAME1      DB         ’OUTPUT1.DAT’,0
DATA       ENDS
CODE       SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           MOV        ES,AX       ; 置附加段寄存器
           LEA        DX,SOURCE   ; 数据区起始地址
           LEA        SI,NAME0    ; 原始数据文件名起始地址
           MOV        CX,2*N+1    ; 字节数
           CALL       LOAD        ; 从"input1.dat"中读取数据

;  **** BEGIN ****
           LEA        SI,SOURCE
           LEA        DI,RESULT
           CLD
           MOVSB                                ; Y[0]=X[0]
           XOR        BX,BX                     ; FLAG=0
           MOV        DX,N*2                    ; COUNTER
COMPRESS:
           LODSB
           sub        al,[si-2]
           xor        bx,1
           jz         low_hex
           ;SUB        _________                 ; X[n]-X[n-1]
           ;____________________                 ; FLAG=NOT FLAG
           ;J__        LOW_HEX
           MOV        CL,4
           shl        al,cl
           ;___        AL,CL
           MOV        AH,AL
           JMP        NEXT
LOW_HEX:   and        al,0fh
           ;__________________
           OR         AL,AH
           STOSB
NEXT:      dec        dx
           ;___________________
           JNE        COMPRESS
;  ****  END  ****
           LEA        DX,RESULT    ; 结果数据区首址
           LEA        SI,NAME1     ; 结果文件名起始地址
           MOV        CX,N+1       ; 字节数
           CALL       SAVE         ; 保存结果到"output1.dat"文件中
           RET
START      ENDP
CODE       ENDS
           END        START


input1.dat 内容如下:[b]
17 1B 1E 24 29 2D 2A 25 20 27 2C 2F 34 37 33 31 36 3C 3F 39 33
[b]output1.dat 内容应当如下:
17 43 65 4D BB 75 35 3C E5 63 AA

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训