数据段和代码段没有分开,怎么设置IP,汇编程序怎么写?

如果程序没有分段,例如没有单独的数据段,数据就在代码段的最开始。

assume cs:code
code segment
dw 0123h,0456h,0789h
mov bx,0
mov ax,0
mov cx,3
s: add ax,cs:[bx]
add bx,2
loop s
mov ax, 4c00h
int 31h
code ends

end

dw :define word, 程序刚开始定义了3个字,这三个字在代码段的前6个字节中,刚开始执行时


(CS)=0B3D, (IP)= 0000 程序就错误的在0B3D处执行,但这个地方放置的数据(0123h,0456h,0789h)所以程序执行错误。解决办法:

1. 在debug中找到开始指令相对于CS的偏移量,然后修改IP寄存器为这个值。

2. 明确的告诉加载这个程序的前一个程序,自己代码的执行的入口。

assume cs:code
code segment
dw 0123h,0456h,0789h
start: mov bx,0
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s


mov ax, 4c00h
int 31h
code ends
end 
start


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值