21,458
社区成员
发帖
与我相关
我的任务
分享
DSEG SEGMENT
VAR1 DB 09H,12H,24H,35H,32H,"$"
n equ $-var1 ;由编译工具算出VAR1共占多少单元,相当于VAR1中有几个字节元素,个数做常量n
VAR2 DB n DUP(?) ;预留两倍于VAR1的单元,存放拆开后的结果
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
LEA BX,VAR1
LEA DI,VAR2
MOV DL,BYTE PTR [BX] ;取一个元素数据
MOV DH,DL ;复制到DH一份
NEXT:
MOV CL,04H
SHR DL,CL ;DL的高4位移到低4位,高4位补0
AND DH,0FH ;这里不是AND DH,1FH吧, 将DH的高4位变成0, 低4位不变
MOV [DI],DX ;换成就可以把dl和dh中的内容同时送var2中
ADD DI,2 ;然后把目标地址的指针加2,指向存放下一组数的单元
INC BX ;原数组的指针也指向下一个
MOV DL,[BX] ;取下一个
CMP DH,"$"
JZ EXIT ;是'$'则结束
LOOP NEXT ;不是, 则返回去拆分
EXIT:
MOV AH,4CH
INT 21H
CSEG ENDS
END START
DSEG SEGMENT
VAR1 DB 09H,12H,24H,35H,32H,"$"
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
LEA BX,VAR1
MOV DL,BYTE PTR [BX]
MOV DH,DL
NEXT:
MOV CL,04H
SHR DL,CL
AND DH,1FH
XCHG DL,BYTE PTR [BX]
XCHG DH,BYTE PTR [BX+1]
INC BX
MOV DL,DH
CMP DH,"$"
JZ EXIT
LOOP NEXT
EXIT:
MOV AH,4CH
INT 21H
CSEG ENDS
END START