|
主题 : : 试验5第6题a段内容问题 [待解决] |
回复[ 9次 ]
点击[ 426次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-03-04 15:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
assume cs:code
a 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 dx,ax
mov ax,b
mov ss,ax
mov sp,10H
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00H
int 21H
code ends
end start
单步跟踪到
AX=0B4A BX=0000 CX=0008 DX=0B48 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B38 ES=0B38 SS=0B4A CS=0B4B IP=0013 NV UP EI PL NZ NA PO NC
0B4B:0013 FF37 PUSH [BX] DS:0000=20CD
发现ds:0=20cd根本不是定义的1
单步跟踪到
AX=0B4A BX=000A CX=0003 DX=0B48 SP=0004 BP=0000 SI=0000 DI=0000
DS=0B38 ES=0B38 SS=0B4A CS=0B4B IP=0015 NV UP EI PL NZ NA PE NC
0B4B:0015 83C302 ADD BX,+02
出现错误
c:\windows\system32\cmd.exe - debug d:\asmedu\sy567.exe
ntvdm cpu 遇到无效的指令
cs:0000 ip:0077 op:f0 37 05 0e 02 选择“关闭”终止程序
请问这是怎么回事啊~~~写的指令有问题么?? | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-03-06 15:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
写的指令有问题
1.assume cs:code ->assume cs:code,ds:a,ss:b
2.push [bx] 每次2个字节,8次,所以mov sp,10H,单步T命令还会用到栈,所以栈越界了
mov sp,10H->mov sp,100h | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-03-07 21:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
首先感谢回答O(∩_∩)O,先复制来了慢慢研究哈~~ | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-03-08 15:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
有几个疑问哈
1,必须先定义段么??因为我在代码中定义了ab的段寄存器
2,mov sp,100H会不会影响后边的指令呢??我的栈只定义了八个字 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-03-08 20:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
你的问题本身就有问题
仔细看书,不确定的问题,多试试,有些问题完全可以自己搞定 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-03-08 22:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
谢谢你的建议,不过刚刚回学校,“百废待兴”,静下心来翻书的时间确实不多,有些东西就没找,呵呵 | | |
|
|
|
|
[第6楼]
[ 回复时间:2010-03-09 06:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
发现一个问题。。start: mov ax,a
mov dx,ax ;我本意是吧a段定义为数据段,结果寄存器整错了。。。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-03-09 09:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14 |
|
|
|
|
|
[第8楼]
[ 回复时间:2010-03-09 09:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27 |
确实是手误。。。我居然这么长时间才发现,汗颜——!白调试了一天。。。
单步中断栈超界的问题,直接跳到int 21H就解决了。
貌似只要不中断,代码执行没问题。
这就不用吧mov sp,10H修改了。。毕竟修改了栈底,把数据逆序转移到b段的目的就达不到了。 | | |
|
|
|
|
[第9楼]
[ 回复时间:2010-04-01 15:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2010-02-02 22:32 |
这时数据不能放到指定中的位置的吧!因为你的栈底0FEH!
另外经实践测试好象有没有assume ds:a,ss:b无所谓 | | |