请编制程序,其功能是:内存中连续存放着20个十进制数字的ASCⅡ字符,把它们转换成10个字节的压缩型(组合型) BCD码。 例如: 内存中有:31H(’1’),32H(’2’),33H(’3’),34H(’4’)…(共20个字节) 结果为

admin2010-09-01  29

问题 请编制程序,其功能是:内存中连续存放着20个十进制数字的ASCⅡ字符,把它们转换成10个字节的压缩型(组合型) BCD码。
   例如:
   内存中有:31H(’1’),32H(’2’),33H(’3’),34H(’4’)…(共20个字节)
   结果为:  21H,43H,…(共10个字节)
   部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   请填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。
   【试题程序】
       EXTRN    LOAD:FAR, SAVE:FAR
N       EQU      10
STAC    SEGMENT  STACK
       DB       128 DUP (?)
STAC    ENDS
DATA    SEGMENT
SOURCE  DB       N*2 DUP(?)
RESULT  DB       N 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
       LEA      DX,SOURCE                           ; 数据区起始地址
       LEA      SI,NAME0                            ; 原始数据文件名
       MOV      CX, N*2                             ; 字节数
       CALL     LOAD                                ; 从"INPUT1.DAT"中读取数据
; *******  BEGIN ********
       LEA      SI,SOURCE
       LEA      DI,RESULT
       MOV      CX,N
NEXT:   MOV        (1)  ,[SI]
         (2)  
       AND    AL,  (3)  
       MOV    BL,AL
         (4)  
       ADD    SI,2
       PUSH      (5)  
       MOV    CL,  (6)  
       SAL      AL,CL
       POP        (7)  
       ADD      AL,  (8)  
       MOV        (9)  ,AL
         (10)  
       LOOP     NEXT
; ********   END   ********
       LEA      DX,RESULT                          ; 结果数据区首址
       LEA      SI,NAME1                           ; 结果文件名
       CALL     SAVE                               ; 保存结果到文件
       RET START   ENDP
CODE    ENDS
       END      START

选项

答案(1)AX (2) MOV BH,AH (3) 0FH (4) MOV AL (5) CX (6) 4 (7) CX (8) BL (9) [DI] (10) INC DI

解析 本题主要考查怎样将数字的ASCⅡ字符进行压缩成BCD码。题目中所提供的程序是每次读取两个数字字符至AX,分别对这两个字符进行处理,AL取低4位并存入BL中,AH左移4位,与此同时正好把高4位去掉并存入AL中,最后将AL和 BL加在一起并存,放到结果数据区。
转载请注明原文地址:https://kaotiyun.com/show/YTgZ777K
0

最新回复(0)