简单的汇编程序应用

搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写。 一、建立工程双击打开MDK5.26, 在弹出的窗口点击选项New uVision Project,创建新的工程 在弹出的窗口分别设置; 设置项目工程的路径; 设置项目工程的名称,这里使用TEST; 点击保存设置工程的目标环境,本文基于STM32F103ZET6,因此在弹出的窗口选择相应的选项,点击保存即可;具体如下图所示; 二,选择运行环境 ARM的CMSIS已经把开发所需要的软件组件都封装好了,因此直接选择即可; CMSIS下选择CORE; Device下Startup,其中包含了.. 阅读详情

系统功能调用——由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。

分两种,DOS系统功能调用和BIOS终端调用。

汇编语言中DOS系统功能调用有很多,涉及屏幕显示、文件管理、I/O管理等等,每个子程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下:

(1)系统功能号送到寄存器AH中;

(2)入口参数送到指定的寄存器中;

(3)用INT 21H指令执行功能调用;

(4)根据出口参数分析功能调用执行情况。

下面归纳5个在汇编中常用的INT 21H系统功能调用。

 AH                         功能         入口参数    出口参数
4CH返回DOS                无         无
  1键盘输入一个字符到AL中                无        AL=字符
   2输出DL寄存器的字符到显示器DL(存放一个字符)          无
   9输出一个以“$”结尾的字符串到显示器

DS:字符串所在的段地址

DX:字符串首地址

          无
0AH从键盘输入一个字符串到指定缓冲区

DS:缓冲区所在的段地址

DX:缓冲区首地址

缓冲区相应位置

下面分别详细分析5种功能调用:

1、带返回码的结束(AH=4CH)

功能:返回DOS

入口参数:无

调用方法

       MOV    AH,4CH

       INT      21H

通过4CH功能调用能够结束当前正在执行的程序,返回DOS系统,一般用于汇编程序的结束位置。

2、键盘输入一个字符(AH=1)

功能:从键盘输入一个字符到AL中,AL中为该字符的ASCII码。

入口参数:无

调用方法

       MOV    AH,1

       INT      21H

执行完上面的系统调用后,出现提示输入光标,从键盘输入一个字符并保存其ASIIC码到AL寄存器中。

<例子>:交互式程序中用户按下数字键1,2,3,程序转入相应的服务子程序,若按下其他键则会继续等待。

代码:

  1. KEY:  MOV  AH,1  
  2.       INT  21H  ;系统等待输入一个字符  
  3.       CMP  AL,'1'  
  4.       JE   ONE ;如果输入字符为1则跳到标识符ONE处执行  
  5.       CMP  AL,'2'  
  6.       JE   TWO ;如上解析  
  7.       CMP  AL,'3'  
  8.       JE   THREE  
  9.       JMP  KEY ;如果不是1、2、3则继续输入字符  
  10. ONE:   ......  
  11. TWO:   ......  
  12. THREE: ......   
KEY:  MOV  AH,1
      INT  21H  ;系统等待输入一个字符
      CMP  AL,'1'
      JE   ONE ;如果输入字符为1则跳到标识符ONE处执行
      CMP  AL,'2'
      JE   TWO ;如上解析
      CMP  AL,'3'
      JE   THREE
      JMP  KEY ;如果不是1、2、3则继续输入字符
ONE:   ......
TWO:   ......
THREE: ...... 

 

3、输出显示一个字符(AH=2)

功能:输出DL寄存器中的字符到显示器。

入口参数:被输出显示的字符或者字符ASCII码送到DL寄存器中

调用方法

        MOV       DL,字符码

        MOV       AH,2

        INT         21H

执行完上面的调用后,显示器显示出DL中的字符。

<例如>:

         MOV  DL,'6'  (也可以写成6的ASCII码36H,既:MOV   DL,36H)

         MOV   AH,2

         INT     21H

调用结果在屏幕上光标位置处显示6。

4、输出一个字符串(AH=9)

功能:输出显示一个以"$"字符结尾的字符串到显示器。

入口参数:DX=字符串偏移地址;DS=字符串的段地址

调用方法

       MOV     AX,字符串所在的段地址

       MOV     DS,AX

       MOV     DX,字符串的首址偏移地址

       MOV     AH,9

       INT        21H

执行上面调用,输出以DS:DX为首地址,"$"为结尾的字符串到显示器中。若要在显示字符串光标自动回车换行,则在"$"字符前面加上0DH(回车),0AH(换行)字符。

<例子>:在屏幕上显示“HOW DO YOU DO?”字符串。并且光标回车换行。

代码:

  1. DATA SEGMENT  
  2.   STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'  
  3. DATA ENDS  
  4.   
  5. CODE SEGMENT  
  6.   ASSUME CS:CODE,DS:DATA  
  7. START:  
  8.       MOV AX,DATA  
  9.       MOV DS,AX  
  10.       MOV DX,OFFSET STR1;字符串首偏移地址放到DX中  
  11.       MOV AH,9  
  12.       NT 21H;输出字符串  
  13.   
  14.       MOV AH,4CH  
  15.       INT 21H  
  16. CODE ENDS  
  17.  END START  
DATA SEGMENT
  STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'
DATA ENDS

CODE SEGMENT
  ASSUME CS:CODE,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
      MOV DX,OFFSET STR1;字符串首偏移地址放到DX中
      MOV AH,9
      NT 21H;输出字符串

      MOV AH,4CH
      INT 21H
CODE ENDS
 END START

5、从键盘输入一个字符串到缓冲区(AH=0AH)

功能:从键盘输入一串ASCII码字符到缓冲区,输入结束为缓冲区的个数或者“回车”字符。

入口参数:DX=缓冲区首偏移地址;DS=缓冲区段地址

调用方法

        MOV      AX,缓冲区的首址的段地址

        MOV      DS,AX

        MOV       DX,缓冲区的首址的偏移地址

        MOV      AH,0AH

        INT        21H

执行完上面调用,将从键盘接受字符串送到内存的输入缓冲区(由DS:DX指定缓冲区),要求预先定义一个缓冲区,缓冲区的第一个字节指定容纳的最大字符个数,由用户给出;第二个字节存放实际的最大字符个数,由系统最后添入;从第三个字节开始存放从键盘接受的字符,直到ENTER键结束。

<例子>:

  1. DATA SEGMENT  
  2.     BUF   DB   20,         ;存放最大字符个数20个  
  3.             DB   ?,         ;存放实际输入字符个数  
  4.             DB   20 DUP(?)  ;存放输入字符  
  5. DATA ENDS  
  6. CODE SEGMENT  
  7.   ASSUME CS:CODE,DS:DATA  
  8. START:  
  9.    MOV   AX,DATA   ;缓冲区所在段基址  
  10.    MOV  DS,AX  
  11.    LEA  DX,BUF    ;缓冲区首址偏移地址  
  12.    MOV  AH,0AH  
  13.    INT  21H  
  14.           
  15.    MOV  AH   4CH  
  16.    INT  21H  
  17. CODE ENDS  
  18.      END  START   
转载:http://blog.youkuaiyun.com/richievoe/article/details/823587143
14、MS-DOS Int 21H 功能详解 本文详细解析了 MS-DOS 系统中的 Int 21H 中断功能,涵盖字符输入输出、输入状态检查、输入缓冲区重置、磁盘相关操作以及文件操作等多个方面。文章通过具体示例代码展示了各个功能的使用方法,并提供了综合应用示例,帮助开发者更好地理解和应用这些底层系统功能。 阅读详情

相关推荐

19、MS-DOS Int 21H 功能详解

本文详细解析了 MS-DOS 中 Int 21H 中断提供的多种系统功能,涵盖文件操作、系统信息获取、错误处理等方面。每种功能均包含功能描述、调用方式、返回值、注意事项及示例代码,并提供了操作步骤、错误处理流程和常见错误代码参考,为开发者使用 Int 21H 进行底层编程提供了全面指导。

potato的博客 136

INT 21H

INT 21H是指令自动转入中断子程序的入口 上面这句话很难理解吧,相信很多新手都看不懂在说什么。 下面我来举个例子: 以8086 CPU的汇编为例,输出一个字符串,就要使用如下指令: MOV AH,09H INT 21H 假如要在显示器显示输入一个字符串,实际上就是要调用DOS系统的功能来实现。 当然,DOS是包括多种功能,如接受用户输入,显示输出,输出到打印机打印等...... 每一个功能,都有一个编号,其中,在“显示器显示输出”这个功能的编号是09 MOV AH,09H 这个就表示把09这个编号放.

wyyy2088511的博客 1万+

int21h的详细功能描述

收集了详细的int 21h中断的功能,里面包含一个word和几张截图,两个收集互相补充,达到了最大的效果,弥补了书籍中的介绍不详细的缺点

【微机汇编语言学习笔记(二)】 键盘输入显示(INT 21H功能调用)

1.INT 21H功能使用说明 ①入口:AH = 01H 功能:键盘输入到AL中并显示在显示屏上 ②入口:AH = 08H 功能:键盘输入到AL中但不显示在显示屏上 ③入口:AH = 02H 功能:写DL中饭的数据到显示屏上 ④入口:AH = 09H,DS:DX = 字符串首地址,字符串以'$'结束 功能:显示字符串,直到遇到'$'结束 ⑤入口:AH = 0AH,DS:DX = 缓冲区首地址,(DS:DX) = 缓冲区最大字符数 功能:读键盘输入的...

Backlight__的博客 1万+

Cadence16.6安装教程

如需安装所需的软件,请到文章末尾处查看 安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压) 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manage...

谢谢关注“小鱼教你模数电”,各平台同号 8万+

三运放仪表放大器电路设计全解析:从原理到PCB布局避坑指南

本文深度解析三运放仪表放大器电路设计,从差分放大器原理演进到经典三运放架构,详细阐述了其高共模抑制比(CMRR)和高输入阻抗的核心优势。文章重点剖析了电阻匹配、PCB布局对称性等关键设计要点对性能的影响,并提供了基于LTspice的仿真分析与从原理图到PCB布局、焊接调试的全流程实战避坑指南,助力实现高精度信号调理。

redis7keeper的博客 786

WIN32汇编程序的编译方法,环境配置,make的简单应用

 主题:WIN32汇编程序的编译方法,环境配置,make的简单应用作者:gnuserurl:    http://bestbbs.5d6d.com学习一门语言最开始最好弄懂一个简单例子,而往往很多资料忽视了这一点,让初学者还没入门就卡死在门外.网上的资料也不太标准,以至于象我这种初学者摸索好久才有所得.现在开始写笔记吧,废话不多说了,时间宝贵.工具:masm,link,make

凡人凡居 1759

【Nordic实战】nRF54L15引脚规划:电源域、专用引脚与低功耗设计避坑指南

本文深入解析Nordic nRF54L15芯片的引脚规划策略,重点阐述其基于电源域(MCU域、PERI域、LP域)的GPIO分配原则。文章提供了从思维转变到实战避坑的完整指南,强调遵循专用引脚与域对应关系是实现超低功耗设计的关键,并分享了系统化的引脚规划流程与工具使用建议。

weixin_29192141的博客 320

x86汇编程序基础

1. 最简单的汇编程序  .section .data  .section .text  .globl _start _start:   movl  $1,  %eax       movl  $4,  %ebx   int    $0x80   汇编器: as hello.s -o hello.o 链接器: ld hello.o -o hello 为什么用汇编器翻译成机器指

cai_caiyi的博客 394

实战教程:如何用Python+小波变换+CNN搞定医学影像中的条纹噪声(附完整代码)

本文提供了一套完整的实战方案,指导如何利用Python结合小波变换与卷积神经网络(CNN)去除医学影像中的条纹噪声。该方法通过小波变换精准定位噪声,再使用轻量化CNN进行针对性清除,有效保护图像细节,并附有可运行的完整代码,为医学影像处理与AI分析提供高效工具。

weixin_29056101的博客 268

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

五个基于8086处理器的简单汇编程序示例

上述示例中的“假设这里有一个显示或输出…的程序(略)”部分需要使用具体的DOS中断或其他方法来实现。在真实的汇编编程环境中,可能需要包含额外的代码来与DOS或其他操作系统进行交互,以便显示或输出数据。此外,这些示例假设正在使用DOS环境,并且已经设置了适当的段和堆栈。在实际编程中,可能还需要处理这些问题。

嵌入式行业打工人,不定期更新博客。 1307

063、推挽变换器的磁偏问题与解决

本文针对推挽变换器中的磁偏问题展开分析。作者通过实际案例指出,磁偏主要由开关管导通压降差异和驱动信号不对称引起,会导致变压器饱和、MOS管炸毁等问题。文章提供了四种解决方案:采用电流模式控制、添加隔直电容、优化对称驱动设计以及引入磁芯气隙(作为最后手段)。调试时应重点观察原边电流波形对称性、变压器声音和直流分量。作者强调实践经验的重要性,建议预留隔直电容位置,并指出推挽拓扑在500W以上功率场合的局限性。这些基于实战的经验总结为电源工程师提供了有价值的参考。

Jack010169的博客 311

从零开始在MDK创建纯汇编语言的STM32工程,并实现用汇编程序完成 每间隔1秒钟闪烁一次LED的程序

从零开始在MDK创建纯汇编语言的STM32工程,并实现用汇编程序完成 每间隔1秒钟闪烁一次LED的程序 序 言简介应用 一.项目说明二.项目实战 1) 从零开始在MDK创建纯汇编语言的STM32工程。 2) 编写一个简单的汇编语言程序 3) 用汇编程序完成 每间隔1秒钟闪烁一次LED的程序。三. 结语 序 言 简介 1.什么是汇编语言? 汇编语言又称为符号语言(下文介绍为什么会有这个名字),属于低级语言。它是从机器语言发展而来的。使用简短的英文缩写作为汇编指令,并通过汇编过

nsnsnbabsb的博客 1624

YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv9的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 2596

R语言中5种正态性检验的方法

统计学中的t检验和方差分析等方法的应用条件是样本都来自正态总体或近似正态总体,只有符合这个条件,才能用这些方法来检验各样本所属的总体参数的差异显著性。文本向大家介绍在R语言中检验正态性的几种方法: 1、Kolmogorov-Smirnov检验 K-S检验检验单一样本是否来自某一特定分布。比如检验一组数据是否为正态分布。它的检验方法是以样本数据的累积频数分布与特定理论分布比较,若两者间的差距很小,则推论该样本取自某特定分布族。K-S检验的原假设和备择假设为: H0:样本所来自的总体分布服从

Mrrunsen的博客 2万+

Win32汇编程序——一个窗口函数

这个程序可以当做以后我们编写Win32汇编程序的模板,只要在这个基础上进行修改就可以实现我们需要的程序了。代码1;文件名firstwindow.asm2;作者StudyRush3;创建时间2010-11-154;修改时间2010-11-155;函数功能用于创建一个窗口678.3869.modelflat,s...

weixin_30249203的博客 91

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM汇编程序设计

文章目录一、STM32的三种Boot模式的差异开发BOOT模式选择。二、基于MDK创建纯汇编语言的STM32工程1、新建工程 一、STM32的三种Boot模式的差异 以储存器的类型来区分STM32的启动方式; 内部FLASH启动方式: 是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 内部SRAM启动方式: 内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。假如我只修改了代码中一个小小的地方,

q_q2020的博客 187

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

or1200开发环境的使用

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书 1、一个简单的汇编程序       上一节安装好了GNU编译工具,还设置了虚拟机与宿主机的共享文件夹,下面我们就小试牛刀,写一个简单的程序,需要读者朋友们了解的是本书所有的测试代码都是很简单的汇编程序,因为即使最简单C语言代码(如:HelloWorld)经过编译后也会得到大量目标代码,而我们的目的是了解处理器内部的工作过程

leishangwen的专栏 2859

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[国嵌笔记][024][ARM汇编编程概述]

汇编程序用途 1.在bootloader与内核初始化时,还没有建立C语言运行环境,需要用到汇编程序 2.在对访问效率要求很高的情况下,需要用到汇编程序 ARM汇编分类 1.ARM标准汇编:适合于Windows在平台下使用 2.GUN汇编:适合于Linux在平台下使用 汇编程序框架 完整版: .section .data 数据段 <初始化数据> ...

weixin_30951743的博客 101

汇编调试

环境: PB EVC在PB目录下创建文件夹:asmTest,在asmTest文件夹内创建asmTest.s文件,在asmTest.s文件里把需要调试的汇编程序编写好:#include #include #include "platform.s" .text .align 2 LEAF_ENTRY(mult) .set noreorder

383

初学者必备:DOSBox汇编编程指南

初学者必备:DOSBox汇编编程指南 【下载地址】初学者使用DOSBox编写汇编程序指南分享 初学者使用DOSBox编写汇编程序指南本资源文件旨在帮助初学者使用DOSBox编写汇编程序 项目地址: https://gitcode....

gitblog_06518的博客 506

2、第二个汇编程序 && x86寄存器 && 寻址方式

1、x86寄存器     x86的通用寄存器有 eax, ebx, ecx, edx ,edi, esi,有些指令规定只能使用其中的某个寄存器,如除法指令idivl要求被除数在 eax寄存器中,edx寄存器为0,而除数寄存器可以为任意寄存器,计算结果必须保存在 eax寄存器中,

WuHan MediaTek~~辉煌在于不懈的努力和拼搏! 501

1.3程序概念入门

1.3程序概念1 首先我们来说一个计算机设计中一个伟大思想抽象的例子 我们知道计算机中的硬件只能执行极为简单的低级指令。 而一个典型的程序,比如字处理程序或者大型数据库处理系统,可由数百万代码构成,依靠软件库来实现异常复杂的功能。 因此从从复杂的应用程序到简单的指令需要经过几个软件层次来将复杂的高层次逐步解释或翻译成简单的计算机命令。 简化的硬件和软件层次图 这些程序软件的层次结构,外层...

ALiangJie的博客 381

汇编 初学

最简单的汇编程序.section .data.section .text.globl _start_start:movl $1, %eax movl $4, %ebx int $0x80 解释: movl $1, %eax这是一条数据传送指令,这条指令要求CPU内部产生一个数字1并保存到eax 寄存器中。mov 的后缀l表示long,说明是32位的传送指令。这条指令不要求CPU读内存,1这个...

weixin_34360651的博客 111

微型计算机技术8086,2011年自考微型计算机技术及应用考试重点:8086汇编程序设计...

2011年自考微型计算机技术及应用考试重点:8086汇编程序设计分类:自考|更新时间:2016-07-08|来源:转载第四章 8086汇编程序设计(一)学习目的与要求本章通过对汇编语言语法的学习和对汇编语言程序设计的方法步骤学习,使得学生开始掌握汇编编程的思想,结合第三章的汇编级指令学习,能够自行简单的汇编程序设计。(二)课程内容第一节汇编语言程序的格式,常量、标示符和表达式,指示性语句,指令性语...

weixin_39550587的博客 124
上一篇: fiddler对android API接口抓包
下一篇: android双缓存
Mr_lu_code
博客等级 码龄12年 13粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值