如果程序没有分段,例如没有单独的数据段,数据就在代码段的最开始。
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