精华内容
下载资源
问答
  • 汇编 多位数相加

    千次阅读 2013-07-21 11:39:35
    遇到多位后,会变复杂很多,事实上汇编里面可以实现相加,难题在于需要把和转成ASCII码显示在dos窗口。所以需要把和一个一个提取,转成ASCII。程序如下: DATAS SEGMENT OP1 DW 255 OP2 DW 366 RESULT DW...

         上一次汇编写到,只是个位数的简单相加,只需要判断两者相加有无进位,进位即进一,在输出窗口输出一先。遇到多位数后,会变复杂很多,事实上汇编里面可以实现相加,难题在于需要把和转成ASCII码显示在dos窗口。所以需要把和一个一个数提取,转成ASCII。程序如下:

    DATAS SEGMENT	
        	OP1 DW 255
        	OP2 DW 366
        	RESULT DW 10 DUP(?)		 定义一个RESULT数组,长度为10个字节
    DATAS ENDS
    
    STACKS SEGMENT
        
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS	
        MOV DS,AX
        MOV AX,OP1
        ADD AX,OP2			OP1和OP2相加后附加到AX
        MOV BX,0
        MOV CL,10			将10附加到CL
      	
      	
    SS1:
    DIV CL		         		AX除以10
    ADD AH,30H       			余数转为ASCII码,
    MOV SI, OFFSET RESULT		保存到RESULT数组。
    MOV [SI+BX],AH  			商取代结果
    INC BX            			BX递增
    	MOV AH,0				将AH清空,以便将下一次的商附加进去
    	CMP AL,0				比较余数是否零,是则跳出循环
    	JNZ SS1
    
    SS2:DEC BX					BX递减
    	MOV DX,[SI+BX]	将RESULT数组从最高位开始附加到DX
    	MOV AH,2				字符串输出
    		INT 21H
    	
    	CMP BX,0				判断BX是否为零,是则跳出
    		JNZ SS2
    	
    	MOV AH,4CH		
            INT 21H
    CODES ENDS
        END START				正常结束程序
    
    
    
    

             程序的思想有点像进制转换,要把数字一个一个从和中提取,由于是十进制,可以将和除以10,所得的余数依次为个位开始的数字,最后,只需要把数字存入数组,用栈式的读取,最后存的先读,为最高位,转成ASCII码,输出。

        个位数相加当然也可以用这种方法,但是没必要这么复杂。所以第一个程序很简单的判断一下进位即可。

        原来一个多位数的相加之后的显示是如此的精妙!

       

    展开全文
  • 汇编x86两数相加

    2018-08-14 15:00:10
    程序:两数相加 软件:vs2017 例程1: ; AddTwo.asm - adds two 32-bit integers. .386 .model flat,stdcall .stack 4096 ExitProcess proto,dwExitCode:dword .data c dword 20h f dword 11h sum...

    第一天汇编
    书籍:基于x86的汇编
    程序:两数相加
    软件:vs2017
    例程1:
    ; AddTwo.asm - adds two 32-bit integers.
    .386
    .model flat,stdcall
    .stack 4096
    ExitProcess proto,dwExitCode:dword
    .data
    c dword 20h
    f dword 11h
    sum dword 0h
    .code
    main proc
    mov eax,c
    add eax,f
    add eax,sum
    mov sum,eax
    invoke ExitProcess,0
    main endp
    end main

    备注:经过测试寄存器不能已c、e、等开头,否则报错,原因未知这里写图片描述
    这里写图片描述
    如有大神光临,请指教,谢谢。

    展开全文
  • 汇编两个十进制数相加!!! 汇编两个十进制数相加!!!
  • 实现汇编任意两个数相加,本人的汇编作业,觉得还不错,欢迎下载参考,也欢迎提供更好的建议。
  • 汇编数相加

    2017-11-01 14:59:19
    DATA SEGMENT DATA1 DB 31H,32H DATA2 DB 30H,36H DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,DATA1+1 ADD AL,DATA2+1 ...MOV DA...

    DATA SEGMENT
    DATA1 DB 31H,32H
    DATA2 DB 30H,36H
    DATA ENDS

    CODE SEGMENT
    MAIN PROC FAR
        ASSUME CS:CODE,DS:DATA
    START:

    MOV AX,DATA
    MOV DS,AX

    MOV AH,0
    MOV AL,DATA1+1
    ADD AL,DATA2+1
    AAA

    ADD AL,30H
    MOV DATA1+1,AL

    MOV AL,DATA1
    ADD AL,DATA2
    ADD AL,AH
    AAA

    ADD AL,30H
    MOV DATA1,AL

    mov dl,DATA1
    mov ah,02h
    INT 21H

    mov dl,DATA1+1
    mov ah,02h
    INT 21H
    mov ax,4c00h
    int 21h

    MAIN ENDP
    CODE ENDS

    1.     END START
    展开全文
  • 汇编实现两个数相加

    千次阅读 2020-05-17 17:07:07
    键盘中输入两个,然后求和并输出 我想了半天找了很多资料,看了许多大佬的代码,悟出些门道,马上奋笔疾书写下这篇博客期末复习的时候能看。 Tip: 我这里没有用到栈来保护数据,因为我还没怎么懂汇编里的栈,等...

    =================================================================

    情景再现

    学校里开了计算机基础原理的课,里面有汇编,装DOSBOX的那种。
    老师布置了个作业:

    键盘中输入两个数,然后求和并输出

    我想了半天找了很多资料,看了许多大佬的代码,悟出些门道,马上奋笔疾书写下这篇博客期末复习的时候能看。如果有相关错误请大佬们留言。
    Tip: 我这里没有用到栈来保护数据,因为我还没怎么懂汇编里的栈,等以后有空就来补充。另外我这个程序只能实现两个一位数的相加,比较菜,大佬们勿喷。

    示例代码

    DATA SEGMENT
     	NUM1 DB 0 ;定义一个字节的NUM1并赋值为0
     	NUM2 DB 0 ;定义一个字节的NUM2并赋值为0
     	SUM DB 0  ;定义他们的和
    DATA ENDS
    
    CODE SEGMENT
     	ASSUME CS:CODE,DS:DATA,ES:DATA
    START:
     	MOV AX,DATA
     	MOV DS,AX
     
     	;输入第一个值把它保存在NUM1中
     	MOV AH,01H
     	INT 21H
     	SUB AL,30H 	;将键盘输入的ASCII码转换成16进制的09
     	MOV NUM1,AL 	;将值赋给NUM1
     
     	;输入一个值后自动回车加换行并等待输入第二个数
     	MOV DL,0AH ;回车
     	MOV AH,2
     	INT 21H
     	MOV DL ,0DH ;换行
     	MOV AH,2
     	INT 21H
     
     	;输入第二个值把它保存在NUM2中
     	MOV AH,01H
     	INT 21H
     	SUB AL,30H 	;将键盘输入的ASCII码转换成16进制的09
     	MOV NUM2,AL 	;将值赋给NUM2
     
     	;把两个值相加并保存在SUM中
     	ADD BL,NUM1 	
     	ADD BL,NUM2	;把两个数相加存放在BL中
     	MOV SUM,BL 	;把和赋给SUM
     	
     	;为了输出在新的一行
     	MOV DL ,0AH ;回车
     	MOV AH,02H
     	INT 21H 
     	MOV DL ,0DH ;换行
     	MOV AH,02H
     	INT 21H
     	
     	;以下为输出程序
     	CMP SUM,9 	;判断是否不在0-9以内
     	JA Y		;超过9则跳转
     	MOV DL,SUM	;若没有则将SUM的值给DL
     	ADD DL,30H 	;需要在输出前转换到相应的ASCII码
     	JMP SHOW	;跳转到显示代码
     
    ;10-18
    Y:
    	MOV DL,1	;直接先输出十位上的值
    	ADD DL,30H	;需要在输出前转换到相应的ASCII码
    	MOV AH,02H	
    	INT 21H
    	MOV DL,SUM	;先将SUM的值赋给DL
    	SUB DL,10	;把DL中的值减十进置的10,如果减十六进制的10会有误
    	ADD DL,30H	;需要在输出前转换到相应的ASCII码
     	JMP SHOW
     	
    ;显示程序 
    SHOW:
     	MOV AH,02H
     	INT 21H
    
    	;程序结束
     	MOV AH,4CH
     	INT 21H
     
    CODE ENDS
     END START

    截图

    在这里插入图片描述

    ============================================================================

    小结

    这是一个两个一位数相加的程序,两位数以上的我还没研究,xixixi~
    我把相关的代码的注释都写在了旁边,希望下一个时空的我能再看的时候能懂,也希望能帮到看到我这篇文章的老哥们。

    展开全文
  • 汇编8位有符号数相加

    千次阅读 2019-05-11 21:37:45
    操作环境:emu8086 问题描述: 设从BUF开始存放有若干带符号字节数(8位),将它们相加并将结果(超过一个字节范围)存放到字...2、两8位有符号数相加时会出现溢出:两正数相加的和超过127,两负数相加的和低于-1...
  • 汇编实例3——两数相加

    千次阅读 2019-07-25 15:07:02
    汇编实例3——两数相加 DATA SEGMENT INFOR1 DB "Please input the frist data(<10):$" INFOR2 DB 0AH,0DH,"Please input the second data(<10):$" INFOR3 DB 0AH,0DH,"The result is:$ " DATA E...
  • 汇编实现两位数相加

    万次阅读 2015-11-28 17:49:13
    本来简单的两个数相加用高级语言只是两行代码的问题,但是到了汇编语言,就需要什么考虑了,比如先定义数据段 还有代码段,有的时候还需要定义堆栈段 eg:先定义数据段: DATAS SEGMENT data1 DB 255 dup('$'...
  • 使用MASM 5.0工具,完成10字节长两个压缩无符号BCD数相加的实验程序。两个操作数最好从键盘输入,采用数据段定义(常数)也可以。要求调试通过、运算结果正确、结果可观察,程序运行具有容 错性、代码编写风范良好、...
  • 汇编语言实验,使用loop实现连续多个数相加,求代码(字数怎么不够呢)
  • 微机原理与汇编语言,课程实践,汇编语言程序,采用emu8086,将两个5字节十六进制数相加,可以编写出以下汇编语言源程序。
  • 汇编 简单的两个一位数相加

    万次阅读 2013-07-17 00:13:21
    本来两个数相加,用c语言写的话。#include int main(){ int i =8,j = 9; printf("%d",i+j); }   到了汇编,第一次写的时候,连个最简单的都想了半天。 DATAS SEGMENT 定义数据段标识为“DATAS” OP1 DB 09H ...
  • 老师留的作业,自己写的,能实现两不同长度的数相加,自己检查还没发现问题。。。
  • 汇编软件实验 实现了两个5位十进制相加 实现存放在申请内存中
  • 汇编-两个多位十进制数相加

    千次阅读 2014-11-06 13:01:23
    一、实习题目两个多位十进制数相加。二、实习目的和要求 学习数据传送和算术运算指令的用法。 熟悉在PC机上建立、汇编、链接、调试和运行8088/8086汇编语言程序的过程。 三、实习内容 将两个多位十进制数相加...
  • 汇编语言使用宏,实现两个字节压缩BCD数相加 实验原理: BCD码有两种形式,即压缩BCD码和非压缩BCD码。压缩BCD码用4位二进制数表示一位十进制数,一个字节表示两位十进制数,如:96D表示成 1001 0110B=96H。 算法...
  • 汇编两个8位无符号数相加

    千次阅读 2015-03-07 22:27:20
    两个8位无符号数相加 ;在8086/8088CPU中,只有8位或16位运算指令,没有32位和64位以上的运算指令 ;要进行64位加法运算,可以利用16位加法指令分别相加4次来实现 ;这个问题比较简单,无须画程序流程图 ;该汇编程序的...
  • 将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
  • 汇编——将屏幕输入的两个数相加

    千次阅读 2019-03-21 13:06:22
    难点在于屏幕上读到的...它怎么转化为我们可以相加? DATA SEGMENT INFOR1 DB 'Please Input the First Data(<10):$' INFOR2 DB 0AH,0DH,'Please Input the Second Data(<10):$' ; 0A 是 '\n' 0D 是 ...
  • >_<:低位相加: 1 ; multi-segment executable file template. 2 3 data segment 4 datax dw 0148H,2316H 5 datay dw 0237H,4052H 6 ends 7 8 stac...
  • 将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。
  • 编写汇编程序,求出首地址为BUF的10个有符号字的内容之和 ;并存入字变量SUM单元 DATA SEGMENT BUF DW 12H,34H,56H,43H,21H,98H,09H,78H,57H,95H SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:...
  • 程序中还有一些bug,请各大网友指正 [code="java"] DATAS SEGMENT BUF DB 11H,11H,11H,11H,11H,11H RESULT DB 'The result is: ' NUM DB 0 DB 13,10,'OVER','$' ...----------------...
  • 汇编语言编写一个函数 实现两个数相加

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 303
精华内容 121
关键字:

数相加汇编