AHU 汇编 实验六
一、实验名称:实验6 输入一个16进制数,把它转换为10进制数输出
- 实验目的:
培养汇编中设计子程序的能力
- 实验过程:
源代码:
data segmentbuff1 db 'Please input a number(H):$'buff2 db 30,?,30 dup(?),13,10buff3 db 'The consequent is:$'data endscode segmentassume cs:code,ds:datamain proc farpush dsxor ax,axpush axmov ax,datamov ds,axcall tips1 ;调用第一个字符串,提示用户输入call input1 ;调用程序,将数字输入进缓冲区保存call get4h ;将缓冲区的ASCII码转换成实际的二进制xor ax,axmov al,byte ptr[buff2+1] ;di用来计数(处理4位的十六进制)mov di,axlea si,buff2+2mov bx,0;mov bp,1000h ;dx位权call functioncall tips2 ;调用第三个字符串,显示结果call btod ;将缓冲区的二进制转换成10进制ASCII码输出mov ah,4chint 21hretmain endptips1 proc nearmov dx,offset buff1mov ah,9int 21hrettips1 endptips2 proc nearmov dx,offset buff3mov ah,9int 21hrettips2 endpinput1 proc nearlea dx,buff2mov ah,0ahint 21hmov dl,13mov ah,2int 21hmov dl,10mov ah,2int 21hretinput1 endpget4h proc nearlea si,buff2+2 ;将第二个字符串的首地址给si寄存器保存mov bx,0 ;用bx当作计数器和相对偏移量input:mov al,byte ptr[si+bx]cmp al,30hjl exitcmp al,39hjle dig ;>='0'&&<='9'cmp al,41h ;<'A',exit 判断输入的合法性jl exitcmp al,46h ;>='A'&&<='F' 如果是0~9,就进入dig,如果是A~F就进入hexjle hexcmp al,61hjl exitcmp al,66hjle shex ;如果是在a~f之间jmp exitdig:sub al,30hmov byte ptr[si+bx],al ;原来的缓冲区位置存放输入的真实数值jmp exithex:sub al,37h mov byte ptr[si+bx],al ;原来的缓冲区位置存放输入的真实数值jmp exitshex:sub al,57h mov byte ptr[si+bx],al ;原来的缓冲区位置存放输入的真实数值jmp exitexit:inc blmov dl,buff2+1cmp bl,dl ;计数功能jz returnjmp inputreturn:retget4h endpfunction proc nearlea si,buff2+2 ;用si寄存器保存第二个字符串的首地址mov bx,0 mov bp,1000hxor ax,axstart0:mov al,byte ptr[si] ;内层循环,用cx计数start1:mul bp ;存在(DX,AX)mov cx,4ror bp,cl ;得到新的位权dec diadd bx,axxor ax,ax ;清零inc si ;下一个字符cmp di,0 ;结束je exit1 jmp start0exit1:retfunction endpbtod proc nearmov ax, bx ;把bp寄存器的值给axmov cx, 1 ;计数器mov bx, 10 ;10作除数xor dx,dxdiv1:idiv bx push dx ;保存ax/10后的结果,ah存放余数,al存放商cmp ax, 0 ;商为0则开始输出jz outputmov dx, 0 ;置余数为0,继续除inc cxjmp div1output:pop dx add dl, 30hmov ah, 2int 21hloop outputretbtod endpcode endsend main
实验运行结果:

- 实验小结:
本次实验,一开始我理解题意错误,以为是分开输出对应的BCD码,这提醒我们看清题意很重要。
在本次代码中,首先我们做一个输入提示:


然后我们把缓冲区输入的所有数,进行真实数值处理

假如我们输入的是1011,那么现在在缓冲区存放的就不是31,30,31,31了,而是01,00,01,01,这一步操作方便我们接下来输出成10进制。

这一步是将二进制数全部乘以它对应的位权,得到实际的十进制数值,方法就是,向左移动寄存器,将其乘以对应位权后保存下来。

这一步就是,我们把最后的数分别输出,方法就是除以10得到余数,然后把余数压栈最后输出。
这是本学期最后一次汇编实验课,但是整体感觉自己的汇编编程能力,还有很多不足,平时还是应该要多上机实验。
相关文章:
AHU 汇编 实验六
一、实验名称:实验6 输入一个16进制数,把它转换为10进制数输出 实验目的: 培养汇编中设计子程序的能力 实验过程: 源代码: data segmentbuff1 db Please input a number(H):$buff2 db 30,?,30 dup(?),13,10buff3 …...
Linux的输出、输入重定向和管道
目录 输出重定向 输入重定向 < << 管道操作 输出重定向 当我输⼊⼀个命令之后,回⻋,命令产⽣了结果,结果默认是输出到屏幕上的。 默认情况,⽆论⼀个命令执⾏正确与否,结果都会默认输出到屏幕上。 在有…...
java-新手笔记(枚举)
枚举(Enumeration)是一种特殊的类,用于表示固定数量的常量值。 枚举类型使得代码更加清晰,易于维护,同时也增加了类型安全。 这边使用一个枚举封装重要数据 enum Day {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FR…...
Centos7 安装postgresql14后无法连接数据库
1、数据库服务器允许外部访问5432端口。 2、postgresql.conf 3、pg_hba.conf a、制定某个IP(192.168.0.107)访问 b、指定ip段访问 允许10.1.1.0~10.1.1.255网段登录数据库 host all all 10.1.1.0/24 trust c、指定全网访问 host a…...
GaussDB(DWS)运维利刃:TopSQL工具解析
在生产环境中,难免会面临查询语句出现异常中断、阻塞时间长等突发问题,如果没能及时记录信息,事后就需要投入更多的人力及时间成本进行问题的定位和解决,有时还无法定位到错误出现的地方。在本期《GaussDB(DWS)运维利刃࿱…...
信息安全、网络安全以及数据安全三者之间的区别
随着信息技术的飞速发展,网络安全、信息安全、数据安全等词汇在平时出现的频率越来越高,尤其是数据安全,是大家都关心的一个重要话题。事实上,有很多人对网络安全、信息安全、数据安全的概念是区分不清的,下面由我帮大…...
初阶数据结构之---堆的应用(堆排序和topk问题)
引言 上篇博客讲到了堆是什么,以及堆的基本创建和实现,这次我们再来对堆这个数据结构更进一步的深入,将讲到的内容包括:向下调整建堆,建堆的复杂度计算,堆排序和topk问题。话不多说,开启我们今…...
架构师面试100问?
面试架构师时,需要考察广泛的知识领域,包括技术、架构设计、团队管理、沟通能力等方面。以下是一些可能的面试问题,涵盖了多个方面问题: 介绍一下你的技术背景和经验。你在之前的项目中扮演过哪些角色?你对微服务架构…...
visualization_msgs::Marker 的pose设置,map坐标系的3d box显示问题
3D框显示 3D框显示可以使用visualization_msgs::Marker::LINE_LIST或者LINE_STRIP,前者使用方法需要指明线的两个端点,后者自动连接相邻两个点。 姿态问题 网上看了一些,没有涉及到朝向设置,Pose.orientation默认构造为4个0 至…...
c语言:输入定制
输入定制 任务描述 输入数据是一大串数字,要求读取五个数,但要求你只处理其中的第1、3、5个数,输出这三个数的和。第一个数只读1位数,第二个数只读2位数,第三个数只读3位数,第四个数只读4位数,…...
Python批量提取Word文档表格数据
在大数据处理与信息抽取领域中,Word文档是各类机构和个人普遍采用的一种信息存储格式,其中包含了大量的结构化和半结构化数据,如各类报告、调查问卷结果、项目计划等。这些文档中的表格往往承载了关键的数据信息,如统计数据、项目…...
【Qt】四种绘图设备详细使用
绘图设备有4个: 绘图设备是指继承QPainterDevice的子类—QPixmap QImage QPicture QBitmap(黑白图片) QBitmap——父类QPixmapQPixmap图片类,主要用来显示,它针对于显示器显示做了特殊优化,依赖于平台的,只能在主线程中使用(UI线…...
区块链web3智能合约Solidity学习资源整理
简单说明: Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。 Solidity中文官方文档: ht…...
python学习、开发实用文档分享
今天给大家分享两个好用的关于python django框架使用的在线文档 Django中文在线文档: Django 文档 | Django 文档 | Django django rest framework 文档 1 - Serialization - Django REST framework中文站点 有开发和学习中遇到不会的, 或者需要学习的技能点直接去上面两个…...
Docker compose部署redis哨兵集群
Docker compose部署redis哨兵集群 安装Docker和docker-compose准备docker-compose文件redis exporter本地部署准备Redis配置文件ACL用户权限配置Linux内核参数优化启停Redis实例主从复制配置 环境准备: IP版本角色172.x.x.11RHEL 7.9master172.x.x.12RHEL 7.9repli…...
Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-1、线条平滑曲面(原始图形)
环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…...
有趣的数学 毕达哥拉斯定理
随便找个学生,让他举出一位著名的数学家——如果他能想到的话,他往往会选择毕达哥拉斯。如果不是,也许他想到的是阿基米德。哪怕是杰出的艾萨克牛顿,在两位古代世界的巨星面前也只能叨陪末座了。阿基米德是一位思想巨人࿰…...
理解记忆相关
foreach循环 在 Java 中,foreach 循环(也称为增强型 for 循环)是一种简洁的语法,用于遍历数组或集合(如 List、Set、Map 等)。以下是 foreach 循环的基本用法: 遍历数组: String[] …...
零基础学习JS--基础篇--使用对象
JavaScript 的设计是一个简单的基于对象的范式。一个对象就是一系列属性的集合,一个属性包含一个名和一个值。一个属性的值可以是函数,这种情况下属性也被称为方法。除了浏览器里面预定义的那些对象之外,你也可以定义你自己的对象。本章节讲述…...
DHCP中继实验(华为)
思科设备参考:DHCP中继实验(思科) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
