第一个汇编程序

news2025/7/22 9:30:26

第一个汇编程序

文章目录

  • 第一个汇编程序
    • 1.汇编模拟程序:DOSBox使用
    • 2.汇编程序从写出到执行的过程
    • 3.程序执行过程跟踪


1.汇编模拟程序:DOSBox使用

BOSBox软件常用基本语法:

mount c: d:\masn 	;挂载磁盘,挂载后用c:切换为C盘才能用debug等工具
dir 				;查看当前磁盘
debug 			    ;使用debug工具
-r 寄存器名			 ;查看cpu寄存器的内容
-d					;查看内存中的内容  ;扩展用法: -d 段地址:偏移地址 结果偏移地址,如 -d 1000:0 9 代表地址1000:0~1000:9
-e 内存内容			 ;改写寄存器内存中的内容
-u 				    ;查看内存中机器码含义
-T 					;执行内存中的机器码
-a					;以汇编指令的形式在内存中写入机器指令
-q					;退出debug工具

一点使用细节:

  1. 在使用DOSBox的使用一定要先挂载磁盘,否则无法使用debug工具
  2. 不要直接在自己电脑上使用DOSBox软件,因为你修改的寄存器可能是存储系统文件的寄存器,改了系统就崩了

伪指令与汇编代码的含义:

  1. 在汇编语言中有两种指令:汇编指令和伪指令
  2. 汇编指令:是指对应的机器码指令,可以被编译为机器指令,最终为CPU执行
  3. 伪指令:是指没有对应的机器指令,最终不被CPU所执行,由编译器执行的执行(编译器根据伪指令来进行相关的编译工作)

常见的伪指令含义:

  1. assume:这条伪指令含义是"假设"。它假设某一段寄存器和程序中的某一个用segment…ends定义的段相关联

  2. segment与ends:segment和ends是一对成对使用的伪指令。segment和ends的功能是定义一个段,segment说明一个段开始,ends说明一个段结束。一个段必须有一个名称来表示

  3. end:end是一个汇编语言结束标记,编译器在编译汇编程序的过程中,如果遇到伪指令end,就结束对源程序的编译

  4. idata:表示常量

  5. db:定义字节类型的意思

  6. dw:定义字类型的意思

    比如:

    1. mov ax,[idata] 可以表示 mov ax,[1] mov ax,[2]等
    2. mov bx,idata 可以表示mov bx,1 mov bx,2等
    3. mov ds,idata 可以表示mov ds,1 mov ds,2等但是这样是非法指令,因为ds寄存器不支持直接将数据送入ds寄存器
;举例格式
assume cs:codesg ;assume+自定段名称
codesg segment ;格式:段名称+segment
    mov ax,0123H
    mov bx,0456H
    add ax,bx
    add ax,ax
    mov ax,4C00H
    int 21H
codesg ends ;格式:段名称+ends
end  ;结束标志

2.汇编程序从写出到执行的过程

  1. Edit(编写)
  2. masm(编译)
  3. link(连接)

请添加图片描述

加载后,CPU的CS:IP指向程序的第一条指令(即程序的入口)

//1.asm程序
assume cs:codesg ;将用作代码段的段codesg和段寄存器cs联系起来。

codesg segment ;定义一个段,段的名称为“codesg”,这个段从此开始
			   ;codesg是一个标号,作为一个段的名称,最终被编译连接成一个段的段地址

	mov ax, 0123H
	mov bx, 0456H 
	add ax, bx
	add ax, ax 
	
	mov ax, 4c00H 
	int 21H ;这两条指令实现程序的返回
	
codesg ends ;名称为“codesg”的段到此结束

end ;//编译器在编译汇编程序的过程中,碰到了伪指令end,结束对源程序的编译

请添加图片描述

请添加图片描述


3.程序执行过程跟踪

先给结论:DS和CS段之间有256(也就是100H)的通信区,用于DOS跟程序通讯

这也是为什么(ds)=0B2DH,但程序在0B3D:0(100H就是10:0)处开始执行的原因

请添加图片描述

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09

大家好,我是陶然同学,软件工程大三明年实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…

uni-app入门:WXML列表渲染与条件渲染

1.列表渲染 1.1wx:for 1.2wx:key 2.条件渲染 2.1wx:if 2.2 hidden 正文 WXML全称:wexin markup language,微信标签语言,可以理解为web中的html,今天来讲一下列表渲染,通过几个小案例掌…

艾美捷高纯度 Cholesterol胆固醇相关介绍

胆固醇在体内有着广泛的生理作用,但当其过量时便会导致高胆固醇血症,对机体产生不利的影响。现代研究已发现,动脉粥样硬化、静脉血栓形成与胆石症与高胆固醇血症有密切的相关性。 如果是单纯的胆固醇高则饮食调节是最好的办法,如果…

机器人虚拟仿真工作站考试

总共三个步骤: 创建工作台、加工零件、机器人臂 !!!!! 一、加工零件的创建 1、先打开sw软件,然后点击零件、创建进入到该软件内: 2、点击前视基础面(点击后按esc&#x…

RabbitMQ初步到精通-第四章-RabbitMQ工作模式-WORK

第四章-RabbitMQ工作模式-WORK 1.模式介绍 1.1 work模式 Work模式与前面的Simple模式一致,也是消息经由生产者发到Exchange再到queue再被消费者消费。不同点在于SIMPL模式是一个队列对应的一个消费者,此模式会由一个队列对应两个消费者或大于两个消费者。…

MyBatis的配置文件

日志怎么在mybatis中实现呢 1.添加pom.xml依赖 2.添加logback配置文件 mybatisconfig.xml 引入外部属性资源文件 注意:其中使用的较多的需要设置的为: 引入外部属性资源文件 将数据库的蛇形命名映射为驼峰命名 使用typeAliases标签设置里面的package标签,为…

智工教育:环评师考试重要知识点

环境影响评价师的知识点庞杂纷繁,想要顺利通过考试,就要经常复习看过的知识,达到加强记忆的效果。下面是小编整理的环评师考试重要知识点,一起来复习吧! 考试目的及大纲主要内容 通过本科目考试,检验具有一定实践经验…

shell脚本编程基础(中)

目录 (一)shell流程控制-for循环语句 1. for 循环介绍 2. for语法 2.1 for 语法一 2.2 for语法二 3.循环控制语句 3.1 sleep N 脚本执行到该步休眠N秒 3.2 continue 跳过循环中的某次循环 3.3 break 跳出循环继续执行后续代码 3.4实例 (二&am…

MyBatis大数据量插入方案

1、前言 在开发过程中,有时我们会碰到将大批量的数据入库的场景,那么我们一般有下面三种方式入库: ExecutorType.BATCH批处理方式插入foreach循环标签插入MyBatisPlus自带的saveBatch批量新增方法 下面我们用一个案例来测试一下&#xff0…

让学前端不再害怕英语单词(一)

有很多跟着我学习的学生经常跟我抱怨前端的单词很多,学了css又忘了html的单词,学了js又忘了css 的单词,所以本着给跟着我学习的学生提供一个学习前端不怕英语单词的课程,就打算写一篇博客去讲述如何增强在学习前端的时候巩固语法并…

通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录

文章目录jwt的问题jwt的请求流程图gtoken的优势注意问题演示demo入门示例运行效果启动项目:访问不认证接口:返回成功未登录时访问认证接口:返回错误提示请求登录接口:返回token携带token再次访问认证接口:返回成功分析…

postgres-operator 原理解析- 章节 I

这篇文章我想写postgres-operator如何利用kubernetes实现高可用功能其中的客户端流量路由部分。 总体的目的呢就是客户端数据库连接请求,如果通过利用kubernetes的机制实现将流量路由到实际的Postgresql主节点。 基础知识 Services without selectors 平常得Ser…

【Java进阶篇】第三章 常用类

文章目录一、String类1、String类概述2、String字符串的存储原理3、有String型属性的对象4、两种字符串对象创建方式的区别5、String类的特殊构造方法6、String类中的方法二、StringBuffer类1、StringBuffer类的构造方法2、String类和StringBuffer类的区别3、StringBuffer和Str…

我修复了一个 Vite Bug,让我的项目首屏性能提高了 25%

本文正在参加「金石计划 . 瓜分6万现金大奖」 一次偶然的机会,我将项目(基于 tdesign-vue-next-starter )由 Vite 2.7 升级成 Vite 3.x 后,发现首次运行 Vite dev 构建,页面首屏时间非常长,且一定会整个页…

Vue3基础看这一篇就够了(万字长篇,附实例代码及效果演示)

目录 前言 概述 Vue3组合式api VS Vue2选项式api 基础部分 setup 选项式api的风格 组合式api的风格 区别 响应式数据 ref reactive shallowReactive 与 shallowRef 计算属性和监听 computed 函数 watch 函数 watchEffect 生命周期 响应式数据只读 toRaw 返回代…

呼叫中心中间件(mod_cti基于FreeSWITCH)-背景音(彩话)接口

背景音,就是给通话添加一个背景音,比如办公室的噪音,键盘敲击声,等。彩话,就是通话过程播放一个声音,代替人工说话,这个声音双方可以同时听到,而且播放过程不影响双方通话。 用处 …

「JVS低代码开发平台」关于逻辑引擎的触发讲解

JVS逻辑引擎是代码开发套件中的业务瓶装的核心,用于去实现各种场景下的逻辑功能,可以把他理解为一个程序配置器与程序的执行器。 逻辑引擎是可以被多种配置器调用的触发的,从而实现了各种业务场景中对应功能的实现,那么接下来我们…

RabbitMQ初步到精通-第四章-RabbitMQ工作模式-PUB/SUB

第四章-RabbitMQ工作模式-PUB/SUB 1.模式介绍 1.1 模式 此模式称为发布订阅模式,从此模式开始,我们就不再使用默认的交换机了,开始定义我们自己的交换机。 此发布订阅模式,使用的交换机类型为Fanout。定义好交换机,消…

【MATLAB教程案例42】语音信号的MFCC特征提取matlab仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 本课程学习成果预览: 目录 1.软件版本 2.MFCC理论概述

JavaScript之BOM复习(54th)

1、BOM概述 1、BOM Browser Object Model 浏览器对象模型 2、它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window 3、BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性 4、BOM 缺乏标准,JavaScript 语法的…