鱼C论坛

 找回密码
 立即注册
查看: 2960|回复: 2

[已解决]SS SP的用法 实验6-1

[复制链接]
发表于 2020-11-17 15:14:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原题是用DS:[BX]的方式来获取内容  但是我想的是 如果我把SS设置为0 SP也设置为0  那么当我直接POP的时候 就取出来了一个 然后SP也自动加2 这样的话 来个循环就可以取出来了

但是DEBUG调试的时候 到了mov cs:[bx],ax 这句的时候就出错了 请问下错在哪里了。。

assume cs:abc
abc segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:
      mov ax,0
          mov ss,ax
          mov sp,0h
      mov cx,8h
          mov bx,0h
s:          pop ax
      mov cs:[bx],ax
          add bx,2
          loop s
          
          mov ax,4c00h
          int 21h
abc ends
end start
最佳答案
2020-11-17 17:50:10
首先,不要把SS设置为0,这样做语法上没有问题,但是相当危险。。
因为从0开始的256*4 = 1024个字节保存着系统的中断向量表。中断向量表指向系统的中断服务程序。
这里是不能去修改的,一旦修改,就不知道会出什么问题。

你的程序从中断向量表里取值是想干什么?

另外,程序单独运行是没有问题的,因为你只是对中断向量表进行读操作。没有写,不会破坏。
但是不要用调试器去调试。调试器会用到你程序的栈,调试器会认为程序的SP之前的数据是没有
用的,调试器会使用SP之前的内存,当执行pop ax 后,sp 指向 0000:0002 ,
而0000:0000 - 0000:0004 保存的是 int 1 的服务程序,int 1也就是单步中断。
单步中断的服务例程被修改了,调试器还能工作吗?

很多东西不要想当然,中断向量表、栈这些东西不要轻易去改动。
DOS系统没有内存保护,意味着你可以读写内存里的任意位置,但一旦
操作不慎,很容易就造成系统崩溃。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 17:50:10 | 显示全部楼层    本楼为最佳答案   
首先,不要把SS设置为0,这样做语法上没有问题,但是相当危险。。
因为从0开始的256*4 = 1024个字节保存着系统的中断向量表。中断向量表指向系统的中断服务程序。
这里是不能去修改的,一旦修改,就不知道会出什么问题。

你的程序从中断向量表里取值是想干什么?

另外,程序单独运行是没有问题的,因为你只是对中断向量表进行读操作。没有写,不会破坏。
但是不要用调试器去调试。调试器会用到你程序的栈,调试器会认为程序的SP之前的数据是没有
用的,调试器会使用SP之前的内存,当执行pop ax 后,sp 指向 0000:0002 ,
而0000:0000 - 0000:0004 保存的是 int 1 的服务程序,int 1也就是单步中断。
单步中断的服务例程被修改了,调试器还能工作吗?

很多东西不要想当然,中断向量表、栈这些东西不要轻易去改动。
DOS系统没有内存保护,意味着你可以读写内存里的任意位置,但一旦
操作不慎,很容易就造成系统崩溃。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 18:33:05 | 显示全部楼层
xieglt 发表于 2020-11-17 17:50
首先,不要把SS设置为0,这样做语法上没有问题,但是相当危险。。
因为从0开始的256*4 = 1024个字节保存着 ...

大神的回答让我五体投地 那我以后不这样写了~哈哈 我只是偷个懒 程序说拷那段数据 我就想的干脆用栈POP出来~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表