如何用汇编语言读取内存值 20

,例如VC的_ASM比如我要读取45d541的地址该如何写?还有一点不确定,用汇编读取的内存地址能赋值给变量么?... ,例如VC的_ASM

比如我要读取45d541的地址该如何写?

还有一点不确定,用汇编读取的内存地址能赋值给变量么?
展开
 我来答
ASSEMBLYZENG
2016-02-18 · TA获得超过251个赞
知道答主
回答量:27
采纳率:100%
帮助的人:27.6万
展开全部
汇编语言读取内存的方式有两种:立即数寻址(包括在编译器中的变量地址),寄存器寻址。就拿80X86汇编来说,简单的使用MOV指令就可以完成对内存地址的读写,一下是立即数寻址和寄存器寻址实现内存读写的例子:

MOV AX,[8000] ;立即数寻址,将AX寄存器中放入偏移地址8000中的内容
MOV AX,[SI] ;寄存器寻址,将SI寄存器中的值作为地址,SI寄存器中存放的地址中 内容送到AX寄存器中。另外,任何通用寄存
(AX,BX,CX,DX,SI,DI,BP,SP)都可以放入方括号[]中行寻址

NUMBER DW 1234H ;变量地址定义
...
MOV AX,[NUMBER] ;将NUMBER的地址进行寻址,然后将地址内的内容送入AX寄存 器中

需要注意的是,如果需要往立即数地址中直接写入或读取数据,则需要添加数据的大小标识符,否则编译器会产生错误。如下:

MOV [8000],1234H ;错误的指令!
MOV WORD PTR [8000],1234H ;正确,往偏移地址8000的内存位置中放入WORD类型的数据1234H
大别山的蜗牛
高粉答主

2016-01-17 · 一只互联网搬运的蜗牛
大别山的蜗牛
采纳数:6928 获赞数:12024

向TA提问 私信TA
展开全部
[方法一] 在数据段中定义数据,例如:
DATA SEGMENT
ORG 100H
DAT1 DB 18H ;将数据18H写入数据段偏移址为100H的内存
DATA ENDS
;
[方法二] 在代码段中用数据传送指令,例如:
CODES SEGMENT
ASSUME CS:CODES
START:
MOV AL, 25H
MOV [200],AL ;将AL中的数据25H写入数据段偏移址为200H的内存单元
;......
CODES ENDS
END START
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友84c6014
2009-07-12 · 贡献了超过114个回答
知道答主
回答量:114
采纳率:0%
帮助的人:38.8万
展开全部
你说的应该是win32吧 保护模式下
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yin498
2016-01-08 · TA获得超过641个赞
知道小有建树答主
回答量:1518
采纳率:25%
帮助的人:221万
展开全部
你说的应该是win32吧 保护模式下
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式