主题:如何在16位通用寄存器中存放双字?
随风之幻
[专家分:130] 发布于 2007-10-26 09:34:00
同题。
书上说用DX:AX来存储。DX存储高16位,AX存储低16位。
.data
num db DD 123456789
.code
mov ax num
mov dx num+2
看不明白,num+2是怎么把高16位存储到DX当中的。
还请大哥大姐帮帮忙,解释以下~谢谢
回复列表 (共6个回复)
沙发
我是大喊三 [专家分:3010] 发布于 2007-11-01 16:43:00
这个不用你操心,CPU自动完成的
板凳
ccpp [专家分:9360] 发布于 2007-11-10 11:27:00
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 楼
黎辉monkey [专家分:0] 发布于 2007-11-10 14:45:00
这个得看你传送的目的地址,因为是DX所以自动送一个字的数据
4 楼
online916 [专家分:110] 发布于 2007-11-10 23:05:00
首先,AX,DX是16位的寄存器,所以可以存16位的数据,
其次,num在数据段定义时就代表了数据的初始地址(有效地址)。
MOV AX,num ;系统会自动识别所用的寄存器的位数,所以把从num开始的16位数据存入AX寄存器中
所以
mov bx,num+2;在初始地址上移动2个字节,所以也就把高位的16位数据存入到dx中了
5 楼
def [专家分:3380] 发布于 2007-11-17 22:30:00
由于内存存储顺序是:低位-高位,所以
mov ax,num == mov ax,[num] 把num低16位存在ax里
mov dx,num+2 == mov dx,[num+2] 把num高16位存在dx里
6 楼
随风之幻 [专家分:130] 发布于 2008-02-15 15:02:00
谢谢你们。。嘿嘿。。明白了。。。
我来回复