当前位置: 代码迷 >> 汇编语言 >> 做下面一道汇编题时碰到了一个有关问题,不明白,难道是书上错了
  详细解决方案

做下面一道汇编题时碰到了一个有关问题,不明白,难道是书上错了

热度:488   发布时间:2016-05-02 05:01:43.0
做下面一道汇编题时碰到了一个问题,不明白,难道是书上错了
原题要求:内存中存着16个10位二进制整数,每个整数用两个字节来存放,其中低地址字节中存着该十位整数的9-2位,高地址字节中最高两位是该整数的1-0位,后面多余的位用0补齐,要求把转换后低地址字节中存放原整数的9-8位(在低二位,其余位用0补齐),高地址字节中存放原整数7-0位,且转换后的数仍按原序存放。

原题答案代码如下:

       EXTRN    LOAD:FAR,SAVE:FAR
N        EQU      16
STAC    SEGMENT  STACK
         DB       128  DUP(?)
STAC    ENDS
DATA    SEGMENT
SOURCE   DW       N DUP(?)
RESULT   DB       N*2 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,N*2              ;字节数
        CALL     LOAD                ;从'INPUT1.DAT'中读取数据
;****BEGIN****
        MOV      DI,OFFSET RESULT
        MOV      BX,0
        MOV      CH,N                                               
PRO:    MOV      AH,BYTE PTR SOURCE[BX]
        MOV      AL,BYTE PTR SOURCE[BX+1]
        MOV      DL,AH               ;10位无符号二进制数高8位
        MOV      DH,AL               ;10位无符号二进制数低2位
        MOV      CL,2
        SHL      AX,CL
  相关解决方案