回 帖 发 新 帖 刷新版面

主题:如何在16位通用寄存器中存放双字?

同题。
书上说用DX:AX来存储。DX存储高16位,AX存储低16位。
.data
num db DD 123456789
.code
mov ax num
mov dx num+2
看不明白,num+2是怎么把高16位存储到DX当中的。
还请大哥大姐帮帮忙,解释以下~谢谢

回复列表 (共6个回复)

沙发

这个不用你操心,CPU自动完成的

板凳

mov ax num
;num开始的一个字的内容传入ax
;但num是个地址值,所以上面的语句其实等价于mov ax [num]
mov dx num+2
;num开始的第2个地址,等价于mov ax [num+2]

------------------------------------------------
num是个地址,但是想得到这个地址,
得用 lea ax,num,而不是mov ax num
因为 mov ax num 是把地址开始的一个字的内容传入ax

3 楼


这个得看你传送的目的地址,因为是DX所以自动送一个字的数据

4 楼

首先,AX,DX是16位的寄存器,所以可以存16位的数据,
其次,num在数据段定义时就代表了数据的初始地址(有效地址)。

MOV AX,num ;系统会自动识别所用的寄存器的位数,所以把从num开始的16位数据存入AX寄存器中
所以
mov bx,num+2;在初始地址上移动2个字节,所以也就把高位的16位数据存入到dx中了

5 楼

由于内存存储顺序是:低位-高位,所以
mov ax,num == mov ax,[num]     把num低16位存在ax里
mov dx,num+2 == mov dx,[num+2] 把num高16位存在dx里

6 楼

谢谢你们。。嘿嘿。。明白了。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册