AHU 汇编 实验四

news2024/11/17 2:55:57

  • 实验名称:实验四 两个数的相乘

  • 实验内容:

用子程序形式编写:

A*B:从键盘输入a和b,计算A*B,其中乘法采用移位和累加完成

  • 实验过程:

源代码:

data segment

   mul1 db 16,?,16 dup(?)

   mul2 db 16,?,16 dup(?)

   buff1 db 'Please input mul1: $'

   buff2 db 'Please input mul2: $'

   buff3 db 'The consequense is : $'

data ends

code segment

   assume cs:code,ds:data

main proc far                   ; main program

   mov ax,data

   mov ds,ax

   push ds

   xor ax,ax                    ;push ds and es and ax=0

   call tips1                   ;提示用户输入第一个数

   call input1                  ;在缓冲区接收

   call tips2                   ;提示用户输入第一个数

   call input2                  ;在缓冲区接收

   lea si,mul1+2                ;开始将第一个数10进制转换成2进制

   call dtob      

   push bx                      ;压栈保存第一个数的2进制

   lea si,mul2+2

   call dtob                    ;开始将第一个数10进制转换成2进制

   mov dx,bx                    ;dx中装的是第二个数的二进制

   pop bx                       ;bx中装的是第一个数的二进制

   call multiple                ;调用乘法子程序

   call tips3                   ;提示结果输出

   call btod                    ;将结果的二进制转换成十进制输出

   mov ah,4ch

   int 21h

   ret

   main endp

;-----------------------------------------------------------



tips1 proc near

   mov dx,offset buff1

   mov ah,9

   int 21h

ret

tips1 endp

;------------------------------------------------------------



input1 proc near

    lea dx,mul1

    mov ah,0ah

    int 21h

    mov dl,13

    mov ah,2

    int 21h

    mov dl,10

    mov ah,2

    int 21h

ret

input1 endp

;--------------------------------------------------------------



tips2 proc near

mov dx,offset buff2

   mov ah,9

   int 21h

ret

tips2 endp

;-----------------------------------------------------------



input2 proc near

    lea dx,mul2

    mov ah,0ah

    int 21h

    mov dl,13

    mov ah,2

    int 21h

    mov dl,10

    mov ah,2

    int 21h

ret

input2 endp

;--------------------------------------------------------------





dtob proc near

  mov bx,0

getnum:

  mov al,byte ptr [si]     ;用al保存第一个字符

  sub al,30h

  jl  exit1

  cmp al,9

  jg  exit1

  cbw

  xchg ax,bx

  mov dx,10

  mul dx

  xchg ax,bx

  add bx,ax

  inc si                  ;循环,如果遇到的不是0~9的数就自动跳出程序

  jmp getnum

exit1: ret

dtob endp





multiple proc near

   mov bp,0                ;用bp寄存器保存结果

start:

   shr dx,1                ;右移第二个乘数,判断CF的值,如果是1就进行加法操作,如果是0就继续右移

   jc addition

   shl bx,1                ;第一个乘数左移

   cmp dx,0                ;当第二个数为0是结束

   jz exit2

   jmp start

addition:

   add bp,bx               ;将相加结果保存在BP寄存器中

   shl bx,1

   jmp start

exit2 :ret

multiple endp



btod proc near

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

    mov cx, 1              ;计数器

    mov bl, 10             ;10作除数

div1:

    idiv bl              

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

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

    jz output

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

    inc cx

    jmp div1

output:

     pop dx               

     mov dl, dh            ;出栈输出余数

     add dl, 30h

     mov ah, 2

     int 21h

     loop output



    ret

btod  endp



tips3 proc near

   mov dx,offset buff3

   mov ah,9

   int 21h

ret

tips3 endp



code ends

end main

运行结果:

  • 实验小结:

这次的实验有一个很困惑我的地方就是我一开始弄错了,以为我们用户能用的寄存器只有AX,BX,CX,DX这四个,所以我一直拿缓冲区的内存当作一个寄存器来回使用,这对我进行数的操作造成了很大的不便,此外我的移位操作乘法,设计的很麻烦,一开始总是想用一个寄存器保存第二个乘数的1的位权,这就遇到了我上面说的寄存器不够的情况,后来在老师的帮助下,我改进了算法,只要判断右移的第二个乘数CF位是0,还是1,如果是1就把AX左移的结果加进来,AX的值无需保存,只要最后把结果放进BP寄存器就可以了。通过这次实验,我收获了很多。

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

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

相关文章

MySQL gh-ost DDL 变更工具

文章目录 1. MDL 锁介绍2. 变更工具3. gh-ost 原理解析4. 安装部署5. 操作演示5.1. 重点参数介绍5.2. 执行变更5.3. 动态控制 6. 风险提示 1. MDL 锁介绍 MySQL 的锁可以分为四类:MDL 锁、表锁、行锁、GAP 锁,其中除了 MDL 锁是在 Server 层加的之外&am…

解决达梦集成 JPA 时表和字段注释注解不生效的问题

前言 最近在做达梦数据库集成 JPA 时,发现使用的表注解和字段注解均未生效(MySQL、Oracle、PostgreSQL中均可以在建表时正常生成相应的注释),经过调试发现解决办法也很简单: 自定义方言类继承自org.hibernate.dialect…

Ubuntu 14.04:安装PaddlePaddle(Conda安装)

目录 一、PaddlePaddle 概要 二、PaddlePaddle安装要求 三、PaddlePaddle安装 3.1 安装 Anaconda3 3.2 创建Anaconda虚拟环境(python 3.8) 3.3 进入Anaconda虚拟环境 3.4 检测 Anaconda 虚拟环境配置是否符合PaddlePaddle安装要求 3.4.1 确认 py…

用链表实现顺序表的插入和删除操作(操作封装在函数中)

#include <iostream> using namespace std; struct node{int val;node * next; }; void print(node * head){if(headNULL ||head->nextNULL){cout<<"链表中已经无元素";return;}cout<<"打印列表:";node * phead->next;while(p){co…

开源好用的所见即所得(WYSIWYG)编辑器:Editor.js

文章目录 特点基于区块干净的数据 界面与交互插件标题和文本图片列表Todo表格 使用安装创建编辑器实例配置工具本地化自定义样式 今天介绍一个开源好用的Web所见即所得(WYSIWYG)编辑器&#xff1a; Editor.js Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它…

FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明

文章目录 简介FTPFTPSSFTP加密场景选择FTPS还是SFTPFTP、SFTP、FTPS区别、联系和具体使用场景如何使用FTP、SFTP和FTPSSSLTLSSSL和TLS区别和联系&#xff0c;以及使用场景SSL和TLS技术上的区别一些问题隐式的TLS&#xff08;FTPS/SSL&#xff09;或者显式的TLS&#xff08;FTPS…

【Datawhale学习笔记】从大模型到AgentScope

从大模型到AgentScope AgentScope是一款全新的Multi-Agent框架&#xff0c;专为应用开发者打造&#xff0c;旨在提供高易用、高可靠的编程体验&#xff01; 高易用&#xff1a;AgentScope支持纯Python编程&#xff0c;提供多种语法工具实现灵活的应用流程编排&#xff0c;内置…

蓝桥·算法双周赛|第七场分级赛——小白入门赛

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 数据结构帮助小白快速入门算法 &#x1f4…

【全志H616】1 --用orangepi控制硬件

【全志H616】1 --用orangepi控制硬件 本文介绍了如歌用orangepi 控制蜂鸣器&超声波模块&#xff0c;通过键盘输入1、2、3、4来控制转动角度舵机模块&#xff1b;同时还介绍了利用全志如何配置定时器&#xff1b;以及查看H616引脚状态的命令等… 超声波模块和舵机模块的讲解…

Python递归函数你用对了吗?

1.递归函数 递归函数&#xff1a;函数自己调用自己 2.需求 使用函数的方式&#xff0c;计算数字n的阶乘 # 5&#xff01; """ 5! 1 * 2 * 3 * 4 * 5 4! 1 * 2 * 3 * 4 3! 1 * 2 * 3 2! 1 * 2 1! 1综上可以总结出&#xff1a;n! n * (n - 1) "&qu…

案例分析篇02:软件架构设计考点之特定领域软件架构、架构评估、架构视图(2024年软考高级系统架构设计师冲刺知识点总结)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

鼠标在QTreeView、QTableView、QTableWidget项上移动,背景色改变

目录 1. 前言 2. 需求 3. 功能实现 3.1. 代码实现 3.2. 功能讲解 4. 附录 1. 前言 本博文用到了Qt的model/view framework框架,如果对Qt的“模型/视图/委托”框架不懂&#xff0c;本博文很难读懂。如果不懂这方面的知识&#xff0c;请在Qt Assistant 中输入Model/View…

[iOS]高版本MacOS运行低版本Xcode

Xcode 版本支持文档 目的&#xff1a; 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode&#xff0c;将外层目录名变更为Xcode_14.3.1&#xff0c;将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…

Docker基础教程 - 12 常用容器部署-Nginx

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 12 常用容器部署-Nginx 下面介绍一下常用容器的部署。可以先简单了解下&#xff0c;用到再来详细查看。 在 Docker 中部署 Nginx&#xff0c;并通过挂载方式将 Nginx 的配置文件和站点目录挂…

leecode算法二

滑动窗口/双指针 滑动窗口 得到K个黑块的最少涂色次数 滑动窗口法 方法一 方法二 水果成篮 二叉树 概念 中序遍历 前序遍历和后序遍历无非就是把result.add房价加在前面和后面。 层序遍历 广度优先算法 深度优先算法 线段树 我的日程安排表II

Day36:安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入

目录 Java-项目管理-工具配置 Java-三方组件-Log4J&JNDI Java-三方组件-FastJson&反射 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用…

[Unity3D]--更换天空盒子

我们原来的天空盒子是这样的。 感觉不是特别满意&#xff0c;想换一个更好看的。 去资源商店找个好看的 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 例如这个 然后在Window>Rendering>Lighting里的环境选项里更换材质 更换&#xff1a; ​ …

SpringBoot注解--08--注解@JsonInclude

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JsonInclude注解是jackSon中最常用的注解之一&#xff0c;是为实体类在接口序列化返回值时增加规则的注解 1.JsonInclude用法2.JsonInclude注解中的规则有 案例需求…

卷积神经网络CNN(一篇文章 理解)

目录 一、引言 二、CNN算法概述 1 卷积层 2 池化层 3 全连接层 三、CNN算法原理 1 前向传播 2 反向传播 四、CNN算法应用 1 图像分类 2 目标检测 3 人脸识别 六、CNN的优缺点 优点&#xff1a; 1 特征提取能力强 2 平移不变性 3 参数共享 4 层次化表示 缺点…

机器学习-04-分类算法-01决策树案例

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法开篇与决策树部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…