实验五 第6题,看着没有问题,运行却有问题,请指教。
assume cs:codea segment
dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,30
mov bx,0
mov cx,4
s:push
add bx,2
loop s
mov ax,4c00H
int 21H
code ends
end start以上就是我写的代码,通过MASM编译器编译和连接成.EXE文件后在DEBUG里面运行。动行完mov ss,ax
这一句后,下一句mov sp,30自动完成的,正常,再下一句,应该是mov bx,0呀,在DEBUG里面却是add ax,0000,我晕,有图为证。请小甲鱼老师或童鞋们斧正。
http://bbs.fishc.com/data/attachment/album/201107/20/172149b2dxzoo6bbuc26oo.png
http://bbs.fishc.com/data/attachment/album/201107/20/1721109rrz7rzng0q8g0cr.png 本帖最后由 lsgo 于 2011-7-21 00:17 编辑
按楼主的代码码了下运行了下没出现与其所问的相同错误但是在循环6次后又出现错误 如图所示
弄了好久不知原因所在所以在这就留于楼下牛人解答{:5_97:} 那可能就是个别机子的差异了吧。也许是代码在修改内存单元数据时,触到了机子不可告人的秘密,可以报错。嘿嘿,反正我也说不清楚。怪事。 本帖最后由 zzxxcc89 于 2011-7-21 15:24 编辑
试了一下呵呵,和楼主的情况一样。可能是系统的保护原因吧
b段的0太少了,至少要15个 b段,dw 0,0,0,0,0,0,0,0 就有八个字,16个字节了呀,还少吗? 我晕,终于搞明白了。优化的程序如下:
编写code段中的代码,用PUSH指令将a段中的前8个字型数据,逆序存储到b段中。
assume cs:code,ss:b,ds:a
a segment
dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH
a ends
b segment
db ' '
b ends
code segment
start:mov ax,a
mov ds,ax
mov dx,b
mov ss,dx
mov sp,10H
mov bx,0
mov cx,8
s:mov ax,
push ax
add bx,2
loop s
mov ax,4c00H
int 21H
code ends
end start mov ax,b
mov ss,ax
mov sp,30
ss的起始直址是b,而ss段只有16个字节,所以sp应该是指向16或者是10H.
呵呵,正确。
页:
[1]