zoukankan      html  css  js  c++  java
  • 王爽 汇编 检测点 14.2

    1.程序说明

      编程,用加法和移位指令计算(ax)=(ax)*10.

      提示, (ax)*10=(ax)*2+(ax)*8.

    2.程序描述

      因为看其他人的答案,都发现不是很完美,没有考虑进位,最后答案会有很大的偏差.所以自己写下自己的想法

      (1) 如果ax足够大,那么ax*10的结果在ax中就无法保存.我们必须用另一个寄存器存储高位的值.

      用dx存储ax*2的值  bx存储进位.    

    3.代码

     1 assume cs:code
     2 code segment
     3     start:
     4         mov ax,5345h
     5         mov bx,0    ;bx存储ax左移的进位值
     6         mov dx,ax    ;bx存储最开始的ax值
     7         ;ax*8 将ax左移3位,因为每左移一次都可能进位,所以选择用循环
     8         mov cx,3
     9     s1:    
    10         shl bx,1    ;先将高位*2,再将低位*2
    11         shl ax,1
    12         adc bx,0    ;将低位进位值加到高位
    13         loop s1
    14         
    15         shl    dx,1    ;计算 ax*2
    16         adc bx,0
    17                     
    18         add ax,dx    ;ax*8+ax*2 
    19         adc bx,0
    20             
    21         s:            ;无限循环,防止退出
    22             jmp short s
    23         mov ax,4c00h
    24         int 21h
    25 code ends
    26 end start

    4.结果 

       5345h*10 最后的结果就是340B2h,bx存储高位,ax存储低位.

  • 相关阅读:
    WebApi整合Unity容器实现IOC编程
    用户登录
    Mvc验证码
    代理模式 实现aop
    装饰器模式,实现aop
    Redis
    图片缩放
    递归操作文件
    几种文件的读写方式
    C#WebApi自动生成文档
  • 原文地址:https://www.cnblogs.com/Triomphe/p/8694754.html
Copyright © 2011-2022 走看看