汇编-两个多位十进制数相加



一、实习题目:两个多位十进制数相加。

二、实习目的和要求:

1.学习数据传送和算术运算指令的用法。

2.熟悉在PC机上建立、汇编、链接、调试和运行8088/8086汇编语言程序的过程。

三、实习内容:

将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放

在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

四、代码:

DATA SEGMENT
DATA1 DB ' ','6','8','5','9',0DH,0AH,'$'
DATA2 DB ' ', '4','7','6','4',0DH,0AH,'$'
DATA ENDS

CODE SEGMENT
  ASSUME CS:CODE,DS:DATA
START:
  MOV AX,DATA
  MOV DS,AX

  LEA DX,DATA1
  MOV AH,09H
  INT 21H 

  LEA DX,DATA2
  MOV AH,09H
  INT 21H

  LEA DI,DATA1
  LEA SI,DATA2
  MOV CX,5
BEGIN:
  SUB BYTE PTR [DI],30H
  SUB BYTE PTR [SI],30H

  INC SI
  INC DI
LOOP BEGIN

  DEC SI
  DEC DI
  MOV CX,5

  CLC
CALADD:
  MOV AL,BYTE PTR [DI]
  ADC AL,BYTE PTR [SI]

  AAA
  MOV BYTE PTR [DI],AL

  DEC SI
  DEC DI
LOOP CALADD

  INC DI
  MOV CX,5
DEALRESULT:
  ADD BYTE PTR [DI],30H

  INC DI
LOOP DEALRESULT

  LEA DX,DATA1
  MOV AH,09H
  INT 21H 

  MOV AH,4CH
  INT 21H
CODE ENDS
END START

五、运行结果:

时间: 2025-01-10 07:40:49

汇编-两个多位十进制数相加的相关文章

打印出从1到最大的n位十进制数,如输入3 打印 1到 999

打印出从1到最大的n位十进制数,如输入3  打印 1到 999 分析: 可能很多人想到直接求出  10的 n次方  ,然后从1打印到该数.这种情况只适合输入比较小的数字  如  1   2    3   4   5  但是当输入100时,肯定无法直接表示该数. 所以,用数组是一个不错的方法   number[n] 换种思路,n位所有十进制数其实就是n个0-9的数全排列的过程,只是排在前面的0我们不打印出来. 类似于树的深度遍历,树的深度为10层,先从第一层遍历到最后一层   ,当最后一层的所有可

输入n,按顺序打印1到最大的n位十进制数

1 /* 2 *题目要求:输入n,按顺序打印1到最大的n位十进制数 3 *比如:输入3,则打印1,2,...999 4 *更新日期:2015-06-15 5 */ 6 7 //注意题目中的陷阱,当n稍微大一点的时候会溢出,所以使用字符串输出的策略 8 9 #include<iostream> 10 using namespace std; 11 12 void 13 Print_number_byte(unsigned char num) 14 { 15 if(num<1)return

就是两个链表中的数相加

想起那夕阳下的奔跑,那是我逝去的青春   ----万万没想到 我一看到,就觉得很简单,因为就是那个大数相加的思想啊,后来才知道各种情况,调了2个多小时,坑爹,不过leecode测试用例非常好. 1.链表合并,跟那个有序链表合并为一个类似, 2.合并之后,利用大数相加,超过十进位,最后一个节点要特殊处理,我写了这么长代码,大量重复的代码.所以仔细思考了下,重构了代码: 链表合并的时候直接就能相加啊,遍历一遍就Ok了,前后两次代码,这里面有个小技巧,如果头结点容易改变,就自己建立头结点,然后去掉就行

打印出从1到最大的n位十进制数

首先这一题会溢出,要考虑的大数问题.所以不能用简单的是int类型数来表示(32位无符号int 范围是0x00000000···0xFFFFFFFF),下面主要是非递归的实现代码,自己做了注释方便以后回顾. #include "stdafx.h" #include <iostream> using namespace std; //输入数字n,按照顺序打印出从1到最大的n位十进制数. bool Increament(char *number); void printNumbe

剑指offer—第三章高质量的代码(按顺序打印从1到n位十进制数)

题目:输入一个数字n,按照顺序打印出1到最大n位十进制数,比如输入3,则打印出1,2,3直到最大的3位数999为止. 本题陷阱:没有考虑到大数的问题. 本题解题思路:将要打印的数字,看成字符串,不足位的,高位补0.打印字符串的时候要对数字进行判断,不要将高位的0打印出来.打印字符串的结束条件是,当最高位产生进位时结束. c++代码: #include<iostream> using namespace std; //字符串模拟加法 bool Increment(char* number) {

学习笔记-汇编-两个16位数字相加获得32位数字

使用的是MASM编译 在XP环境下 command内 debug 调试的 啥也不说 上代码!! assume cs:code,ds:data data segment dw 0fa12h,0fdffh data ends code segment start: mov ax,data mov ds,ax ;设置数据段 mov ax,0h ;清零 mov bx,0h ;清零 mov al,ds:[0] ;fa12低位 mov bl,ds:[2] ;fdff低位 add ax,bx ;两个8位数字相

计算1到最大的n位十进制数 ——大数解决

要求:输入一个数字n,按照顺序打印出从1到最大的n为十进制.比如输入3,则打印出1.2.3……一直到最大的3位数999 这个看起来好像很简单啊.巴拉巴拉,已经得出了下面的代码 /** * 注意: 错误的示范,当n的值很大的时候,将会溢出 * @param n 最大的位数 */ public static void Print1ToMaxOfNDigits_1(int n) { int number = 1; int i = 0; while(i++ < n) { number *= 10; }

找出十进制数中出现的&#39;&#39;一&#39;&#39;的个数

一.题目要求: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5. 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.解决思路 通过列举几个数进行计算,可以发现函数f(N)规律如下: 1.一位十进制数:当N>=1时,f(N)=1:当N=0时,f(N)= 0; 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4

课堂练习——找十进制数中数字1的个数

题目要求: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5. 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 一.解决思路 通过列举几个数进行计算,可以发现函数f(N)规律如下: 1.一位十进制数:当N>=1时,f(N)=1:当N=0时,f(N)= 0; 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6