汇编,我用debug执行时到一半为什么指令跟我写的不一样了,如图

assume cs:code,ds:a,ss:ba segment dw 1,2,3,4,5,6,7,8a ends
b segment dw 0,0,0,0,0,0,0,0b ends
code segmentstart: mov ax,a mov ds,ax mov ax,b mov ss,ax mov sp,20h //这一条开始跟图中花圈的指令不一样了 mov bx,0 mov cx,8s: push ds:[bx] add bx,2loop s mov ax,4c00h int 21hcode endsend start

别随意修改BP,和 SP 。debug调试信息都存在堆栈中的。
当然

push BP

mov BP,SP

sub SP,xxx

pop BP

RET xxx

这种创建栈帧,并分配,释放空间的方法是可取的,注意xxx相同就行了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-30
改成这样试试:
start: mov ax,a
mov ds,ax
mov ax,b
cli
mov ss,ax
mov sp,20h //这一条开始跟图中花圈的指令不一样了
sti
mov bx,0
mov cx,8
s: push ds:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
第2个回答  2013-08-30
加载文件后,你先不运行,这是关键,而是先执行U指令,看看所有的汇编语句是否一样,应该一样的;如果只是在运行时才出现改变的现象,就仔细看看是不是在执行 mov ss,ax 之后才发生改变的;

x86汇编语言用debug单步调试结果和直接运行不相同?
直接运行,是汇编成com文件在dos下直接运行对吧。很显然com文件在加载时,得从分配给该程序的内存的100h偏移处开始,也就是说,你的二进制码在内存中开始于CS:100h。而这会导致你的标量与内存中的位置发生偏差,从而不能正常显示。(解决方法是在代码文件头加入‘ org 100h’(也有可能是‘.org 10...

微机原理debug循环程序设计汇编程序错在哪里
楼主的程序有两个明显错误:(1)第3行指令 MOV BH,00 使首行指令MOV BX,0100 作废, 使 BX = 0000,导致后面的指令MOV AL,[BX]读入AL的不是成绩数据。(2)在DEGUG 环境输入程序,数值不加后缀H,默认为16进数, 例如楼主程序中的 CMP AL,60,其中60默认为16进制数,即96D, ...

汇编问题:为什么我设置了ds后,在dos窗口中用debug的r命令查看ds的值发现...
你程序这么编写后,需要执行过MOV DS, AX指令以后,DS的内容才会变成FFFF。如果你才刚刚将程序加载到内存中,还没有执行完这一条指令,DS是不会变成FFFF的。你需要用DEBUG的运行命令(G命令, T命令,或P命令)执行程序中的指令,到这条指令执行过以后再查看DS对不对。

为什么我执行LOOP指令会使我写的指令被改(汇编)
3. 实际上,并不只有 loop s3 被改掉, 而是有很多其他指令也被修改

汇编语言问题,高手指点
debug下,除了指令,就是数据,且都认为是十六进制的。在这里写程序,简单的几条指令,一般初学者多能操作。若是稍微复杂一些的程序,是需要有经验的程序员才能做得到。指令MOV AL,45H,若用文本编辑器来书写是完全正确的,能够通过编译。在debug下,则肯定出错。错误原因:十六进制数中,最大字母是“...

本人刚学汇编语言,请教一下高手利用DEBUG怎么发现源程序的错误?
这个问题问的很有意思!我这样告诉你,平时代码写完后会编译成功生成程序,然后这时候你并不知道代码是否没有错误,所以你需要把程序跑几次。发现错误后怎么办呢?这时候就需要debug来查看反汇编的代码,根据寄存器状态,指令等各种提示来查找程序错误地点加以修改 ...

汇编语言程序:为什么用debug调试时,-g运行后,-d不能显示最终结果,-d13...
无法定位到程序中原来数据段的值。建议你在使用-g命令执行时,最好要找到断点地址,比如此题的断点地址为RET指令所在的偏移地址0029H,所以应该使用命令-g=0 0029执行,这样不执行RET指令,你就可以用-d 0看结果,而不用在d命令后加数据段的段地址了。你试试看。

...即执行debug命令的程序编译时,输入错误了,应该如何撤销不再提示er...
DEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段 如何进入Debug程序?答:在命令提示符下输入“debug”回车即可 懂得汇编的朋友,相信看懂下面命令是没多大问题的。常用命令:-A 汇编 格式:A 起始地址 例如:输入“A”,回车,然后输入“MOV AX,10”回车。再按...

我的汇编指令 add dx,[0006] 怎么变成 add dx, 6 了?
debug里面的执行有时候是会出现这样的情况,具体原因我说不清楚,但是不影响操作的,我之前mov cx,21 执行的时候还变成了15呢,不过还是可以喜欢到21次

在汇编程序中,如果程序跳转到最后一句这时程序如何运行?
21H指令),用G命令设置断点运行,断点设在这个结束点上。例如,最后那一条INT 21指令的偏移地址是 0123,那么用 G 0123 就可以了(注意在G和0123之间有空格)。G命令的格式是:G[=开始点][断点1][断点2]……方括号中内容为可选项。若不用=加上开始点,则从当前IP开始执行。在断点地址前面注意...

相似回答