AHU 汇编 实验六

一、实验名称:实验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得到余数,然后把余数压栈最后输出。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社交革命的引领者:探索Facebook如何改变我们的生活方式

1.数字社交的兴起 随着互联网的普及&#xff0c;社交媒体成为我们日常生活的重要组成部分。Facebook作为其中的先驱&#xff0c;从最初的社交网络演变成了一个拥有数十亿用户的全球化平台。它不仅改变了我们与世界互动的方式&#xff0c;还深刻影响了我们的社交习惯、人际关系以…

数据结构:树和二叉树

树的概念 1.树是一种非线性的数据结构。它是由n个有限节点的集合。 2.树分为根节点和子树。根节点没有前驱节点。 3.树的子树是由一个个子树组成&#xff0c;它们可以看作一个个集合。每个集合下面又有集合。 因此&#xff0c;树是递归定义的。 树形结构中&#xff0c;子树…

搜索引擎SEO策略介绍

baidu搜索&#xff1a;如何联系八爪鱼SEO baidu搜索&#xff1a;如何联系八爪鱼SEO baidu搜索&#xff1a;如何联系八爪鱼SEO 第一、 关键词的选择策略&#xff1a; 1、门户类的网站关键词选择策略&#xff1a; 网站每个页面本身基本都包含有关键词&#xff1a;网站拥有上百…

嵌入式数据库SQlite3-进阶篇

嵌入式数据库sqlite3 - HQ 文章目录 嵌入式数据库sqlite3 - HQ[toc] 嵌入式数据库sqlite3【进阶篇】数据库准备order子句Where 子句与逻辑运算符语法实例 group by子句having子句举例 函数SQLite COUNT 函数SQLite MAX 函数SQLite MIN 函数SQLite AVG 函数SQLite SUM 函数SQLit…

Qt 使用RAW INPUT获取HID触摸屏,笔设备,鼠标的原始数据,最低受支持的客户端:Windows XP [仅限桌面应用]

在开发绘图应用程序时&#xff0c;经常会需要读取笔设备的数据&#xff0c;通过对笔数据的解析&#xff0c;来判断笔的坐标&#xff0c;粗细。如果仅仅只是读取鼠标的坐标&#xff0c;就需要人为在应用程序端去修改笔的粗细&#xff0c;并且使用体验不好&#xff0c;如果可以实…

【C++】STL(五) Stack Queue容器

5、 stack容器 5.1 简介 ① stack是一种先进后出的容器&#xff0c;它只有一个出口。 ② 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为。 ③ 栈中进入数据称为&#xff1a;入栈 push ④ 栈中弹出数据称为&#xff1a;出栈 pop 5.2 常用接口 …

Fair Data Exchange:区块链实现的原子式公平数据交换

1. 引言 2024年斯坦福大学和a16z crypto research团队 论文 Atomic and Fair Data Exchange via Blockchain 中&#xff0c;概述了一种构建&#xff08;包含过期EIP-4844 blobs的&#xff09;fair data-markets的协议。该论文源自a16z crypto的暑期实习计划&#xff0c;与四名…

R语言tidycmprsk包分析竞争风险模型

竞争风险模型就是指在临床事件中出现和它竞争的结局事件&#xff0c;这是事件会导致原有结局的改变&#xff0c;因此叫做竞争风险模型。比如我们想观察患者肿瘤的复发情况&#xff0c;但是患者在观察期突然车祸死亡&#xff0c;或者因其他疾病死亡&#xff0c;这样我们就观察不…

KAFKA入门教程

目录 1.安装kafka 2.安装kafkamanager可视化工具 3.springboot整合kafka 1.pom导包 2.启动类和yml配置 3.代码演示 编写生产者&#xff1a; 消费者&#xff1a; 1.安装kafka 进入kafka官网下载对应版本kafka kafka官网地址&#xff1a;Apache Kafka kafka是使用Scal…

Kotlin 数据解析(Gson)

一、添加依赖 build.gradle.kts(:app) // gson数据解析implementation("com.google.code.gson:gson:2.8.6") 对象类&#xff1a; // 对象类 class Account {var uid:String "00001"var userName:String "Freeman"var password:String &quo…

Midjourney能让角色保持一致了

Midjourney发布新功能&#xff0c;网友直呼“不可思议”&#xff01; 现在你可以让生成的图像几乎保持角色一致&#xff0c;belike&#xff1a; 所有超级英雄长一个模样盯着你。 甚至动漫风、写实风等跨风格生成也同样适用&#xff1a; 保持同一风格&#xff0c;感jio配上文字…

【python】自动化工具Selenium与playwright去除webdriver检测

对这个世界如果你有太多的抱怨 跌倒了就不敢继续往前走 为什么人要这么的脆弱 堕落 请你打开电视看看 多少人为生命在努力勇敢的走下去 我们是不是该知足 珍惜一切 就算没有拥有 &#x1f3b5; 周杰伦《稻香》 # -*- coding:utf-8 -*- import timefrom s…

【C语言】如何规避野指针

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 目录 一、概念&#xff1a; 二、野指针成因&#xff1a; 2.1. 指针未初始化 2.2 指针越界访问 3. 指针指向的空间释放 三、如何规避野指针 3.…

Manacher 算法——Leetcode 5.最长回文子串

在了解之前&#xff0c;我们先要了解什么是回文串&#xff0c;什么是回文子串。 回文串和回文子串&#xff1a; 回文串是指一个字符串正序遍历和反向遍历结果相同的字符串。如 ABBA&#xff0c;正着读反着读结果是一样的。 有了回文串的概念&#xff0c;回文子串的概念也就显…

STM32的DMA搬运串口数据

简介&#xff1a; 最近在学习stm32的外设初始化过程中&#xff0c;学到DMA这个外设的时候&#xff0c;还是花费了不少时间&#xff0c;特此记录一下。 实验&#xff1a;配置DMA搬运UART1的数据 &#xff0c;串口调试工具给单片机发送数据&#xff0c;然后单片机回发给串口调试…

Python实现企业微信自动打卡程序二:跳过节假日,随机打卡时间,定时任务,失败通知

实现打卡时间随机范围 既然我们程序写完后需要定时执行&#xff0c;那定时执行打卡就会导致每次上班或下班打卡时都是同一时间&#xff0c;这并不好&#xff0c;为了避免被发现&#xff0c;每次打卡时间都是同一时间&#xff0c;这里我们优化程序&#xff0c;增加随机等待时间来…

CSS元素显示模式

CSS元素显示模式 定义&#xff1a;元素显示模式是指元素&#xff08;即标签&#xff09;以什么方式进行显示。 HTML元素分为块元素和行内元素 块元素 常见块元素 &#xff08;下列仅举出部分&#xff09; <h1>~<h6>、<p>、<div>、<ul>、<…

进程间通信——IPC(Linux)

进程间通信 前言一、管道1. 管道原理2. 匿名管道①理解匿名管道②创建匿名管道——pipe③模拟实现进程池——管道 3. 命名管道①理解命名管道②使用命名管道——mkfifo拓展 —— 日志俩无关进程通信 3. 小结①管道总结②拓展命令和接口 二、System V1. 共享内存①原理②使用共享…

9、设计模式之组合模式(Composite)

一、什么是组合模式 组合模式也成为整体部分模式&#xff0c;是一种结构型设计模式。它将对象组合成树形的层次结构&#xff0c;用来表示“整体-部分”的关系。通过组合模式&#xff0c;我们可以使用相同的方式处理单个对象和多个对象组合。 二、角色组成 组件&#xff08;Com…

Unity URP 如何写基础的几何着色器

这是使用几何着色器在点中心生成一个点并根据这个点把原本的面片分成三个三角形的操作。 对于几何着色器构造相对简单&#xff0c;网上的信息也相对较多&#xff0c;需要注意的点就是需要提供一个新的数据结构供几何着色器输出&#xff0c;因为几何着色器在顶点之后&#xff0…