32位汇编如何操控常量地址的值?
时间:2010-12-31
来源:互联网
16位汇编下,如果用段+偏移的方式给出地址,CPU自然就知道取这个地址里面的内容进行相关运算。比如,
mov ax,ds:[bx].CPU是将ds:bx地址里面的值而非当前地址数放到ax里面去。所以,在16位汇编下,我们要想操作常量地址的内容,得首先将其映射到寄存器里面去寻址。
但是在32位汇编下,CPU对段+偏移的地址还有类似的理解吗?假如我想修改常量地址0B800:1200处一个字长值为1000的数,我可以这样嘛?
mov ax,0B800H
mov ds,ax
mov bx,1200h
mov dx,1234
mov ds:[bx],dx
这样就能将1000修改为1234了吗?这在16位汇编下肯定是毫无疑问的事,但我就是不确定32位汇编下CPU是否乐不思蜀,不认识以前的东西了;还有就是32位汇编下,段寄存器能随便用吗(如果其有什么特殊功能的话)?
如果以上行不通,我改如何访问常量地址内的数值呢?
mov ax,ds:[bx].CPU是将ds:bx地址里面的值而非当前地址数放到ax里面去。所以,在16位汇编下,我们要想操作常量地址的内容,得首先将其映射到寄存器里面去寻址。
但是在32位汇编下,CPU对段+偏移的地址还有类似的理解吗?假如我想修改常量地址0B800:1200处一个字长值为1000的数,我可以这样嘛?
mov ax,0B800H
mov ds,ax
mov bx,1200h
mov dx,1234
mov ds:[bx],dx
这样就能将1000修改为1234了吗?这在16位汇编下肯定是毫无疑问的事,但我就是不确定32位汇编下CPU是否乐不思蜀,不认识以前的东西了;还有就是32位汇编下,段寄存器能随便用吗(如果其有什么特殊功能的话)?
如果以上行不通,我改如何访问常量地址内的数值呢?
作者: zybzyb1987 发布时间: 2010-12-31
楼主说的32位是指保护模式?还是仅仅是32位的实模式?
如果是实模式下,那和16位没什么区别。
如果是保护模式那段寄存器就不随便操作的了。里面存放的是选择子。
如果是实模式下,那和16位没什么区别。
如果是保护模式那段寄存器就不随便操作的了。里面存放的是选择子。
作者: ydfivy 发布时间: 2010-12-31
32 位模式下不能进行 16位或20位的寻些操作。在32位模式下,一般情况所有段寄存器的值都是一样的,段寄存器只是被用来做虚拟地址与实际地址转换之类的用处,应用程序最大可以操作4GB的内存空间。你上面的代码应改为
mov eax,变量地址 或 lea eax,[变量地址]
mov dx,1234
mov word ptr[eax],dx
mov eax,变量地址 或 lea eax,[变量地址]
mov dx,1234
mov word ptr[eax],dx
作者: Michael_g 发布时间: 2010-12-31
引用 1 楼 ydfivy 的回复:
楼主说的32位是指保护模式?还是仅仅是32位的实模式?
如果是实模式下,那和16位没什么区别。
如果是保护模式那段寄存器就不随便操作的了。里面存放的是选择子。
楼主说的32位是指保护模式?还是仅仅是32位的实模式?
如果是实模式下,那和16位没什么区别。
如果是保护模式那段寄存器就不随便操作的了。里面存放的是选择子。
是不是说在一个地址常数外面加个中括号,就表明是对地址内容的操作了?
mov ax,[12] 将地址数为12的里面的内容取出来给ax?可以吗?
mov dx,[bx] 将地址数为(bx)的里面的内容取出来给dx?可以吗?
简单的说,哪些对象可以放在中括号里,看着对其内容的操作?
作者: zybzyb1987 发布时间: 2010-12-31
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28