汇编语言功能用循环累加实现乘法
发布时间:2021-11-08 21:17:06 所属栏目:教程 来源:互联网
导读:目录 问题1:编程计算2的2次方,结果存在ax中分析:用2+2实现问题2:编程实现2的12次方分析:用loop实现问题3:编程实现123*236,结果存在ax中分析:用236相加123次的计算次数比较少,节约计算资源问题4:计算ffff:0006单元中的数乘以3,结果存储在dx中1、
目录 问题1:编程计算2的2次方,结果存在ax中分析:用2+2实现问题2:编程实现2的12次方分析:用loop实现问题3:编程实现123*236,结果存在ax中分析:用236相加123次的计算次数比较少,节约计算资源问题4:计算ffff:0006单元中的数乘以3,结果存储在dx中1、判断数据是否能够存储2、判断数据相加是否能够位数相同问题5:计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中1、运算的结果是否超出寄存器的范围2、能否直接相加dx中的数据问题6:计算data段中第一组数据的3次方,结果保存在后面一组的dword单元中1、需要利用一个子程序包装出计算的功能 问题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 (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |