微机原理与接口技术习题1

本文介绍了如何使用移位运算而非乘法指令来解决微机原理与接口技术中的计算问题。具体展示了计算Z=10×X+Y/8的过程,通过将10分解为2的幂并结合左移和右移指令,实现了乘法和除法操作。程序中使用了汇编语言,包括加法、不带进位加法和移位指令,并给出了详细的步骤和流程图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微机原理与接口技术习题1


参考图书:《微机原理与接口技术(第三版)》洪永强
原题在书的125页,4-12
仅提供个人思路,可能解决方案不是很好,欢迎交流。

题目

  12.编写程序,不用乘法计算Z=10×X+Y/8,用移位运算。

分析

  ①首先这是一个简单的计算题,有加法、乘法、除法运算。题目要求不能使用乘法,使用移位代替乘法。所以只能使用加法、除法、移位。
  ②将乘法转换为移位。
    计算机内存储的是二进制数据,左移一位等同于做一次X2的运算。右移一位等同于做一次÷2的运算。
    但并不是完全等同,还要取决于所用的指令,涉及到溢出,循环移位等。
  ③假如10xX,有两种方法计算,一种是把X拆分成2的n1次方+2的n2次方+…还有一种方法是把10拆分成2的3次方+2的1次方。考虑的既有题目解题尽可能的简单,这里选择后一种方法。
  ④Y/8可以用除法,但是这里使用右移3位(2^3=8)速度更快。
  ⑤最后加法运算,得出结论。

流程图

流程图

需要用到的指令

  加法指令:
    1) 不带进位加法指令ADD(add)
    格式:ADD DEST, SRC
    功能:DEST←SRC+DEST
    2) 带进位加法指令ADC(add with carry)
    格式:ADC  DEST, SRC
    功能:DEST←SRC+DEST+CF
    ADC主要用于多字节加法运算中。

  移位指令:
    逻辑左移:SHL DEST,COUNT
    逻辑右移:SHR DEST,COUNT
    其中, DEST可用立即数以外的任何寻址方式; COUNT表示移位数, 其值或等于1, 或大于1,大于1时其值要先送到CL寄存器,再进行移位。

程序

;4-12  用移位不用乘法计算 Z=10*X+Y/8
DATA   SEGMENT;数据段
       X DW 90 ;假设是90
       Y DW 80 ;假设80
       Z DW 0  ;结果应该是910
DATA   ENDS     

STACKS SEGMENT;堆栈段 
STACKS ENDS      

CODE   SEGMENT;代码段  
       ASSUME CS:CODE,DS:DATA,SS:STACKS
START: MOV AX,DATA
       MOV DS,AX      
       MOV AX,STACKS
       MOV SS,AX       ;初始化

       MOV CL,3        ;移位数为3
       MOV AX,X
       SHL AX,1        ;X左移1位
       MOV BX,X
       SHL BX,CL       ;X左移3位
       ADD AX,BX       ;X*2+X*8
       MOV BX,Y      
       SHR BX,CL       ;Y右移3位
       ADD AX,BX       ;X*10+Y/8
       MOV Z,AX
CODE ENDS
     END START       
   

调试

  从emu8086中调出变量框,开始运行程序。
1
2
3
4
5
6
7
8
9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值