2-4、DEBUG和源程序区别

语雀原文链接

文章目录

    • 1、DEBUG 和 汇编编译器MASM
      • 区别1:默认进制不同
      • 区别2:[地址]
        • 示例1:debug
        • 示例2:[0]
        • 示例3:[寄存器]
        • 示例4:ds:[0]
        • 小结
      • 区别3:源程序数据不能以字母开头

1、DEBUG 和 汇编编译器MASM

  • 之前的学习中,我们可以通过debug a命令写入汇编指令;也可以通过编写一个xx.asm源文件,通过编译链接,最终运行该程序。这两种方式在写法上有细微差别,同样的写法在这两个方式下可能会产生不同的结果。
  • 下面我们就对这些差异点做详细的描述

区别1:默认进制不同

  • 在debug中,默认所有数字都是 16 进制,加了 h 反而会报错;
  • AX=1234

image.png

  • DEBUG中主动添加进制标识会报错

image.png

  • 在汇编源程序 .asm 中,不加 h 则默认为 10 进制,加 h 才表示 16 进制,加 b 为后缀为二进制;下述写法会报错

image.png

assume cs:code
code segmentmov ax,0fff
code ends
end
  • asm源程序的正确写法
assume cs:code
code segmentmov ax,0fffHmov bx,1234
code ends
end
  • 使用 debug 跟踪可执行程序 .exe 的时候,debug会将不加 h 的 10 进制(或者加了b为后缀的二进制)变为对应的 16 进制。

区别2:[地址]

  • DEBUG中会将[0]、[1]也就是2000:0 2000:1单元中数据送入al bl cl dl,符合我们的预期
示例1:debug
  • 写入指令a

image.png

  • 查看u

image.png

  • 执行t

image.png

示例2:[0]
  • 使用
assume cs:code
code segmentmov ax,2000Hmov ds,axmov al,[0]mov bl,[1]mov cl,[2]mov dl,[3]
code ends
end
  • 上述代码编译链接后运行,mov al,[0]最终被解释成了mov al,00,被当成了一个数据而不是内存单元的偏移地址

image.png
image.png

示例3:[寄存器]
  • 为了解决上述问题,可以使用[寄存器]方式来访问内存单元,此时默认的段地址保存在ds中
assume cs:code
code segmentmov ax,2000Hmov ds,axmov bx,1mov al,[bx]
code ends
end
  • 执行结果

image.png

示例4:ds:[0]
  • [0]里面是一个常量,就要显式的给出段地址所在的寄存器
assume cs:code
code segmentmov ax,2000Hmov ds,axmov al,ds:[0]mov bl,ds:[1]mov cl,ds:[2]mov dl,ds:[3]
code ends
end
  • 编译链接结果

image.png

小结
  • 在汇编源程序中,如果用指令访问一个内存单元,则在指令中中必须用"[…]"来表示内存单元。
    • 如果在"[]“里用一个常量idata直接给出内存单元的偏移地址,就要在”[]"的前面显式地给出段地址所在的段寄存器。比如mov al,ds:[0]
    • 如果没有在"II"的前面显式地给出段地址所在的段寄存器,比如mov al,[0],那么,编译器masm将把指令中的"[idata]“解释为"idata”。
  • 如果在"[]"里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中。当然,也可以显式地给出段地址所在的段寄存器

区别3:源程序数据不能以字母开头

  • 下述程序可以正常编译运行
assume cs:code
code segmentmov ax,0fffh
code ends
end
  • 下述程序报错,汇编源程序中数据不能以字母开头,必要的话前面加0

image.png

assume cs:code
code segmentmov ax,ffffh
code ends
end
  • 数据前面加个0就不会报错
assume cs:code
code segmentmov ax,0ffffh
code ends
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256098.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【二叉树】

文章目录 树形结构注意要点细分概念树在生活中的应用 二叉树什么是二叉树二叉树特点:两种特殊的二叉树二叉树的性质二叉树性质的练习二叉树的存储二叉树的遍历前序遍历中序遍历后序遍历遍历练习 树形结构 树是一种非线性的数据结构,它具有以下的特点&am…

class059 建图、链式前向星、拓扑排序【算法】

class059 建图、链式前向星、拓扑排序【算法】 code1 建图 package class059;import java.util.ArrayList; import java.util.Arrays;public class Code01_CreateGraph {// 点的最大数量public static int MAXN 11;// 边的最大数量// 只有链式前向星方式建图需要这个数量// 注…

Unity 关于Ray、RaycastHit、Raycast及其使用

Unity中,我们要进行物理模拟和碰撞检测时,有三个重要的概念Ray、RaycastHit、Raycast。 其中,Ray可以理解为射线,它是一条从起点沿着特定方向延伸的无限长线段。 它的语法是: Ray(Vector3 origin, Vector3 directio…

多路径传输(MPTCP MPQUIC)数据包调度研究总结

近些年来,以5G和Wifi6为代表的无线通信技术发展迅速,并已经在全世界实现了大规模部署。此外,智能手机等移动设备不断迭代更新,其网络通信能力也持续演进,使得应用同时利用多个不同网卡在多条不同物理链路上&#xff08…

2023-2024-1-高级语言程序设计-第2次月考编程题

注:此前已发布过的题解不再发布(原题请在下面位置进行搜索)。 7-1-2 排序(算法任意) 本题要求将给定的n个整数从大到小排序后输出(可使用任意排序算法)。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给…

【Docker】Swarm的ingress网络

Docker Swarm Ingress网络是Docker集群中的一种网络模式,它允许在Swarm集群中运行的服务通过一个公共的入口点进行访问。Ingress网络将外部流量路由到Swarm集群中的适当服务,并提供负载均衡和服务发现功能。 在Docker Swarm中,Ingress网络使…

如何使用HadSky搭配内网穿透工具搭建个人论坛并发布至公网随时随地可访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置)2.4 公网访问测试 总结 前言 经过多年的基础…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

Android平板还能编程?Ubuntu本地安装code-server远程编程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

TCP通讯

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…