30鱼币救助一个汇编问题
本帖最后由 /se陈愉鑫/se 于 2013-10-26 16:03 编辑程序说明: 把code段 6个字节数据传入(倒序) data段总是不成功!ASSUME CS:code,DS:data ;程序说明: 把code段 6个字节数据传入(倒序) data段
data SEGMENT
DW 0000h,0000h,0000h
data ENDS
code SEGMENT
DW 874ah,1444h,5641h
start:
MOV AX,data
MOV DS,AX
MOV AX,CS
MOV SS,AX
MOV SP,0006
MOV BX,6
MOV CX,3
for:
POP
ADD BX,2
LOOP for
MOV BX,2
MOV BX,
MOV AX,4c00h
INT 21h
code ENDS
END start
本帖最后由 skyonline 于 2013-10-26 23:53 编辑
ASSUME CS:code,DS:data ;程序说明: 把code段 6个字节数据传入(倒序) data段
data SEGMENT
DW 0000h,0000h,0000h
data ENDS
code SEGMENT
DW 874ah,1444h,5641h
start:
MOV AX,data
MOV DS,AX
MOV AX,CS
MOV SS,AX
MOV SP,0006 ;此处改成4
MOV BX,6 ;此处改成0
MOV CX,3
for:
POP
ADD BX,2
LOOP for
MOV BX,2 ;这两句话我没看懂,但是如果只是传递数据可以删掉
MOV BX,
MOV AX,4c00h
INT 21h
code ENDS
END start
注意:此程序是·不·能·单·步·跟·踪·的,否则在debug当中会在cs:ip入栈时会把code段的数据(874a等)覆盖掉
还有一点很重要的是出栈的操作顺序是①先把数据移入目标②之后sp = sp+2所以sp初值应设成4。如果想要单步跟踪的话就像楼上的说法一样,使用寄存器间接写入,毕竟debug过程是必须用到入栈的。
这里给你一段按照楼上思路的可行代码ASSUME CS:code,DS:data ;程序说明: 把code段 6个字节数据传入(倒序) data段
data SEGMENT
DW 0000h,0000h,0000h
data ENDS
code SEGMENT
DW 874ah,1444h,5641h
start:
mov ax,data
mov ds,ax
mov ax,code
mov es,ax
xor bx,bx
mov si,4 ;word ptr ds: = 5641h
mov cx,3
s: mov ax,es:
mov ,ax
add bx,2
sub si,2
loop s
mov ax,4c00h
int 21h
code ends
end start
ps:在帖子里给代码排版真蛋疼……
晕,这也得回复? start后第三句cx改为cs vitamin 发表于 2013-10-26 16:06 static/image/common/back.gif
start后第三句cx改为cs
改了...还是不行 本帖最后由 LinuxDeepin 于 2013-10-26 21:37 编辑
代码思路错误,建议重新写代码
建议:
把需要复制的数据先存储在寄存器里,再通过寄存器写入指定内存单元
mov ax,cs:
si 指向等待复制数据的地址
mov ds:,ax
bx 指向等待写入数据的地址 data段最后一个内存的偏移应该是4,而不是6,然后每次减2,不是加2。
页:
[1]