大家看看这题!

whbhb 2010-12-23 11:54:38
内存中有10H个字节数据,将其拆解成半字节数据(每单元存放4位2进制数),低位对齐,高4位补0,后面这三句是什么意思!
给个思路!!
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
va_zaixuexi 2010-12-24
  • 打赏
  • 举报
回复
11h,12h,13h,14h~~~~~~~~~~20h
->
11h,12h,13h,14h~~~~~~~~~~21h 16个数据
va_zaixuexi 2010-12-24
  • 打赏
  • 举报
回复
一共才4句,后面3句......
11h,12h,13h,14h~~~~~~~~~~20h
变成
01h,01h,01h,02h,01h,03h~~~~~~~~~~~~~~~~~~~~~02h,00h
va_zaixuexi 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shzhfu 的回复:]
1楼解释对了,2楼错了。因为高4位补0,所以都拆成0XH的形式了。
[/Quote]
2楼的是说明有10H的数据.......,不是0FH个
shzhfu 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 whbhb 的回复:]
Assembly code
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]
……
[/Quote]
结果应该再申请存储单元存放吧!没等转换把后面的原始数据都覆盖了。

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

whbhb 2010-12-24
  • 打赏
  • 举报
回复
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


这个程序没有用,哪位大侠指点下?
shzhfu 2010-12-24
  • 打赏
  • 举报
回复
1楼解释对了,2楼错了。因为高4位补0,所以都拆成0XH的形式了。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧