汇编输入输出(单个字符以及字符串)

汇编串传送指令   将data段中的第一个字符串复制到它后面的空间中: data segment db 'Welcome to masm!' db 16 dup (0) data ends mov ax, data moc ds, ax mov si, 0 ; “ds:si”指向“data:0” mov es, ax mov di, 16 ; “es:di”指向“data:0010” mov cx, 16 ; “(cx) = 16”,rep循环16次 cld ; 设置“df = 0”,正向 阅读详情

简单的汇编代码演示

1、输入输出

输入输出主要有两个中断调用,分别为INT 16H 和INT 21H

1.1 INT 16H(ROM BIOS中断)

原理:
16H中断服务子程序提供了多个功能,每个功能对应一个功能号码,调用他们的方法是

功能号->AH
INT 16H
功能号功能返回参数
0等待从键盘读字符AL=字符的ASCII码,AH=扫描码
1读键盘缓冲区字符若ZF=1,表示缓冲区空;否则表示缓冲区不空,则AL=ASCII值,AH=扫描码
2返回键盘状态字AL=键盘状态字节

相关示例代码(可以跑起来):

主要是从键盘中读取一个字符

DATAS  SEGMENT
    CHAR DB ?
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    MOV AH,0    ;进行输入
    INT 16H
    MOV CHAR,AL

    mov AH,2    ;进行输出
    MOV DL,CHAR
    INT 21H

    MOV AH,4CH
    INT 21H
CODES  ENDS
    END  START
1.1 INT 21H(DOS中断)

原理:
功能号发送AH寄存器,调用参数所求的位置,然后发送INT 21H系统功能调用中断
主要的功能号如下图所示:

功能号调用参数说明
1AL=输入字符串的ASCII值等待从标准输入设备(通常为键盘)输入一个字符,把接受到的字符的ASCII码值送给AL,并显示到显示器的当前光标位置。该功能识别Ctrl-C键并做相应处理
2DL=输出字符的ASCII值该输出功能也使光标跟随移动
0AHDS:DX指向自定义的输入缓冲区首地址从标准输入设备(通常为键盘)输入一串字符到用户定义的缓冲区,直到按下Enter键为止。在接受的同时显示到屏幕上,并且识别Ctrl-C键,也处理DOS编辑器

示例代码:

;输出hello world
;data数据段定义
data segment
  string db 'hello world','$' ;切忌串结束符$
data ends

;代码段定义
code segment
;程序开始
start:
  mov ax,data  ;将数据段段地址装入AX寄存器
  mov ds,ax ;将数据段段地址通过通用寄存器AX装入DS
  mov dx,offset string ;将串的段内地址装入DX
  mov ah,09h ;调用DOS的09H号功能,传入参数DS:DX=串地址,'$'结束字符串
  int 21h
  mov ah,4ch ;调用DOS的4CH号功能,带返回码结束,返回码存在于AL
  int 21h
code ends  ;代码段定义结束
end start  ;程序结束

运行结果如下:

2、字符串的输入

这里用到了上面DOS中断的0AH功能
可以将一段字符串读入并显示在屏幕上,代码如下

DATAS SEGMENT
    buffer db 60;定义缓冲区长度
           db ? ;预留实际输入字符个数的技术单元
           db 60 dup(?);设DS已是buffer的段基址
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    mov ah,0ah;接受一串字符
    lea dx,buffer
    int 21h
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
汇编语言之字符(串)的输入输出 这一篇文章主要是给刚接触汇编的初学者准备的,尤其是在学校里刚刚开始学习汇编,又被作业搞得一头雾水的小伙计。这里主要是介绍如何利用调用DOS功能来实现字符(串)的输入/输出 这里我们主要的实验平台就是: Masm for Windows 集成实验环境 2015 字符的输出 在DOS中可以调用2/6号功能号都可以实现单字符的打印,这里我们以2号功能号做例子 假如我们要输出字符‘A’ MOV DL,41... 阅读详情

相关推荐

【8086汇编】字符串逆序的实现,附代码

目录引言题目程序思想程序例程程序结果改进思路 引言     之前有本科的同学需要做一个汇编程序,简单补了补发现自己会嘻嘻嘻。 题目     题目:从键盘输入任一字符串(字符数>1),在下一行以相反的次序显示出来。     如:输入字符串123abc     在下一行显示cba321 程序思想     字符

sika_deer的博客 4617

汇编语言字符与字符串的输入与输出

汇编语言字符与字符串的输入与输出,微机原理与接口技术

qq_60511652的博客 7573

【汇编语言】DOS系统键入显示器上显示

选择一个适合您的汇编语言开发环境,例如NASM(Netwide Assembler)或MASM(Microsoft Macro Assembler)。使用适当的汇编语言编译器将源文件汇编为可执行文件。具体的编译命令会根据您选择的开发环境而有所不同。在DOSBox模拟器的显示器上,您可以连续按下三个'8'键,然后屏幕上将显示"good number"。同样,链接命令会根据您的开发环境而有所不同。请注意,这是一个简单的示例,可能需要根据您使用的汇编语言和开发环境进行适当的修改。创建一个新的汇编源文件,例如。

走向CTO的路上... 993

汇编:常用的输入与输出

号功能等待接收一个字符串,在遇到回车后输入并回显。缓冲取要求第一个字节为缓冲区的。使用int 21h中断的。使用int 21h中断的。使用int 21h中断的。使用int 21h中断的。,第二个字节在接收到字符串后将放置。中存放要输出字符的ascii码。号功能可以在屏幕输出一个字符,为要输出字符串的地址,字符串以。存放输入字符的ascll码。为一个存储字符串的缓冲区。

hello, coder~ 5252

数字化车间智能排产调度挑战赛(一)—— 数学模型

科大讯飞——数字化车间智能排产调度挑战赛。

Lyyyp的博客 5649

【原创工具 | OpenCV-CamCalib】一个基于 OpenCV 的自动化相机数据采集和标定程序

一个基于OpenCV的自动化相机数据采集和标定程序。系统内置相机地址默认为 0。

XavierJ的博客 2697

汇编基础知识之输入输出

最近在学习汇编程序,但输入输出是我遇到的第一个难题,这里就简单讲诉一些汇编的基本输出输出字符串、字符、输出数字等知识,仅供大家学习。这只是一些基础知识,汇编高手亦可以温习一些基础的输入输出知识. 一.输出字符串 下面是调用9号功能输出字符串"Hello World"的代码。 DATAS SEGMENT ;输出的字符串 13回车 10换行 $结束标志(\0) Input DB

杨秀璋的专栏 1万+

深入STM32 USB OTG FS:从官方MSC例程到实战双存储设备移植全记录

本文详细解析了STM32 USB OTG FS在双存储设备开发中的实战应用,从协议栈底层机制到SD卡/SPI Flash同步挂载的实现。通过优化SDIO接口和SPI Flash驱动,结合USB MSC类的关键实现,提供了完整的解决方案和性能优化策略,适合嵌入式开发者参考。

weixin_28366475的博客 368

汇编语言编程:数据处理实验

给定课程得分表数据(二维数组),编写菜单程序。输入“0”,输出课程平均分;输入“1”,计算各位同学总分和排名;汇编语言的键盘输入和屏幕输出的形式分为单个字符数据的输入输出和字符串数据的输入输出。键盘输入一串字符串可以利用DOS的10(或0Ah)号功能调用来实现。单个字符输出时将输出字符的ASCII码放在DL寄存器中。键盘输入的数据以ASCII码形式存储在AL寄存器中。单个字符输入利用DOS的1号功能调用实现。单个字符输出利用DOS的2号功能调用实现。字符串输出可由DOS 9号功能调用来实现。

lllllaaaa_的博客 325

从稀疏表示到低秩表示(一)

确定研究方向后一直在狂补理论,最近看了一些文章,有了些想法,顺便也总结了representation系列的文章,由于我刚接触,可能会有些不足,愿大家共同指正。 从稀疏表示到低秩表示系列文章包括如下内容: 一、 sparse representation 二、 一、 sparse representation 1  sparsity  一个线性表示解决的问题如下图所示:

彼岸花 3万+

【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法

文章目录 一、亚稳态 (1)跨时钟域的亚稳态现象 (2)亚稳态的多径传输 二、跨时钟域处理 2.1 单bit信号跨时钟域处理 (1)单径两级触发器同步器 (2)相位控制 (3)多径与多级寄存器同步链 (4)组合逻辑信号的同步化 (5)快时钟域信号的同步化 2.2 多bit信号的跨时钟域处理 (1)异步FIFO (2)双口RAM.........

毕淑敏曾说过:“我不相信命运,我只相信自己的手;我不相信手掌上的纹路,但我相信手指加上手掌的力量”。在这个快节奏的社会,只有自己能力不足才会被卷,踏踏实实沉下心来学一些技术,及时记录,方便以后复盘。 2万+

DOS功能调用——单个字符及字符串的输入输出

DOS系统功能调用步骤: 1. AH <- 功能号 2.指定寄存器放入该功能所要求的入口参数 3.执行int 21H 4.分析出口参数单字符输入输出 01h键盘输入 AL=输入字符 02h显示器输出 DL=输出字符 07h直接控制台输入(无回显) AL=输入字符 08键盘输...

weixin_34062469的博客 8849

从M350 RTK到E-Port:解锁大疆无人机多负载协同与PSDK V3开发新范式

本文深入解析了大疆M350 RTK无人机搭载的E-Port智能接口与全新的PSDK V3开发套件,如何共同实现多负载协同作业的范式转变。E-Port集成了供电与高速数据总线,而PSDK V3通过统一的设备模型与服务机制,大幅降低了第三方负载的开发门槛与集成复杂度,使构建如智能巡检等复杂空中作业系统变得更加高效和标准化。

3c4x5z6v7b的博客 166

8086汇编:输入输出数字、字符、字符串功能

初学汇编,可能一时难以习惯这种任何事情都要“亲力亲为”的方式。就拿输入输出来说,高级语言一个函数就可以搞定的事情,在汇编中却不是那么容易的。下面简单介绍下8086汇编输入输出数字和字符串的问题。 1、输入输出字符串 2、输入输出数字

Tao_Shimmer的博客 2万+

一份针对零基础学习AI Agent详细学习计划

以下是针对零基础学习者制定的AI Agent详细学习计划,结合最新行业动态和实用资源推荐,帮助你从入门到进阶系统掌握核心技能

sexy19910923的博客 1904

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 554

【ARM汇编】字符串大小写转换

用汇编处理字符串的大小写转换,关键是学会使用“%C”和ldrb来查看或获取字符。 汇编语言主要是使用各种寻址方式来处理数据,所以要熟悉各种寻址方式来实现你想要的操作,这里使用到的是前索引寻址方式。 分支结构是各种算法必备的结构体,本质上就是CMP和B的灵活运用,只有多调试和练习才能熟练掌握。

GRT609的博客 3990

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[汇编] 汇编"HelloWorld!"——字符/字符串的输入输出

目录0. HelloWorld1. 字符输入输入2. 字符串输入输出 0. HelloWorld ;输入输出一个字符串 DATA SEGMENT ;数据段代码 DATA ENDS STACK SEGMENT ;堆栈段代码 STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK,...

qq_43435084的博客 1969

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汇编字符串查找

输入字符串和关键字然后查找,有相同的输出“Match!”,没有相同的输出“No Match” copy大佬的程序然后魔改的,希望大佬不要介意。 汇编的 “;”是区别注释,;后面的全是注释使用时可以删除。 DATAS SEGMENT;DATAS我感觉像一个结构体名,实际上是段名,SEGMENT是声明段此处可以参考 汇编segment伪指令_星河Dac-优快云博客_汇编segment INPUT1 DB 13,10,'Please input a string:','$';DB定义操...

weixin_47655735的博客 3350

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汇编实验之字符、字符串

题目描述:   编一个程序,实现从键盘输入一个长度不超过300个字符的串(以回车键作为输入结束),然后在下一行以倒序输出所输入的字符。 DATAS SEGMENT string db 301 dup('$') ctrl db 0ah,0dh,'$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV

noveto的博客 4127

汇编 字符串输入输出 源代码及详细解释

DATAS  SEGMENT      ;segment和ends是成对使用的伪指令,功能是定义一个段,这是在写可被编译器编译的汇编程序时 ;必须使用的,sement是段的开始,ends是结束 buf1   DB "Hello, $" BBB    DB 31    ;表示缓冲区能容31个字符       DB ?       DB 31 DUP (?) ;这里的31是你在数据段开辟的空

以现在的努力程度之低,谈狗屁的未来,屎的梦想!!! 9692

汇编语言 输入一串字符到缓冲区,输出输入的字符串,并输出统计字符串的字符个数,还有输出字符串最后一个字符

题目:从键盘输入一串字符串到缓冲区,要求第一行输出输入的字符串,第二行输出字符串的长度,第三行输出字符串的最后一个字符。 data segment str1 db 0dh,0ah,'input:','$'; str2 db 0dh,0ah,'the number of string is:','$' str3 db 0dh,0ah,'the last letter is:','$' length db 0; buf db 30; db

zy_li233的博客 8168

用汇编实现数字转化为字符串的函数itoa

对于熟悉C语言的大家来说说,itoa这个函数大家一定不会陌生。itoa是广泛应用的非标准C语言扩展函数,它的功能是:将任意类型的数字转换为字符串。 为了更加清楚地让我们知道,如何使用汇编语言来实现这个函数,下面先以用C语言自己实现一个itoa函数,再来说明使用汇编语言实现方法及思想。因为无论是用C语言还是使用汇编语言,其实现思想和方法都是一样的,只是描述的语言不同。但是我们都比较熟悉C语

ljianhui的专栏 1万+

字符串的输入输出 汇编

汇编之字符串的输入输出 一直只是认为知道汇编是怎么一回事,没真正的好好写过,现在再来好好了解一点 DATAS SEGMENT     ENT DB 13,10,'$' ;用于输出回车符     S_SIZE DB 100 ;输入字符串的最大长度     S_LEN DB ? ;实际输入字符的长度     STRING DB 101 DUP('$') DATAS

SVKING的专栏 802

汇编:显示字符串

汇编:显示字符串前言源代码利用库函数库函数实现 前言 DOS功能调用 DOS利用软件中断方式提供系统功能。 中断调用指令是“INT N”,其中N表示调用的中断号、即中断0~中断255号。 DOS系统调用一般有如下4个步骤: (1)在AH寄存器中设置系统功能调用号 (2)在指定寄存器中设置入口参数 (3)用中断调用指令(INT N)执行功能调用 (4)根据出口参数分析功能调用执行情况 DOS功能调用...

antRain的博客 7154

ARM汇编 字符串拷贝

萌新第一次发帖,大佬请轻喷!!! 本帖主要为记录ARM实验课上所写的一个实验,实验要求如下: 废话不多说,直接上代码 = = import mycompare AREA mymemmove,CODE,READONLY export mymemmove ;r0为源地址,r1为目的地址,r2为字节数 mov r3,r0 ;将源地址保存到r3 mov r4,r2,lsr ...

weixin_43981692的博客 4274
上一篇: 汇编环境配置以及代码编写调试
下一篇: [已解决]Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/Strin
code_AC
博客等级 码龄12年 255粉丝 109原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值