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

    2013-02-16 12:32:42
    汇编语言编写的两个32位数相加程序,用medwin测试
  • 汇编语言 多个数相加球平均汇编语言 多个数相加球平均汇编语言 多个数相加球平均汇编语言 多个数相加球平均
  • 汇编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、等开头,否则报错,原因未知这里写图片描述
    这里写图片描述
    如有大神光临,请指教,谢谢。

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

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

    操作环境:emu8086

    问题描述:

    设从BUF开始存放有若干带符号字节数(8位),将它们相加并将结果(超过一个字节范围)存放到字单元SUM中

     

    需要知道的知识:

    1、8位有符号数在寄存器中是以补码形式存在的,最高的一位为符号位。0100 0000 →  64 , 1000 0000 → -128。

    2、两8位有符号数相加时会出现溢出:两正数相加的和超过127,两负数相加的和低于-128。如:0100 0000 + 0100 0000 会溢出,1000 0000 + 1000 0000 会溢出。OF = 1。

    3、判断是否进位,看的是两数作为无符号数相加时和是否超过255,比如: 1000 0000 + 1000 0000 会进位,CF = 1。

    解决方案:

    方案一:

    为了防止8位有符号数相加时溢出,采cbw(符号扩展指令)指令将8位有符号数扩展为16位有符号数,再进行相加,这样较好的解决了问题。

    方案二:

    方案一是将8位扩展到16位从而避免了溢出的出现。方案二不采用将8位扩展到16位的方法。

    但是

    我们把8位看作16位

    1、将ax置0,将BUF中的第一个8位有符号数加入al中。

    2、将BUF中的下一个8位有符号数与al相加。若BUF中的数已加完,转操作5

    3、相加时,如果没有出现溢出,转到操作2;否则转操作4

    4、如果是两负数相加造成的溢出,OF = 1,CF = 1,令ah减1,如果是两正数相加造成的溢出,OF = 1, CF = 0 令ah加1。转操作2

    5、判断al中8位有符号数的符号位,若符号位为1,令ah减1,否则不做操作

    最后ax中的数就是我们要求的结果。

    流程图:

    方案二思路:

    1、负数相加溢出时ah减1,正数相加溢出时ah加1。

    2、加完以后,al符号位为1时,ah减1。

    举个具体实例。

    ps:多出的8位只是表示我们把8位看作16位。

    将我们希望的结果减去计算机计算结果可得到0000 0001 0000 0000

    所以0100 0000 + 0100 0000 =  计算机计算结果+ 0000 0001 0000 0000(8位有符号加数 + 8位有符号加数 = 16位有符号加数 + 看成16位的有符号加数(实际上是8位有符号数))。所以当两正数相加溢出时,令ah加0000 0001。

    当两负数相加溢出时

    ps:多出的8位只是表示我们把8位看作16位。

    将我们希望的结果减去计算机计算结果可得到1111 1111 0000 0000。

    所以1000 0000 + 1000 0000 =  计算机计算结果 + 1111 1111 0000 0000。所以当负数相加溢出时,令ah加上1111 1111,即:令ah减1。

    最后我们要得到我们希望的结果。那么我们得用 (ah) 0000 0000加上 计算机计算结果。

    这个时候如果al符号位为1,计算机计算结果为  1111 1111 (al)。我们让 1111 1111 (al) + (ah) 0000 0000相当于让ah减1。

    技巧:

    将两8位有符号数的和,用两16位有符号数(其中一个实际上是8位有符号数)的和表示。

    解惑:

    有些人可能不知道为什么最后要判断al的符号位,然后对ah进行减1.这么问的应该是没有理解我的思路。这道题的思路简单地说,就是,SUM = a(8位)+b(8位)  =  c(16位)  + d(8位),如果要再加上一个e(8位),此时SUM =   c(16位)  + 【d(8位) + 

    e(8位)】 = c(16位) +  【f(16位) + g(8位)】  =   (16位) + (8位)。我们得到的结果并不是一个直接结果,而是一个间接的结果,要得到直接结果,我们得把(16位) 和(8位)相加 方可得到最终的结果。 当(8位)的符号位为1时,我们把(8位)看成(1111 1111)(8位),此时两者相加,相当于令ah减1.

    方案二源码:

    ; multi-segment executable file template.
    
    data segment
        ; add your data here!
        buf db  40h, 40h,80h
        count dw $-buf  
        num dw 0000h
    ends
    
    stack segment
        dw   128  dup(0)
    ends
    
    code segment
    start:
    ; set segment registers:
        mov ax, data
        mov ds, ax
        mov es, ax
    
        ; add your code here
        
        lea si, buf   ;将buf的首地址放到si中
        xor ax, ax    ;将和放入ax中,因此先将ax置0
        mov cx, count ;将数组的长度放入cx中
        
    lo:
        add al, [si]
        jo overflow    ;溢出跳转
        jmp next
        
    overflow:    
        jc carry        ;负数相加溢出跳转
        inc ah
        jmp next    ;加下一个数
    carry:
        dec ah    
    
    next:
        inc si
        loop lo    
    
        test al,80h
        jz setnum
        dec ah
    setnum:
        lea si, num
        mov [si], al
        inc si
        mov [si], ah     
        
        
        mov ax, 4c00h ; exit to operating system.
        int 21h    
    ends
    
    end start 

     

    以上为自己的拙见,如有不足,还请指正。

    展开全文
  • 汇编数相加

    千次阅读 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
    展开全文
  • 汇编 多位数相加

    千次阅读 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码,输出。

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

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

       

    展开全文
  • 双精度相加汇编

    2007-12-29 01:33:25
    主要实现双精度的两个数相加,添加了显示结果功能,不需要用debug看结果的
  • 这是两个多位十进制数相加汇编语言程序源码。
  • 微机原理与汇编语言,课程实践,汇编语言程序,采用emu8086,将两个5字节十六进制数相加,可以编写出以下汇编语言源程序。
  • 使用汇编语言使用宏,实现两个字节压缩BCD数相加,简单编程
  • 汇编实现两位数相加

    万次阅读 2015-11-28 17:49:13
    本来简单的两个数相加用高级语言只是两行代码的问题,但是到了汇编语言,就需要什么考虑了,比如先定义数据段 还有代码段,有的时候还需要定义堆栈段 eg:先定义数据段: DATAS SEGMENT data1 DB 255 dup('$'...
  • 汇编实现两个数相加

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

    千次阅读 2014-11-06 13:01:23
    一、实习题目两个多位十进制数相加。二、实习目的和要求 学习数据传送和算术运算指令的用法。 熟悉在PC机上建立、汇编、链接、调试和运行8088/8086汇编语言程序的过程。 三、实习内容 将两个多位十进制数相加...
  • 汇编语言使用宏,实现两个字节压缩BCD数相加 实验原理: BCD码有两种形式,即压缩BCD码和非压缩BCD码。压缩BCD码用4位二进制表示一位十进制,一个字节表示两位十进制,如:96D表示成 1001 0110B=96H。 算法...
  • 使用MASM 5.0工具,完成10字节长两个压缩无符号BCD数相加的实验程序。两个操作最好从键盘输入,采用数据段定义(常数)也可以。要求调试通过、运算结果正确、结果可观察,程序运行具有容 错性、代码编写风范良好、...
  • 汇编实例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...
  • 汇编软件实验 实现了两个5位十进制相加 实现存放在申请内存中
  • 汇编语言实验,使用loop实现连续多个数相加,求代码(字数怎么不够呢)
  • 汇编语言实现多位十进制数相加求和显示,练习基本的汇编语言指令
  • 老师留的作业,自己写的,能实现两不同长度的数相加,自己检查还没发现问题。。。
  • 程序中还有一些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','$' ...----------------...
  • 将两个多位十进制数相加,要求被加、加均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。
  • 汇编 简单的两个一位数相加

    万次阅读 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 ...
  • 调用ExitProcess结束main main ENDP 添加一个变量: .data sum DWORD 0 .code main PROC mov eax, 5 add eax, 6 mov sum, eax INVOKE ExitProcess, 0 main ENDP 汇编语言的数据类型有: BYTE:8位无符号整数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,513
精华内容 7,005
关键字:

数相加汇编