汇编语言功能用循环累加实现乘法

 更新时间:2021年11月04日 15:19:24   作者:LyncDwight  
这篇文章主要为大家介绍了汇编语言实现功能,使用用循环累加来实现乘法,文中通过几个问题实例分析,来为大家进行详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助

问题1:编程计算2的2次方,结果存在ax中

分析:用2+2实现

assume cs:code 
	code segment
		mov ax,2
		add ax,ax 
		;实现程序的返回
		mov ax,4c00h
		int 21h
	code ends
end

问题2:编程实现2的12次方

分析:用loop实现

assume cs:code
	code segment
		mov ax,2		
		mov cx,11	;设置循环次数,只需相加11次
		s:add ax,ax
		loop s
 		mov ax,4c00h
		int 21h
	code ends
end

问题3:编程实现123*236,结果存在ax中

分析:用236相加123次的计算次数比较少,节约计算资源

assume cs:code
	code segment 
		mov ax,236
 		mov cx,122
		s:add ax,ax
		loop s
 		mov ax,4c00h
		int 21h
	code ends
end

问题4:计算ffff:0006单元中的数乘以3,结果存储在dx中

分析:

1、判断数据是否能够存储

因为内存单元中存储的是字节型数据,范围在0~255之间,乘上8之后不会大于16位dx寄存器的存储范围0~65535

2、判断数据相加是否能够位数相同

内存单元是字节单元,如果用寄存器直接相加,数据的长度不一样,所以需要将寄存器变成8位,则只需要将高8位设置为0,用低8位相加即可

assume cs:code
code segment
	;设置地址指向为ffff:0006
	mov ax,0ffffh   ;字母开头的常量前面需要加0
	mov ds,ax
	mov bx,6	;ds:bx则为数据的指向 
	mov al,ds:[bx]
	mov ah,0
 	mov dx,0	;初始化寄存器中的内容
 	mov cx,3	;因为不是自身相加,所以需要3次
	s:add dx,ax
	loop s
 	mov ax,4c00h
	int 21h		;程序返回
 
code ends
end

问题5:计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中

分析:

1、运算的结果是否超出寄存器的范围

12个字节型数据的相加,结果不会超过65535

2、能否直接相加dx中的数据

8位的数据不能直接相加到16位的寄存器中,如果用低8位进行相加,结果可能会超出8位存储的范围,所以只能先将数据存放到16位的寄存器中,在与dx相加

assume cs:code
code segment
	mov ax,0ffffh
	mov ds,ax
	mov bx,0	;ds:bx指向ffff:0 
	mov dx,0 
	mov cx,12	;12次到ffff:b 
s:	mov al,ds:[bx]
	mov ah,0
	add dx,ax	;利用ax进行相同位数的相加
	inc bx 		;向后移动一个单元
	loop s 
	mov ax,4c00h
	int 21h
 
code ends
end

问题6:计算data段中第一组数据的3次方,结果保存在后面一组的dword单元中

分析:

1、需要利用一个子程序包装出计算的功能

2、同时需要两个寄存器分别保存和修改其中的内容

assume cs:code,ds:data
data segment
	dw 1,2,3,4,5,6,7,8
	dw 8 dup(0)
data ends 
code segment
start:	mov ax data
		mov ds,ax
		mov si,0		;ds:si指向第一组word单元
		mov di,16		;ds:di指向第二组dword单元 
		mov cx,8
s:		mov bx,ds:[si]
		call cube
		mov ds:[di],ax		;计算的结果低16位保存在ax中
		mov ds:[di+2],dx	;计算的结果高16位保存在dx中
		add si,2		;ds:si指向下一个word单元
		add di,4		;ds:di指向下一个dword单元
		loop s 
		mov ax,4c00h
		int 21h 
cude:	mov ax,bx
		mul bx
		mul bx
		ret
 
code ends
end start

以上就是汇编语言功能用循环累加实现乘法的详细内容,更多关于汇编语言循环累加实现乘法的资料请关注脚本之家其它相关文章!

相关文章

  • ARM体系下的GCC内联汇编教程详解

    ARM体系下的GCC内联汇编教程详解

    在操作系统级的编程中,有时候,C语言并不能完全的使用硬件的功能,这时候就需要嵌入一些汇编代码来实现功能。这篇文章主要介绍了ARM体系下的GCC内联汇编,需要的朋友可以参考下
    2020-02-02
  • 汇编中的数组分配和指针的实现代码

    汇编中的数组分配和指针的实现代码

    这篇文章主要介绍了汇编中的数组分配和指针的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言有关在屏幕区显示字符的四种方法(推荐)

    汇编语言有关在屏幕区显示字符的四种方法(推荐)

    这篇文章主要介绍了汇编语言有关在屏幕区显示字符的四种方法(推荐),每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 利用DOSBox运行汇编的详细步骤

    利用DOSBox运行汇编的详细步骤

    本文分步骤给大家介绍了利用DOSBox运行汇编,起初是利用VS2017进行配置,但后面运行好像有些问题,就想到用DOSBox,本文分步骤给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2022-03-03
  • UEFI开发实战用户交互界面使用说明VFR文件

    UEFI开发实战用户交互界面使用说明VFR文件

    这篇文章主要为大家介绍了UEFI开发实战用户交互界面使用说明VFR文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 汇编语言学习手把手的Debug教程

    汇编语言学习手把手的Debug教程

    这篇文章主要为大家分介绍了汇编语言学习的Debug教程内容,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    这篇文章主要介绍了汇编指令-状态寄存器、cmp、test、jz等指令详细说明,需要的朋友可以参考下
    2020-01-01
  • 汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作

    汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作

    这篇文章主要介绍了汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编程序 查表求平方的实现

    汇编程序 查表求平方的实现

    这篇文章主要介绍了汇编程序 查表求平方的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编语言之寄存器(详细介绍)

    汇编语言之寄存器(详细介绍)

    这篇文章主要介绍了汇编语言之寄存器(详细介绍),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-01-01

最新评论