,汇编语言,弟5章 实验4编译后单步执行出现错误,CS:0000 IP:0077 OP:F0 37 05 19 02选择“关闭”

作者&投稿:蒯姬 (若有异议请与网页底部的电邮联系)
金庸群侠传 NTVDM CPU 遇到无效的指令 CS:0000 IP:0077 OP:f0 37 05 10 02~

汗,对于这样的问题,我一般是从新安装的,反正游戏小,把save的存档文件留到就够了。

第一个疑惑:汇编指令经过编译连接后,以16进制数的形式存在内存里,就是说,汇编指令是以其相应的机器码的形式存储的。MOV AX,0123H对应的机器码为B8 23 01,这条指令为三字节指令,占三个字节的存储空间。
第二个疑惑:每条指令所占的内存是固定的,你B8 23 01 BB 4个组合在一起,什么也不是了,注意机器码里是含有操作数的,B8 23 01看出什么没有?23 01就是操作数0123,高位在前,低位在后存放的。B8当然就是向AX中写入即时数的机器码,CPU取得这个指令后,就知道此指令长度为3字节,而不会去把后面的BB当做同一条指令混进来。这个扯起来没完,你大概知道它肯定不会有问题就行了。

这个问题我这是第三次看到了。这个又是王爽的那本汇编语言里的例子吧。
当用T命令调试的时候,实际上触发了单步中断,而单步中断的时候,也会往栈里存东西,比如CS、IP、标志位之类的。程序的压栈操作,把单步中断保存的CS或IP覆盖掉了,所以使用T命令之后,就无法正确返回。
解决办法:把栈的大小设大点;不要手动设置栈段、SP等,让编译器自己设置。
你这道题,首先
mov ax,2000h
mov ss,ax
这就不安全。段地址应该让编译器自己来设置。
不过问题不在这里,问题出在栈的大小太小了。
你把add sp, 4
这句话改大点就行了,比如add sp, 256

把代码贴出来。。。
不然 教不了


新化县13558898497: 王爽汇编语言第5章实验4答案和疑惑 -
泣陆散结: 物理地址不是等于逻辑地址*10h+偏移地址么 0:200~0:20b,其中0在这里就是一个逻辑地址,后面的200和20b是便宜地址,而0020:0~0020:b的逻辑地址是0020,偏移地址是0和b,它们的物理地址是一样的,所以内容当然是一样的了,至于第二个问题,我没有书,所以解决不了

新化县13558898497: 汇编语言 王爽 第五章实验4 第一题 -
泣陆散结: 在内存中有一段安全区间,如果直接指定地址写内存,那么最好写在安全区间内,否则在Windows操作系统下就可能弹出错误窗口.而安全区间的地址为0:200~0:2FF.所以200H肯定没问题,至于安全区间外,则要看系统当前运行情况了.

新化县13558898497: 怎样用debug载入程序? -
泣陆散结: 分明就是王爽《汇编语言》中第五章实验四第三题我已经解决了:在DEBUG中载入程序的时候,你看看书上91页倒数第五行文字"CX中存放的是程序的长度"用DEBUG载入程序的时候,再用r命令查看CX,既然知道程序的长度是1D那么由于mov ax,4c00h int 21h占5个字节所以程序的长度为1DH-5H=18H所以第二个空即你写错的IP处为18H第一处由于程序在载入时候第一条指令的CS便是程序的CS值,所以第一个空可以放code或者CS.我和你都在学,一起努力吧!

新化县13558898497: 王爽汇编语言第二版实验四 -
泣陆散结: 我做这个程序的时候是手动计算需要复制的代码的长度的,具体方法是: 1.先在第二个空那随便填一个数字,不要太大了 2.将程序编译链接,用Debug打开程序,U 一下,查找 mov ax,4C00H 的地址,这下你就知道那段需要被复制的代码实际有多长了吧? 3.将真正的长度填入第二个空 实际有简单的方法确定那段代码的长度,不过作者考虑到知识屏蔽,所以在第四章没说,你学到后面就知道了 忘了说了,你学这本书,去这个网站看看 www.asmedu.net 我想是因为大家写的程序不一样,所以才有的是17H有的是18H. 不同之处在这里 mov ax,cs 和 mov ax,code 第一个是2字节的,第二个是3字节的,你自己试试看

新化县13558898497: 王爽老师汇编语言第四章4.4编译,实验的时候遇到的问题 -
泣陆散结: 你可能是通过双击打开的masm.如果想回车完了后看到编译情况,需要进入DOS环境,即运行command或cmd之类的.在dos环境下,通过命令方式进行操作,就可看到了!!!

新化县13558898497: 汇编语言实验5 -
泣陆散结: 1、 push ds:[0] ;0123h进栈 push ds:[2] ;0456h进栈 pop ds:[2] ;0456h出栈送到了ds:【2】处 pop ds:[0] ;0123h出栈送到了ds:【0】处 所以顺序并没有发生改变. 2、由于stake和data段中各定义了两个字型数据,不大于16字节,所以三个段的段地址相差1.

新化县13558898497: 单片机汇编语言1加到100怎么编? -
泣陆散结: org 0mov r0,#100 ;共100个数 mov a,#0 ;累加结果先清0 mov r1,#1 ;第1个数为1loop: add a,r1 ;把数累加起来 inc r1 ;下一个数 djnz r0,loop;共100个数,未完转 LOOP循环sjmp $ ;完成 end

新化县13558898497: 王爽老师汇编语言第二版 实验4 【bx】loop的使用 -
泣陆散结: 复制操作由以下指令完成:S:MOV AL,[BX] (1) MOV ES:[BX],AL (2) INC BX (3) LOOP S (4) 其中(1)表示从DS:BX所指到的单元取一字节数据送AL,而题要求复制指令,但指令在代码段内,也就是CS为段基址的单元,所以前面可以把CS送DS,且指令从该段的起始处开始,因而偏移地址为0,也就是BX开始时应为0的原因.由(4)可知,CX应控制复制字节数,通过Debug可知,从第一条指令到MOV AX,4C00H处的偏移地址之差应为17H,也就是它们之间的字节数了.所以为17H.

新化县13558898497: 求用汇编语言编写两位非压缩bcd相乘的程序 -
泣陆散结: ; 本程序通过编译,运行正确 Code SegmentAssume CS:Code,DS:Code Start: mov al,8mov bl,7mul blaam ;用于调整寄存器AL之值,该值是由二个单BCD码字节用无符号乘指令MUL所得的积.其调整规则:AH←AL/10(商),AL←AL%10(余数) Exit_Proc: mov ah,4ch ;结束程序int 21h Code ENDSEND Start ;编译到此结束

新化县13558898497: 用汇编语言编写:给五个无符号数,将其从大到小排列,并将排序结果用十进制形式显示 -
泣陆散结: ;汇编语言边一个程序从键盘上输入N个十进制数,(数小于等于65536,N可变),要求按排序的方式对N个数进行显示, ;用MASM5.0编译通过,以下是运行实例 ; ;E:\masm1>1130 ;12345 ;2 ;333 ;44 ;55 ;666 ; ;00002 ;00044 ;00055 ;00333 ;00666 ;12345 ; E:\masm1> ;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网