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

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

    展开全文
  • 使用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...

    汇编实例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 ENDS 
    
    CODE SEGMENT  
        ASSUME CS:CODE ,DS:DATA 
    START :
        MOV AX ,DATA
        MOV DS,AX
    
        MOV DX ,OFFSET INFOR1 ;显示提示信息1
        MOV AH,09H  
        INT 21H 
    
        MOV AH,01H ;输入 
        INT 21H    ;此时等待用户输入,输入的第一个加数存放在AL中
        sub AL,30H 
    
        MOV BL,AL  ;放到BL 
    
        MOV DX ,OFFSET INFOR2 ;显示提示信息2 
        MOV AH,09H 
        INT 21H
    
        MOV AH,01H  ;另一个加数放在AL中
        INT 21H
        sub AL,30H  
    
        MOV DX ,OFFSET INFOR3 ;显示提示信息3
        MOV AH,09H 
        INT 21H 
    
    
        XOR AH,AH ; 异或 将AH清零,CF标志位也会清零 
        add AL,BL ; 相加
        AAA       ; 调整
    
        push AX   ;输出结果
        MOV  DL,AH 
        add DL,30H
        MOV AH,02H
        INT 21H
    
        pop AX 
        MOV DL,AL 
        add DL,30H 
        MOV AH,02H
        INT 21H
    
        MOV AX,4C00H
        INT 21H
    
    
        CODE ENDS
    END START 
    

    注意:

    1. 只能计算10以内的两个数相加
    2. 等待键盘输入的字符存放在AL中
    3. XOR 异或运算  1 XOR 1 = 0         0 XOR 0 = 0      1 XOR 0 = 1      0 XOR 1 = 1 
    4. AAA是汇编里ASCII码加法调整指令    当执行完MOV AX,'9'时结果ax里面是ox0039,因为9的ASICII码为那么多行完第二条ADD AL,'9'时ax里面是OX0072,因为他是按照十六进制相加的执行完第三条指令时,ax里面变为OX0108,即得到十进制数18(9+9=18)。  

    AAA执行条件是:如果AL得低4位大于9或者(AF)=1,

                                    则:(AL)=(AL)+6

                                              (AH)=(AH)+1

                                              (AF)=(CF)=1

                                   否则:(AF)=(CF)=0 AL高四位清零;

    展开全文
  • 是关于汇编语言中关于个个位数相加的和,然后显示
  • 老师留的作业,自己写的,能实现不同长度的数相加,自己检查还没发现问题。。。
  • 代码中是设x=1234;Y=5678.最终将BCD码X+Y的和保存在SUM变量之中(结果在附加段,请自行用debug查看)
  • 调用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位无符号整数 ...

    新建一个AddTwo.asm文件,代码如下

    main PROC
    	mov eax, 5	; 将数值5送入eax寄存器中
    	add eax, 6 	; eax寄存器加6
    
    	INVOKE ExitProcess, 0	; 调用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位无符号整数
    SBYTE:8位有符号整数
    WORD:16位无符号整数
    SWORD:16位有符号整数
    DWORD:32位无符号整数
    SDWORD:32位有符号整数
    FWORD:48位整数
    QWORD:64位整数
    TBYTE:80位整数
    REAL4:32位IEEE短实数
    REAL8:64位IEEE长实数
    REAL10:80位IEEE扩展实数

    展开全文
  • 这是个多位十进制数相加汇编语言程序源码。
  • 使用汇编语言使用宏,实现个字节压缩BCD数相加,简单编程
  • 个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。
  • 微机原理与汇编语言,课程实践,汇编语言程序,采用emu8086,将个5字节十六进制数相加,可以编写出以下汇编语言源程序。
  • 实现汇编任意数相加,本人的汇编作业,觉得还不错,欢迎下载参考,也欢迎提供更好的建议。
  • 汇编实现数相加

    万次阅读 2015-11-28 17:49:13
    本来简单的数相加用高级语言只是行代码的问题,但是到了汇编语言,就需要什么考虑了,比如先定义数据段 还有代码段,有的时候还需要定义堆栈段 eg:先定义数据段: DATAS SEGMENT data1 DB 255 dup('$'...
  • 个字节(如12h,34h)相加,并将结果显示出来。个字节(如12h,34h)相加,并将结果显示出来。个字节(如12h,34h)相加,并将结果显示出来。
  • 汇编语言实现数据相加的例子!
  • CPU不会直接从内存中拿数据计算,而是内存先把数据存到CPU的缓冲区中 然后CPU从缓冲区中拿数据进行计算 org 100h jmp start val1 dB 7 val2 dB 8 sum dB 0 start: mov aL,val1 mov aH,val2 ...
  • 32位数相加汇编medwin

    2013-02-16 12:32:42
    汇编语言编写的个32位数相加程序,用medwin测试
  • 实现原理 将每个32位数拆成个16位数(低16位,高16位) 低16位与低16位相加,高16位与高16位相加 判断低16位进位 分别取个低16位的最高位进行比较,个最高位都是1必定会进位,个最高位是0必定不进位...汇编代码
  • 汇编语言使用宏,实现个字节压缩BCD数相加 实验原理: BCD码有种形式,即压缩BCD码和非压缩BCD码。压缩BCD码用4位二进制数表示一位十进制数,一个字节表示位十进制数,如:96D表示成 1001 0110B=96H。 算法...
  • 汇编语言实现个任意大的数相加

    千次阅读 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 ...
  • 个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
  • 编写一程序,实现个三字节无符号DATA1和DATA2的相加,结果送四字节变量ANS。上机调试程序,检查执行结果。
  • 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
  • 汇编8位有符号数相加

    千次阅读 2019-05-11 21:37:45
    操作环境:emu8086 问题描述: 设从BUF开始存放有若干带符号字节数(8位),将它们相加并将结果(超过一个字节范围)存放到字...2、8位有符号数相加时会出现溢出:正数相加的和超过127,负数相加的和低于-1...
  • 汇编语言实验,使用loop实现连续多个数相加,求代码(字数怎么不够呢)
  • 汇编软件实验 实现了个5位十进制相加 实现存放在申请内存中
  • 这是我学汇编语言的时候写的一个课程设计,题目是加法运算,输入题,开始做题。随时退出,退出时计算总分。
  • 汇编语言---判断字符配置环境要求编辑程序运行程序后续 配置环境 首先双击下载程序进行下载。(没有安装程序的,可以下载我为大家准备的安装文件。) 不会安装的可以看一下文件 将debug.exe放入C盘(没有debug的...
  • 汇编 实现个16进制相加的代码 如 输入: AAAA 1111 输出: BBBB

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,703
精华内容 3,881
关键字:

汇编语言两数相加