AHU 汇编 实验六

news2024/12/29 11:32:56

一、实验名称:实验6 输入一个16进制数,把它转换为10进制数输出

  • 实验目的:

培养汇编中设计子程序的能力

  • 实验过程:

源代码:

data segment

  buff1 db 'Please input a number(H):$'

  buff2 db 30,?,30 dup(?),13,10

  buff3 db 'The consequent is:$'

data ends

code segment

  assume cs:code,ds:data

main proc far

  push ds

  xor ax,ax

  push ax

  mov ax,data

  mov  ds,ax

  call tips1      ;调用第一个字符串,提示用户输入

  call input1     ;调用程序,将数字输入进缓冲区保存

  call get4h      ;将缓冲区的ASCII码转换成实际的二进制

  xor ax,ax

    mov al,byte ptr[buff2+1]                ;di用来计数(处理4位的十六进制)

    mov di,ax

    lea si,buff2+2

    mov bx,0;

    mov bp,1000h            ;dx位权

    call function

  call tips2      ;调用第三个字符串,显示结果

  call btod     ;将缓冲区的二进制转换成10进制ASCII码输出

  mov ah,4ch

  int 21h

  ret

  main endp





  tips1 proc near

   mov dx,offset buff1

   mov ah,9

   int 21h

ret

tips1 endp



tips2 proc near

   mov dx,offset buff3

   mov ah,9

   int 21h

ret

tips2 endp



input1 proc near

    lea dx,buff2

    mov ah,0ah

    int 21h

    mov dl,13

    mov ah,2

    int 21h

    mov dl,10

    mov ah,2

    int 21h

ret

input1 endp





get4h proc near

  lea si,buff2+2   ;将第二个字符串的首地址给si寄存器保存

  mov bx,0         ;用bx当作计数器和相对偏移量

input:

  mov al,byte ptr[si+bx]

  cmp al,30h

  jl exit

  cmp al,39h

  jle dig        ;>='0'&&<='9'

  cmp al,41h     ;<'A',exit     判断输入的合法性

  jl exit

  cmp al,46h     ;>='A'&&<='F'  如果是0~9,就进入dig,如果是A~F就进入hex

  jle hex

  cmp al,61h

  jl exit

  cmp al,66h

  jle shex      ;如果是在a~f之间

  jmp exit



dig:

  sub al,30h

  mov byte ptr[si+bx],al      ;原来的缓冲区位置存放输入的真实数值

  jmp exit



hex:

  sub al,37h    

  mov byte ptr[si+bx],al      ;原来的缓冲区位置存放输入的真实数值

  jmp exit



shex:

  sub al,57h    

  mov byte ptr[si+bx],al      ;原来的缓冲区位置存放输入的真实数值

  jmp exit





exit:

  inc bl

  mov dl,buff2+1

  cmp bl,dl                   ;计数功能

  jz return

  jmp input



return:ret

get4h endp



















function proc near

  lea si,buff2+2      ;用si寄存器保存第二个字符串的首地址

  mov bx,0           

  mov bp,1000h

  xor ax,ax

start0:

  mov al,byte ptr[si]      ;内层循环,用cx计数

start1:

  mul bp               ;存在(DX,AX)

  mov cx,4

  ror bp,cl             ;得到新的位权

  dec di

  add bx,ax

  xor ax,ax   ;清零

  inc si      ;下一个字符

  cmp di,0    ;结束

  je exit1   

  jmp start0



exit1:ret

function endp



btod proc near

    mov ax, bx             ;把bp寄存器的值给ax

    mov cx, 1              ;计数器

    mov bx, 10             ;10作除数

    xor dx,dx

div1:

    idiv bx              

    push dx                ;保存ax/10后的结果,ah存放余数,al存放商

    cmp ax, 0              ;商为0则开始输出

    jz output

    mov dx, 0              ;置余数为0,继续除

    inc cx

    jmp div1

output:

     pop dx               

     add dl, 30h

     mov ah, 2

     int 21h

     loop output



    ret

btod  endp



code ends

end main

实验运行结果:

  • 实验小结:

本次实验,一开始我理解题意错误,以为是分开输出对应的BCD码,这提醒我们看清题意很重要。

在本次代码中,首先我们做一个输入提示:

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

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

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

这一步就是,我们把最后的数分别输出,方法就是除以10得到余数,然后把余数压栈最后输出。

这是本学期最后一次汇编实验课,但是整体感觉自己的汇编编程能力,还有很多不足,平时还是应该要多上机实验。

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

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

相关文章

PytorchAPI的使用及在GPU的使用和优化

API 调用API&#xff1a;和手动实现的思路是一样的。#1&#xff0c;#2这两个步骤是通用的步骤&#xff0c;相当于建立一个模型&#xff0c;之后你具体的数据直接丢进去就行了。只需要按着这样的样式打代码就行&#xff0c;死的东西&#xff0c;不需要你自己创造。 import torc…

力扣串题:反转字符串

特殊思路&#xff1a;k的重新赋值&#xff1a;当再加就超过字符串的长度时&#xff0c;需要把k变为字符串的剩余长度&#xff0c;不必理会当剩余长度介于k和2k之间的部分 char* reverseStr(char* s, int k) {for(int i0;i<strlen(s);ii2*k){kik>strlen(s)? strlen(s)-i…

三维卡通数字人解决方案,支持unity和Maya

企业对于品牌形象和宣传手段的创新需求日益迫切&#xff0c;美摄科技凭借其在三维卡通数字人领域的深厚积累&#xff0c;推出了面向企业的三维卡通数字人解决方案&#xff0c;帮助企业轻松打造独具特色的虚拟形象&#xff0c;提升品牌影响力和市场竞争力。 美摄科技的三维卡通…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

汇总全网免费API,持续更新(新闻api、每日一言api、音乐。。。)

Public&FreeAPI 网址&#xff1a;apis.whyta.cn &#xff08;推荐&#xff09; UomgAPI 网址&#xff1a;https://api.uomg.com 教书先生 网址&#xff1a;https://api.oioweb.cn/ 山海API https://api.shserve.cn/ 云析API铺 https://api.a20safe.com/ 韩小韩…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

AI_寻路系统_基本寻路

学习笔记&#xff0c;仅供参考&#xff01; 1、创建了一个新的第三人称项目&#xff0c;重命名为navsystem1. 2、将使用 寻路网格体边界体积&#xff08;Navigation Mesh Bounds Volume&#xff09; 来指定关卡中需要生成寻路的区域。代理将使用此信息在关卡中到达目的地。搜索…

浏览器同源策略及跨域问题

同源策略&#xff1a;同源策略是一个重要的安全策略&#xff0c;它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。 同源策略的作用&#xff1a;保护浏览器中网站的安全&#xff0c;限制ajax只…

汽修门店管理系统,打造高效汽修服务【汽修店软件管理系统】

在汽车后市场&#xff0c;汽修门店的运营效率直接影响着客户的满意度和店铺的利润。为了提升服务质量和工作效率&#xff0c;越来越多的汽修店开始引入汽修门店管理系统。那么&#xff0c;如何搭建汽修店软件管理系统&#xff0c;汽修门店管理系统怎么使用。 首先&#xff0c;我…

python基础——元组【特点,创建,常见操作方法:index,len,count】

&#x1f4dd;前言&#xff1a; 上一篇文章python基础——列表讲解了关于列表的先关知识&#xff0c;还介绍了很多列表的常见操作方法&#xff0c;这篇文章我们就基于上篇文章带大家认识的有关序列的知识&#xff0c;继续讲解python中另一种常见的数据容器——元组&#xff1a;…

(学习日记)2024.03.12:UCOSIII第十四节:时基列表

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

分布式与集群,二者区别是什么?

&#x1f413;分布式 分布式系统是由多个独立的计算机节点组成的系统&#xff0c;这些节点通过网络协作完成任务。每个节点都有自己的独立计算能力和存储能力&#xff0c;可以独立运行。分布式系统的目标是提高系统的可靠性、可扩展性和性能。 分布式服务包含的技术和理论 负…

Linux学习笔记:什么是文件描述符

什么是文件描述符 C语言的文件接口文件的系统调用什么是文件描述符,文件描述符为什么是int类型?为什么新打开的文件的文件描述符不是从0开始? 文件描述符 fd (file descriptor) C语言的文件接口 当时学习C语言的时候,学习了文件接口 具体可以查看之前的文章: 链接:C语言的文…

Elasticsearch:从 Java High Level Rest Client 切换到新的 Java API Client

作者&#xff1a;David Pilato 我经常在讨论中看到与 Java API 客户端使用相关的问题。 为此&#xff0c;我在 2019 年启动了一个 GitHub 存储库&#xff0c;以提供一些实际有效的代码示例并回答社区提出的问题。 从那时起&#xff0c;高级 Rest 客户端 (High Level Rest Clie…

DP-不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1提…

Unity URP 如何写基础的曲面细分着色器

左边是默认Cube在网格模式下经过曲面细分的结果&#xff0c;右边是原状态。 曲面细分着色器在顶点着色器、几何着色器之后&#xff0c;像素着色器之前。 它的作用时根据配置信息生成额外的顶点以切割原本的面片。 关于这部分有一个详细的英文教程&#xff0c;感兴趣可以看一…

3.15号arm

汇编语言 1. 汇编语言的组成 汇编文件中由伪操作、伪指令、汇编指令以及代码注释这几部分组成 伪操作&#xff1a; ARM的汇编中伪操作以.为前缀&#xff0c;所有的伪操作不占用内存空间&#xff0c;编译汇编时告诉编译器怎么编译当前文件&#xff0c;主要用来修改汇编内…

如何本地部署SeaFile文件共享服务并实现无公网IP访问内网本地文件

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 现在我们身边的只能设备越来越多&#xff0c…

C++语法、Linux命令查询网站

文章目录 1.cplusplus2.cppreference3.Linux命令查询网站 1.cplusplus 网址&#xff1a;https://legacy.cplusplus.com/ 2.cppreference 1.cppreference中文网站&#xff1a;https://zh.cppreference.com/w/首页 2.cppreference英文原站&#xff1a;https://en.cppreference…

最新潮乎盲盒系统源码,附搭建教程

搭建方法 宝塔创建网站&#xff0c;上传后端程序到根目录&#xff0c;在.env修改数据库账号密码 上传数据库&#xff0c;伪静态thinkphp 运行目录public PHP扩展安装下面的 禁用函数先禁用下面那个&#xff0c;就可以了 前端是uniapp 后台admin 禁用函数putenv、 扩展fileinfo…