. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  大侠们帮帮小弟看看这段程序的问题。  [已解决] 回复[ 5次 ]   点击[ 429次 ]  
alimy
[帖 主]   [ 发表时间:2011-12-23 15:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
题目是这样的:
把 程序提供的8个字单元顺序放到 DW 0,0,0,0,0,0,0,0 中,用上栈
程序开头制定这样:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0
我的程序如下:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0
start: 
mov ax,codesg
mov ds,ax
mov ss,ax  ;  栈的段地址在AX 中 
mov sp,0h  ;  栈指针
mov bx,10h
mov cx,8
s:pop [bx] ; 出栈,将SP指向的内存地址数据送到便宜地址为BX 的内存单元中!
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends 
end start


单步第二次到add bx,2 后程序流程出错。。查看 d  cs:0  发现pop过的地方的数据也发生了变换。不是0123H了。。。
难道pop这个指令出了把数据出栈还对内存的数据做了别的手脚?
程序流程也出了问题,loop没有执行完就跑到别的地方执行去了。。

请各位大侠看看。。到底是什么问题。。感激不尽。。
tomato
[第1楼]   [ 回复时间:2011-12-23 23:30 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
这个程序本身是没问题的,只是在debug下会有中断保护,会出现问题,如果在实模式下是没问题的。
alimy
[第2楼]   [ 回复时间:2011-12-24 13:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
回复:[第1楼]
------------------
持续费解ING。。。
tomato
[第3楼]   [ 回复时间:2011-12-24 13:56 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
等学到后面13章中断就明白了。
alimy
[第4楼]   [ 回复时间:2011-12-24 15:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
回复:[第3楼]
------------------
收到。。还没看到。。多谢了。
alimy
[第5楼]   [ 回复时间:2011-12-24 15:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
此贴由 贴主 于 [ 2011-12-24 15:13 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(tomato):8分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved