原理上,先修改堆栈的相关寄存器以指向0000:200 或者是0000:20F;
然后从03FF:0~03FF:F取数并一一执行入栈 *** 作即可;
最后记得恢复堆栈的相关寄存器值;
如果是8086系统,修改0段数据,是相当危险的;
当寄存器不够用时,调用方法分两种情况
1、8位地址的RAM调用,读写方法是:
MOVX A,@Ri (i=0,1)
MOVX @Ri,A
例如:
MOV R0,#30H ;准备读写扩展RAM30H的数据
MOVX A,@R0 ;读入30H的数据
CLR A
MOVX @R0,A ;数据写入30H
2、如果是16位地址,读写方法是:
MOVX A,@DPTR
MOVX @DPTR,A
例如:
MOV DPTR,#1000H ;准备读写1000H的数据
MOVX A,@DPTR ;读入1000H的数据
CLR A
MOVX @DPTR,A ;数据写入到10000H
二进制:81 47 24 0F 27
字节集:{129,71,36,15,39,0}
整数型:254035841
add dword ptr [edi+24],270f
在这段代码的地址里写入以上的数据
可以内存写字节集,也可以内存写整数型
运行了第一步 代码是MOV AX,1234,我想用D
----
此时,AX=1234,已经在屏幕,显示出来了。
看你的插图,即可见到。
再敲 D,是看不到 1234 的。
;需要事先在D:盘根目录下建立一个文件TESTTXT
DSEG
SEGMENT
;数据段:在此处添加程序所需的数据
PATHNM1
DB
'D:/TESTTXT'
BUFFER1
DB
100
DUP
()
DSEG
ENDS
CSEG
SEGMENT
assume
cs:CSEG,
ds:DSEG
START:
mov
ax,
dseg
mov
ds,
ax
;打开文件TESTTXT
MOV
AH,3DH
LEA
DX,PATHNM1
MOV
AL,2
INT
21H
;读取文件内容,存入BUFFER1
LEA
DX,BUFFER1
MOV
BX,AX
MOV
CX,100
MOV
AH,3FH
INT
21H
;显示BUFFER1中的内容
MOV
CX,AX
LEA
SI,BUFFER1
NEXT:
MOV
DL,[SI]
MOV
AH,2
INT
21H
INC
SI
LOOP
NEXT
;关闭文件
MOV
AH,3EH
INT
21H
;按任意键退出
mov
ah,1
int
21h
mov
ax,
4c00h
;程序结束,返回到 *** 作系统系统
int
21h
CSEG
ENDS
END
START
以上就是关于汇编语言利用堆栈复制内存中的数据全部的内容,包括:汇编语言利用堆栈复制内存中的数据、汇编寄存器不够用,想调用内存地址,该怎么调、易语言汇编进程内存指令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)