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

    2013-02-16 12:32:42
    汇编语言编写的两个32位数相加程序,用medwin测试
  • 是关于汇编语言中关于两个个位数相加的和,然后显示
  • 将每个32位数拆成两个16位数(低16位,高16位) 低16位与低16位相加,高16位与高16位相加 判断低16位进位 分别取两个低16位的最高位进行比较,两个最高位都是1必定会进位,两个最高位是0必定不进位; 如果两个最高位...

    实现原理

    将每个32位数拆成两个16位数(低16位,高16位)
    低16位与低16位相加,高16位与高16位相加

    判断低16位进位

    分别取两个低16位的最高位进行比较,两个最高位都是1必定会进位,两个最高位是0必定不进位;
    如果两个最高位一个是1一个是0,将分情况讨论:
    低16位相加后的结果的最高位是0,说明曾经有过进位(1+0->0)
    低16位相加后的结果的最高位是1,说明曾经没有进位(1+0->1)
    通过上述判断就可得知是否有过进位,从而进行接下来的高16位运算

    例题

    例题

    汇编代码

                .ORIG x5000
                AND R0 R0 #0    ;设置R0位进位标识
                LD R1 address
                LDR R2 R1 #0
                LDR R3 R1 #2
                LD R1 address1
                AND R4 R2 R1
                BRz value0      ;判断第一个数的低16位中最高位是0还是1
                AND R4 R3 R1
                BRz value1_0    ;当第一个数的低16位中最高位是1时,判断第二个数的低16位中最高位是0还是1
                ADD R0 R0 #1    ;第二个数的低16位中最高位也是1时,进位
                BRnzp EXIT
    value0      AND R4 R3 R1    ;第一个数低16位中最高位是0时
                BRz EXIT        ;第二个数低16位中最高位也是0时,无进位,直接出
                                ;第一个数低16位中最高位是1,第二个数低16位中最高位是0    第一个数低16位中最高位是0,第二个数低16位中最高位是1  进入value1_0
    value1_0    ADD R2 R2 R3    ;两个低16位相加后结果R2
                AND R2 R2 R1    ;取低16位相加结果的最高位
                BRp EXIT        ;取位后结果是0说明低16位向高16位进了位(1+0->0)  取位结果是1说明低16位没有向高16位进位(1+0->1)
                ADD R0 R0 #1    ;进位
    EXIT        LD R1 address  
                LDR R2 R1 #0
                LDR R3 R1 #2
                LDR R4 R1 #1
                LDR R5 R1 #3
                ADD R2 R2 R3
                ADD R4 R4 R5
                ADD R4 R4 R0
                STR R2 R1 #4
                STR R4 R1 #5
                TRAP x25 
    address1    .FILL x8000
    address     .FILL x3000
                .END
    
    初学汇编,仅供参考,欢迎补充指正
    展开全文
  • SSEG SEGMENT STACK 'STACK' db 256 DUP(0) SSEG ENDS CSEG SEGMENT 'CODE' START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX MOV AX, 4C00h ;... set entry point.
  • 实现汇编任意两个相加,本人的汇编作业,觉得还不错,欢迎下载参考,也欢迎提供更好的建议。
  • 计算两个大数的和(超过32位,在C语言中使用long long int类型),在控制台显示和。和由ARM汇编来计算! 程序分析 ①要有一个sum用于计算两数之和。 ②定义两个long long int 类型的数,用于计算。 ③如果数据超过32...

    问题描述

    计算两个大数的和(超过32位,在C语言中使用long long int类型),在控制台显示和。和由ARM汇编来计算!

    程序分析

    ①要有一个sum用于计算两数之和。
    ②定义两个long long int 类型的数,用于计算。
    ③如果数据超过32位,无法不能传入arm,进而无法计算,所以使两数之和 大于32 位。
    ④由于传入数据后,r1,r3分别是用于存储两数的高32位,所以将r0,r2 中的数据进 行相加。
    ⑤数据产生进位,需要将进位进行返回,利用addcs命令,即:若有进位, 则r1+1,进而得到结果

    程序源码

    #include<stdio.h>
    extern long long int sum(long long int,long long int);
    int main()
    {
    	long long int x=0xfffffffd,y=0xaaae;
    	long long int s=sum(x,y);
    	printf("%lld+%lld= %lld\n",x,y,s);
    	return 0;
    }
    
    area sum,code,readonly
    	export sum
    start
    	adds r0,r0,r2  
    	addcs r1,r1,#1
    	add r1,r1,r3
    
    	mov pc,lr
    	end
    

    程序运行结果

    4295010987转换成16进制为1 0000 aaab,符合预期结果。
    在这里插入图片描述

    展开全文
  • 汇编实现两个相加

    千次阅读 多人点赞 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~
    我把相关的代码的注释都写在了旁边,希望下一个时空的我能再看的时候能懂,也希望能帮到看到我这篇文章的老哥们。

    展开全文
  • 实现两个64位数相加的stm32汇编程序

    千次阅读 2017-01-08 14:30:15
    STACK_TOP EQU 0x00002000AREA reset,CODEDCD STACK_TOPDCD Start ENTRYStart LDR R0,=data1 ;第一步执行,R0指向STACK_TOP EQU 0x00002000中 的栈首地址0x00002000,将data1赋值给R0, ...data1的高32位到R1

    STACK_TOP EQU 0x00002000

    AREA reset,CODE

    DCD STACK_TOP

    DCD Start
    ENTRY

    Start
    LDR R0,=data1 ;第一步执行,R0指向STACK_TOP EQU 0x00002000中 的栈首地址0x00002000,将data1赋值给R0,
    LDR R1,[R0] ;data1的高32位到R1
    LDR R2,[R0,#4];data1的高32位到R2
    LDR R0,=data2
    LDR R3,[R0]
    LDR R4,[R0,#4]
    ADDS R6,R2,R4
    ADC R5,R1,R3
    LDR R0,=result
    STR R5,[R0]
    STR R6,[R0,#4]
    data1 DCD 0X11223344,0xFFDDCCBB ;定义变量并给变量赋值
    data2 DCD 0X11223344,0xFFDDCCBB
    result DCD 0,0 ;定义变量,赋初值,为了存储计算后的数据R5, R6
    END

    展开全文
  • 汇编 实现两个16进制相加的代码 如 输入: AAAA 1111 输出: BBBB
  • 计算两个大数的和(超过32位)C语言调用汇编函数,汇编函数实现加法功能,计算结果在控制台显示一、问题分析二、编写代码2.1 C语言代码2.2 汇编语言代码三、ADS调试过程四、附录 一、问题分析 本程序通过在C语言中...
  • 因为刚刚学汇编希望大佬能详细写一下代码 编写一个完整的汇编语言程序,实现两个32位的数相加,结果以十六进位制显示出来。
  • 代码中是设x=1234;Y=5678.最终将BCD码X+Y的和保存在SUM变量之中(结果在附加段,请自行用debug查看)
  • 两个5位数加法 输入的数字x,0<x<99999 11111+11111=22222 99999+99999=199998 code segment assume cs:code main proc far start: mov ax,cs mov ds,ax mov bx,0 mov cx,10 s:mov ah...
  • 两个8位数字相加 ah 高位存储进位的数 mov ds: [ 0 ],al ; 将低位结果存到ds[0] mov al,ah ; 将进位数存至ax低位 mov ah,0h ; 高位清零 xor bx,bx ; bx清零 mov bl, ds: [ 1 ] add ax,...
  • 老师留的作业,自己写的,能实现不同长度的数相加,自己检查还没发现问题。。。
  • 新建一AddTwo.asm文件,代码如下 main PROC mov eax, 5 ; 将数值5送入eax寄存器中 add eax, 6 ; eax寄存器加6 INVOKE ExitProcess, 0 ; 调用ExitProcess结束main main ENDP 添加一变量: .data sum DWORD ...
  • 两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
  • 汇编两相加

    千次阅读 2017-11-01 14:59:19
    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 DA...
  • 实现32位加法(汇编) 大致思路就是首先将32位分低位和高位,先把低位相加的结果赋值到Z上,之后高位相加后,带进位相加 数据定义 X DD 22223333H Y DD 44445555H Z DD ? 低位(word)相加 涉及到 word ptr强制...
  • 求用汇编语言编写一个实现任意两个位数相加的程序http://zhidao.baidu.com/question/86348638.html 悬赏分:200 - 离问题结束还有 7 天 23 小时RT。谢谢大家问题补充:从键盘输入任意两个五位数,相加结果要以十...
  • 汇编——将屏幕输入的两个相加

    千次阅读 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 是 ...
  • 定义双子类型:  A DD 21111112H  B DD 11111111H 上面的A和B都是32位,而ax,dx都是16位,...A 32位数在内存中的表示 21 11 11 11 12 A+1即为 11,A+4即为21 至于输出,使用了xlat表,先自己建立...
  •   代码如下: .section .data data1: .quad 7252051615 data2: .quad 5732348928 output: .asciz "The result is %qd\n" .section .text .globl main main: nop movl data1, %ebx movl data1+4, %eax ... s
  • 编制程序,完成已知两个32位整数A和B相加,并将结果存入双字变量单元sum,不考虑溢出 data segment a dw 1111h,2222h b dw 4444h,6666h sum dw 7777h,7777h data ends code segment assume cs:code,ds:data start: ...
  • 8位数相乘汇编代码

    2013-02-16 12:29:59
    汇编语言编写的8位数相乘代码,用MEDWIN软件测试
  • 汇编语言,两个数字的想加Problem statement: 问题陈述: Write an assembly language program in 8085 microprocessor to multiply two 16 bit numbers. 在8085微处理器中编写汇编语言程序,以将两个16位数字相乘...
  • code segment assume cs:code main: mov ax,01H mov dx,02H add ax,dx mov ah,0ah (这里换成mov ah,04ch也不行) int 21h code ends end main
  • 汇编语言实现两个任意大的数相加

    千次阅读 2014-04-15 10:51:12
    实现了输入,相加,输出功能,可在此基础上做出自己的修改,代码如下: DATA SEGMENT MSG1 DB "Please Input The First Number:",0DH,0AH,"$" MSG2 DB "Please Input The Second Number:",0DH,0AH,"$" REM DB "The ...
  • 功能很简单,实现两个16位二进制数相加即可。 step 1.写汇编代码 下面是实现功能的相应代码: DSEG SEGMENT DATA_1 DW ? DATA_2 DW ? DSEG ENDS SSEG SEGMENT STACK TOP_PTR DB 20 DUP(0) SSEG ENDS CSEG SEGMENT ...
  • 相加 mov dx,0 ;准备ax,dx mov bx,10000 div bx ;(dx,ax)/src,商->ax,余->dx mov cx,dx ;保护余数 mov dl,al add dl,30h ;转化为数字 mov ah,02h int 21h ;显示万位 mov ax,cx mov dx,0 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,996
精华内容 1,598
关键字:

汇编两个32位数相加