汇编小作业(3) 十进制数的平方根

2023-11-13

用子程序结构编程:从键盘输入一个十进制数,对其开平方后分别将其平方根和余数以十进制数的形式显示。

DATA  SEGMENT                                
 SUM  DW  2 DUP(?)   
 BUF  DB  7 DUP(?)     
DATA  ENDS 
stack segment      ;定义栈段,保存div的余数
	dw 40 dup (?)
stack ends
                 
CODE  SEGMENT                
      ASSUME  CS:CODE,DS:DATA      
START:MOV  AX,DATA            
      MOV  DS,AX
      CMP  AL,0DH
      JE   OUTIT
      CALL DIB

OUTIT:MOV  AX,BX
      CALL SQUR
      MOV  SUM,CX
      MOV  SUM+2,AX
      MOV  AX,CX
      CALL  BID
      MOV  DL,','    ;显示‘,’
      MOV  AH,2          
      INT  21H
      MOV  AX,SUM+2
      CALL  BID     
      MOV  AX,4C00H          
      INT  21H
 
; 有符号的二进制数(即十六进制数)转换为十进制数并显示。这里采用另一种方法来进行数制的转换:
; 将要转换的数存入AX中,先用AX 中值除10,得的余数就是个位数;再用上次得的商除10,得的余数
; 就是百位数;再用上次得的商除10,得的余数就是千位数;依次得每位十进制数压栈,直到商为0; 然后又依次出栈到缓冲区,在缓冲区中得到由高到低位的顺序并用显示字符串方式显示结果。     
BID PROC  NEAR
    PUSH  BX      ;现场的保护
    PUSH  CX            
    PUSH  DX            
    PUSH  SI         
     LEA  SI,BUF
      OR  AX,AX
     JNS  PLA1   ;正数可直接转换
     NEG  AX     ;负数求补得绝对值
    MOV BYTE PTR [SI],'-';存‘-’
     INC  SI
PLA1:MOV  BX,10
     MOV  CX,0
REP2:MOV  DX,0
     DIV  BX
    PUSH  DX       ;余数压栈
     INC  CX       ;位数计数
      OR  AX,AX     
     JNZ  REP2     ;商不为0则循环
     REP3:POP  AX    ;依次出栈到缓冲区
     ADD  AL,30H  ;转换为ASCII码
     MOV  [SI],AL
     INC  SI
    LOOP  REP3      
  MOV  BYTE PTR [SI],'$';结束符
     LEA  DX,BUF   ;显示
     MOV  AH,9
     INT  21H
     POP  SI       ;现场的恢复
     POP  DX
     POP  CX
     POP  BX
     RET 
BID ENDP

; 键入十进制数转为十六进制数存在BX中。
; 从键盘输入的十进制数,实际上是得到十进制数字符的ASCII码,所以,首先要将十进制数字符
; 的ASCII码(30H~39H)转换为十进制数(09),再将其转换为十六进制数。
; 要将十进制数234转换为十六进制数,可用如下公式:234=((0*10+2)*10+3)*10+4完成。由于
; 计算机中的算术运算指令都是二进制数运算,所以,运算得的结果就是二进制数,即十六进制数。
DIB  PROC  NEAR        
     MOV  BX,0          
REP1: MOV  AH,1           
    INT  21H  
    SUB  AL,30H
    JL  EXIT          
    CMP  AL,9       
    JG  EXIT       
    CBW
    XCHG  AX,BX
    MOV  CX,10
    MUL  CX
    ADD  BX,AX   
    JMP  REP1
EXIT: RET
DIB  ENDP
     
; 将一个数开平方,平方根和余数分别存入SUM和SUM+2; 开平方的算法:N的平方等于N个自然奇数之和。N^2^=1+3+5+……+2N–1; 从这个数中依次减去奇数135、…,至被开方数小于下一个奇数为止,累计减去奇数的个数就是S的整数平方根。减完剩下的值就是余数。
SQUR PROC  NEAR
     PUSH  DX 
      MOV  CX,0      ; 初始化平方根的值
      MOV  DX,1      ; 自然奇数的首项送DX
REP1: CMP  AX,DX           
       JB  EXIT
      SUB  AX,DX
      INC  CX
      ADD  DX,2
      JMP  REP1
EXIT: POP  DX
      RET    
SQUR  ENDP 

CODE  ENDS
      END  START

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编小作业(3) 十进制数的平方根 的相关文章

  • 汇编JMP语句 IP值和偏移量的问题。问题如下,我想知道IP值是怎么变化的。还有8086一条指令占个几字节啊

    汇编JMP语句 IP值和偏移量的问题 问题如下 我想知道IP值是怎么变化的 还有8086一条指令占个几字节啊 2011 10 16 22 26 干物虫子 分类 汇编语言 浏览404次 1 在0624单元内忧一条二字节JMP SHORT OB
  • 使用Clang作为编译器 —— Assembling a Complete Toolchain

    装配一个完整的工具链 1 介绍 2 工具 2 1 Clang 前端 2 2 其他语言的语言前端 2 3 汇编器 2 4 链接器 3 运行时库 3 1 编译器运行时 Compiler runtime 3 2 原子库 Atomics libra
  • Linux系统调用 汇编 int 80h

    1 系统调用 在计算机中 系统调用 英语 system call 又称为系统呼叫 指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务 系统调用提供了用户程序与操作系统之间的接口 大多数系统交互式操作需求在内核态执行 如设备IO
  • 王爽汇编语言课程设计1

    一 实验要求 在屏幕输出实验七中的数据 二 设计思路 1 将实验七的程序编写成一个子过程finishing 在主程序中调用 可以获得实验七种指定格式的table段数据 设置es bx指向table段中第一行 2 创建一个数据缓存区buffe
  • C语言 cortex-A7核 点LED灯 (附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】)

    1 汇编实现 text global start start LED1点灯 gt PE10 RCC章节初始化 CC INIT 1 使能GPIOE组控制器 通过RCC MP AHB4ENSETR寄存器设置GPIOE组使能0x50000A28
  • win32汇编基础概念

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 似乎IP也是寄存器 但只有在CALL RET在中会默认使用它 其它情况很少使用到 暂时可以不用理会 EAX是WIN32 API 默认的返回值存放处 E
  • 逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移的学习

    逻辑左移时 最高位丢失 最低位补0 逻辑右移时 最高位补0 最低位丢失 算术左移时 依次左移一位 尾部补0 最高的符号位保持不变 算术右移时 依次右移一位 尾部丢失 符号位右移后 原位置上复制一个符号位 循环左移时 将最高位重新放置最低位
  • X64处理器架构

    X64处理器架构 翻译的windbg帮助文档 X64处理器架构 X64 架构是一个向后兼容的扩展的 x86 提供了和 x86 相同的 32 位模式和一个新的 64 位模式 术语 x64 包括 AMD 64 和 Intel64 他们的指令集基
  • linux汇编编译器:GAS和NASM的比较

    GAS即GNU AS汇编编译器 其属于AT T风格 我们常用的GNU的产品还有GCC G NASM是Linux平台下常用的汇编编译器 是intel风格的汇编编译器 MASM是Windows平台下的汇编编译器 也使用Intel风格 我们学80
  • 汇编符号语言

    CSDN话题挑战赛第1期 活动详情地址 第1期话题PK赛 参赛话题 汇编知识分享 话题描述 我们的计算机知识就像一座金字塔 底层是数学 上面是数字电路 然后是汇编 再往上是操作系统 网络 数据库 高级编程语言 框架等等 我们不可能精通这个金
  • windgb调试

    reference http hi baidu com lewutian blog item 191047882b9c399fa5c27261 html 调试前的必备工作 在开始调试前首先要做的工作是设置好符号 Symbols 路径 没有符
  • 汇编——寄存器的分类和功能

    在汇编中 个人感觉最重要的部分其实就是寄存器了 这次我们了解一下寄存器的分类和功能 先说一下寄存器是什么吧 其实就是一部分的空间 我们可以使用这些空间来存储内容 寄存器的空间都是16位的 80x86中 后来有增长 也就是1个字的空间 堆栈则
  • ARM常用汇编指令

    目录 一 汇编基本语法 1 汇编指令的最典型书写模式 二 常用汇编指令 1 push压栈指令 2 pop出栈指令 3 sub指令 4 add指令 5 movs数据传输指令 6 str指令 7 ldr指令 8 bl指令 9 MOVW指令 10
  • [荐]硕博经验——科研论文阅读与写作实战技巧

    又转自西电好网 http bbs xdnice com b99t378538 htm硕博经验 转来的 早知道就好了 少走很多弯路啊 该文从 举止优雅的猪 那里看见的 感觉很不错 不过我感觉到了博士才知道这些似乎有点晚了 或者是有不少人也不会
  • 北工大汇编——综合题(1)

    题目要求 统计字符数 从键盘输入一行字符 统计字母 空格 数字 其他宇符的个数 并显示 要求 提示输入一行宇符串 键盘输入宇符串 Enter 键结束输入 并换行显示结果 题目代码 DATAS SEGMENT 此处输入数据段代码 msg DB
  • ARM汇编快速入门

    本文主要分享如何快速上手ARM汇编开发的经验 汇编开发中常见的Bug以及Debug方法 用的Convolution Dephtwise算子的汇编实现相对于C 版本的加速效果三方面内容 前言 神经网络模型能够在移动端实现快速推理离不开高性能算
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • BFD库

    BFD库 2011 01 16 11 16 22 分类 LINUX 什么是 BFD Binary format descriptor 即二进制文件格式描述符 它是连接工具 ld 和二进制文件操作工具 bin util 实现对于目标文件操作的
  • 8086乘法指令MUL,IMUL

    对于加减指令来说CPU对有符号加减和无符号加减一视同仁 根据我们需要把它作为有符号的结果还是无符号的结果 但是乘除法指令区分有符号乘除和无符号乘除指令 无符号数乘法指令MUL MULtiply MUL OPRD OPRD可以用除立即数以外的
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看

随机推荐