. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  试验5第6题a段内容问题  [待解决] 回复[ 9次 ]   点击[ 426次 ]  
cwbdawei
[帖 主]   [ 发表时间: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 选择“关闭”终止程序
请问这是怎么回事啊~~~写的指令有问题么??
versaariel
[第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
cwbdawei
[第2楼]   [ 回复时间:2010-03-07 21:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27
首先感谢回答O(∩_∩)O,先复制来了慢慢研究哈~~
cwbdawei
[第3楼]   [ 回复时间:2010-03-08 15:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27
有几个疑问哈
1,必须先定义段么??因为我在代码中定义了ab的段寄存器
2,mov sp,100H会不会影响后边的指令呢??我的栈只定义了八个字
versaariel
[第4楼]   [ 回复时间:2010-03-08 20:32 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
你的问题本身就有问题
仔细看书,不确定的问题,多试试,有些问题完全可以自己搞定
cwbdawei
[第5楼]   [ 回复时间:2010-03-08 22:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27
谢谢你的建议,不过刚刚回学校,“百废待兴”,静下心来翻书的时间确实不多,有些东西就没找,呵呵
cwbdawei
[第6楼]   [ 回复时间:2010-03-09 06:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27
发现一个问题。。start: mov ax,a
                     mov dx,ax      ;我本意是吧a段定义为数据段,结果寄存器整错了。。。
versaariel
[第7楼]   [ 回复时间:2010-03-09 09:06 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
那个问题我以为是你手误写错了^-^
cwbdawei
[第8楼]   [ 回复时间:2010-03-09 09:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-01 23:27
确实是手误。。。我居然这么长时间才发现,汗颜——!白调试了一天。。。
单步中断栈超界的问题,直接跳到int 21H就解决了。
貌似只要不中断,代码执行没问题。
这就不用吧mov sp,10H修改了。。毕竟修改了栈底,把数据逆序转移到b段的目的就达不到了。
redliu
[第9楼]   [ 回复时间:2010-04-01 15:55 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-02-02 22:32
这时数据不能放到指定中的位置的吧!因为你的栈底0FEH!

另外经实践测试好象有没有assume ds:a,ss:b无所谓
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved