如何用汇编语言读取内存值 20
,例如VC的_ASM比如我要读取45d541的地址该如何写?还有一点不确定,用汇编读取的内存地址能赋值给变量么?...
,例如VC的_ASM
比如我要读取45d541的地址该如何写?
还有一点不确定,用汇编读取的内存地址能赋值给变量么? 展开
比如我要读取45d541的地址该如何写?
还有一点不确定,用汇编读取的内存地址能赋值给变量么? 展开
4个回答
展开全部
汇编语言读取内存的方式有两种:立即数寻址(包括在编译器中的变量地址),寄存器寻址。就拿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
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
展开全部
[方法一] 在数据段中定义数据,例如:
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的应该是win32吧 保护模式下
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的应该是win32吧 保护模式下
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
读取用 mov eax,[45d541] ;默认是DS段
如果你有45d541地址空间的写权限 就能赋值 mov ptr dword [45d541],eax
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询