汇编程序debug成功但不能直接运行

2023-11-05

王爽《汇编语言》实验10中的dtoc子程序,运行不了,但是单步调试可以通过并且结果正常,我的代码如下:

assume cs:code
 
data segment
    db 10 dup (0)
data ends
 
code segment
start:
    mov ax,12666
    mov bx,data
    mov ds,bx
    mov si,0
    call dtoc
 
    mov dh,8
    mov dl,3
    mov cl,2
    call show_str
 
    mov ax,4c00h
    int 21h
dtoc:
    ; (ax)=w data, ds:si=first address of str
    mov cx,5
    mov bx,10
    mov di,0
s0:
    div bx
    add dl,30h
    mov [di],dl
    inc di
    mov dx,0
    loop s0
    ret
show_str:
    ; (dh)=line_num (0~24), (dl)=column_num (0~79)
    ; (cl)=color, ds:si=source address
    mov ax,0b800h
    mov es,ax
 
    mov al,dh   ; calculate the address
    mov ah,0
    mov dh,80
    mul dh
    mov dh,0
    add ax,dx
    add ax,ax
    mov bx,ax
    
    mov al,cl   ; store the color
 
    mov cx,0
s:
    mov cl,[si]
    jcxz show_str_ret
    mov es:[bx],cl
    inc bx
    mov es:[bx],al
    inc bx
    inc si
    loop s
show_str_ret:
    ret
code ends
end start

单步调试正常:

img


但是直接运行就会卡住:

img

 后来我又在virtualbox的dos虚拟机上试了试,出现了除法溢出。才知道原来dosbox中出现了除法溢出引起的中断是不会正常返回的

可是为什么会溢出呢?我在编程的时候还专门考虑了这个问题,所以选用的是div bx,即16位的除法,这么也不可能溢出啊。再说了就算是溢出那为什么debug的时候又没事呢?

思前想后。纠结了我好久。

最后终于发现问题了,是在div bx之前没有把mov dx,0。dx中还有数,于是就会导致溢出。

那么为什么在debug中又没事呢?原来是因为debug加载的时候会对寄存器进行初始化,也就是debug帮我做了mov dx,0这一步。

只要在div bx之前加一句mov dx,0,问题就迎刃而解了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编程序debug成功但不能直接运行 的相关文章

  • MindNode 5 for Mac(思维导图软件)中文版

    绘制流程图 思维导图 规划图 信息图等自然少不了这款MindNode 5 for Mac 作为优质的思维导图软件 mindnode5 mac破解版的功能很全面 添加文字 链接 图片 扩展注释等非常便捷 而且mindnode 5 破解版会智能

随机推荐

  • Rocketmq原理&最佳实践

    一 MQ背景 选型 消息队列作为高并发系统的核心组件之一 能够帮助业务系统解构提升开发效率和系统稳定性 主要具有以下优势 削峰填谷 主要解决瞬时写压力大于应用服务能力导致消息丢失 系统奔溃等问题 系统解耦 解决不同重要程度 不同能力级别系统
  • Python开发篇——基于React-Dropzone开发上传组件

    这次我要讲述的是在React Flask框架上开发上传组件的技巧 我目前主要以React开发前端 在这个过程中认识到了许多有趣的前端UI框架 React Bootstrap Ant Design Material UI Bulma等 而比较
  • Linux操作系统知识点总结

    1 什么是Linux系统 Linux 全称GNU Linux 是一种免费使用和自由传播的类UNIX操作系统 其内核由林纳斯 本纳第克特 托瓦兹 Linus Benedict Torvalds 于1991年10月5日首次发布 它主要受到Min
  • Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

    说明 Qt可以比较方便地实现自定义控件在Qt Creator中使用 网上也有很多大神的控件可以使用 但是如果想要自己简单定制也可以按照这个流程 本文的要点 1 如何实现一个自定义控件 本文使用的方法有两个步骤 先在一个普通项目中实现使用 新
  • FreeRTOS学习笔记(3、信号量、互斥量的使用)

    FreeRTOS学习笔记 3 信号量 互斥量的使用 前言 往期学习笔记链接 学习工程 信号量 semaphore 两种信号量的对比 信号量的使用 1 创建信号量 2 give 3 take 4 删除信号量 使用计数型信号量实现同步功能 使用
  • zookeeper结构和命令

    zookeeper特性 1 Zookeeper 一个leader 多个follower组成的集群 2 全局数据一致 每个server保存一份相同的数据副本 client无论连接到哪个server 数据都是一致的 3 分布式读写 更新请求转发
  • 选择、插入、归并、希尔、快速排序算法性能比较总结

    1 概述 本文对比较常用且比较高效的排序算法进行了总结和解析 并贴出了比较精简的实现代码 包括选择排序 插入排序 归并排序 希尔排序 快速排序等 算法性能比较如下图所示 2 选择排序 选择排序的第一趟处理是从数据序列所有n个数据中选择一个最
  • MyBatis-扩展-PageHelpler分页插件使用

    PageHelper是MyBatis中非常方便的第三方分页插件 官方文档 https github com pagehelper MybatisPageHelper blob master README zh md 我们可以对照官方文档的说
  • tomcat的日志记录有哪些?

    Tomcat 是一个常用的 Java Web 服务器 它可以生成各种类型的日志记录 以下是 Tomcat 的一些常见日志记录 访问日志 Access Logs 记录所有进入 Tomcat 服务器的 HTTP 请求 这些日志包含有关请求的详细
  • jdk源码调试显示变量

    原文地址 http my oschina net xionghui blog 497361 Java是一门开源的程序设计语言 喜欢研究源码的java开发者总会忍不住debug一下jdk源码 虽然官方的jdk自带了源码包src zip 然而在
  • LeetCode 面试题01.01. 判定字符是否唯一的两种解法

    本文唯一重点 按位取与的运算优先级比较低 至少比 和 都低 注意加括号 题目概述 题解 一 哈希表 思路是简单的 用第一个下标做字符 第二个下标做字符出现的次数 先遍历一遍字符串 把次数都统计好 然后再遍历一遍字符串 如果查询到某个字符的c
  • 解决中文乱码问起

    Java对数据库进行CRUD操作出现乱码 先查看web xml有没有配置字符编码过滤器
  • es6把多个class方法合并在一起

    前言 es6新增的class方法 现在想把他们多个合并到一起 最终生成一个新方法出来 思路 我们新建3个文件 分别为index js login js main js login js 和 main js是两个 class函数 将他们合并到
  • Huggingface-4.8.2自定义训练

    Huggingface走到4 8 2这个版本 已经有了很好的封装 训练一个语言网络只需要调用Trainer train 即可完成 如果要根据自己的需求修改训练的过程 比如自定义loss 输出梯度 直接修改huggingface的源码显然是不
  • Spire.Doc系列教程:C# Word 图片替换

    Spire Doc支持在Word文档中对图片进行多种操作 如添加 提取 替换和删除等 本文主要介绍如何使用Spire Doc替换Word文档中的图片 在Spire Doc中 图片替换包含文本替换图片和图片替换图片两种方式 以下部分将对这两种
  • js中file、blob、base64的相互转换,前端图片压缩、裁剪、文件格式转换

    最近做了个前端图片压缩 用到了很多js文件操作api 整理一下防止健忘 1 file转base64 获取文件的Base64 param file File 文件 param callback Function 回调函数 参数为获取到的bas
  • (个人)AR电子书系统创新实训中期总结

    AR电子书项目实训中期总结 已完成内容 使用ZXing Net库 验证并测试Unity中生成和识别二维码的功能 使用Unity自带的WWW类测试并实现了本地图像和视屏资源的读取 并使用File方法实现了资源的写入 通过www读入本地文件 p
  • Vue项目运行时报错These relative modules were not found

    Vue项目运行时报错These relative modules were not found ERROR Failed to compile with 2 errors These relative modules were not fo
  • 用git,clone依赖的库

    git clone https github com influxdata influxdb java git cd crfasrnn git submodule update init recursive 或 git clone recu
  • 汇编程序debug成功但不能直接运行

    王爽 汇编语言 实验10中的dtoc子程序 运行不了 但是单步调试可以通过并且结果正常 我的代码如下 assume cs code data segment db 10 dup 0 data ends code segment start