鱼C论坛

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

[已解决]执行了这段汇编代码后,一进入循环s:,dosbox就出现无线循环卡死的情况

[复制链接]
发表于 2022-3-10 11:19:46 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 DSFEF 于 2022-3-10 11:20 编辑

执行了这段汇编代码后,一进入循环s:,dosbox就出现无线循环卡死的情况,有知道的吗,大神们帮忙看看
assume cs:code
code segment
start: mov ax,0002h
        mov ds,ax
        mov bx,0
        mov ax,0
        mov cx,63
s:        mov [bx],al
        inc bx
        inc al
        loop s
       
        mov ax,4c00h
        int 21h
code ends
end start

分割-----------------------------------------------
BLTQWPB~@JB07@%BKKW3TH1.jpg
最佳答案
2022-3-10 11:19:47
本帖最后由 jackz007 于 2022-3-11 16:14 编辑

      这个代码向内存地址 2:0000 ~ 2:003e 对应于绝对地址 00020 ~ 0005e,这个地址属于操作系统非常重要的中断向量表的存储空间(00000 ~ 003ff),是任何一个程序都不能随便写入数据的内存区域,因为操作系统的正常运转需要依赖这片内存区域。
      应该在程序代码中开辟用于存储写入 63 个字节数据的专用存储空间,这样,就不会直接危害到 DOS 操作系统了。
assume cs:code , ds:data
data segment para public 'DATA'
     db 40h dup(0)
data ends
stack segment para stack 'STACK'
     db 400h dup(0)
stack ends
code segment para public 'CODE'
start: mov ax,data
       mov ds,ax 
       mov bx,0
       mov ax,0
       mov cx,63
s:     mov [bx],al
       inc bx
       inc al
       loop s
       mov ax,4c00h
       int 21h
code ends
end start
       在编译完代码,使用 debug.exe 开始跟踪之前,仔细观察一下 SS、SP 寄存器的数值,看看和你之前编译的程序有什么区别?

最佳答案

查看完整内容

这个代码向内存地址 2:0000 ~ 2:003e 对应于绝对地址 00020 ~ 0005e,这个地址属于操作系统非常重要的中断向量表的存储空间(00000 ~ 003ff),是任何一个程序都不能随便写入数据的内存区域,因为操作系统的正常运转需要依赖这片内存区域。 应该在程序代码中开辟用于存储写入 63 个字节数据的专用存储空间,这样,就不会直接危害到 DOS 操作系统了。 在编译完代码,使用 debug.exe 开始跟踪之前,仔细观察一 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-10 11:19:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-3-11 16:14 编辑

      这个代码向内存地址 2:0000 ~ 2:003e 对应于绝对地址 00020 ~ 0005e,这个地址属于操作系统非常重要的中断向量表的存储空间(00000 ~ 003ff),是任何一个程序都不能随便写入数据的内存区域,因为操作系统的正常运转需要依赖这片内存区域。
      应该在程序代码中开辟用于存储写入 63 个字节数据的专用存储空间,这样,就不会直接危害到 DOS 操作系统了。
assume cs:code , ds:data
data segment para public 'DATA'
     db 40h dup(0)
data ends
stack segment para stack 'STACK'
     db 400h dup(0)
stack ends
code segment para public 'CODE'
start: mov ax,data
       mov ds,ax 
       mov bx,0
       mov ax,0
       mov cx,63
s:     mov [bx],al
       inc bx
       inc al
       loop s
       mov ax,4c00h
       int 21h
code ends
end start
       在编译完代码,使用 debug.exe 开始跟踪之前,仔细观察一下 SS、SP 寄存器的数值,看看和你之前编译的程序有什么区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-11 08:16:53 | 显示全部楼层
写入非法地址,应该是 mov ax,0020h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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