• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > MASM-两个16位二进制数减法模拟

MASM-两个16位二进制数减法模拟

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了二进制数减法,二进制数的减法运算,16位二进制数,16位二进制数范围,16的二进制数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

功能说明:输入两组16位二进制代码模拟两为16位二进制整数,对其求差并以16进制输出.

基本算法:采用补码,模拟二机制减法(加法类同),得到差(补码)转换成原码后,转化成十六进制并输出.16为二进制转换成4为十六进制数的方法是采用:将16位二进制分成4组,每组由连续4位二进制组成,模拟4位二进制到一位十六进制转换,将每组转换成16进制数并输出.详见代码

本代码在MASM.5调试通过

运行界面:

如

binary(YuanMa) num1=1000000000001011 ;被减数原码
binary(YuanMa) num2=1000000000001101 ;减数原码
binary(Buma) num1 BM=1111111111110101 ;被减数补码
binary(Buma) num2 BM=1111111111110011 ;减数补码
binary(Buma) diff sub=0000000000000010 ;差补码
binary(YuanMa)diffsub=0000000000000010 ;差原码
hex sumHEX=0002
;/************************************************/
;
;bsub.asm
;hbyufan@163.com
;
TSOUT MACRO dx0
    mov ah,09h
    mov dx,offset dx0
    int 21h
ENDM
data segment
num1 db 19 dup(''$'')
num2 db 19 dup(''$'')
sum db 19 dup(''$'')
hexsum db 5 dup(''$'')
tsnum1 db 0ah,0dh,''binary(YuanMa) num1=$''
tsnum2 db 0ah,0dh,''binary(YuanMa) num2=$''
tssum db 0ah,0dh,''binary(Buma) diff sub=$''
tsnum11 db 0ah,0dh,''binary(Buma) num1 BM=$''
tsnum22 db 0ah,0dh,''binary(Buma) num2 BM=$''
tssum33 db 0ah,0dh,''binary(YuanMa)diffsub=$''
tssumhex db 0ah,0dh,''hex sumHEX=$''
data ends
code segment
   assume ds:data,cs:code
start:
    mov ax,data
    mov ds,ax
re:
   TSOUT tsnum1
    mov si,0
n1roat:
    mov ah,01h
    int 21h
    cmp al,''0'' ;对NUM1输入错误简单处理---重新输入
    jl re
    cmp al,''1''
    ja re
    mov num1[si],al
    inc si
    cmp si,16
    jl n1roat
re2:
    TSOUT tsnum2
    mov si,0
n2roat:
    mov ah,01h
    int 21h
    cmp al,''0'' ;对NUM1输入错误简单处理---重新输入
    jl re2
    cmp al,''1''
    ja re2
    mov num2[si],al
    inc si
    cmp si,16
    jl n2roat
    mov bx,offset num1
    call questBuma
    mov bx,offset num2
    call questBuma
        TSOUT tsnum11;//
        TSOUT num1;//
        TSOUT tsnum22;//
        TSOUT num2;//
    call bsubproc
        TSOUT tssum;   
        TSOUT sum ;//test
    lea bx,sum
    call questBuma
        TSOUT tssum33;//
        TSOUT sum;//
    lea bx,sum
    call BinaryToHexAndOut
        TSOUT tssumhex;//
        TSOUT hexsum;//
;******************************
    mov ah,4ch
    int 21h
;*******************************************
questBuma proc near ;功能:求补码
  ;算法:模拟求补码运算,如二进制求补码方法一致.
         ;bx  ;bx作为参数,传入NUM1或NUM2内存空间首地址
    mov al,[bx+0]
    cmp al,''0''
    jz qbret ;如果是正整数,函数返回;如果是负数,符号位不变,其余位取反加1.
    mov si,1 
qbroat:
    mov al,[bx][si]
    cmp al,''0''
    jz qb1
    mov al,''0''
    mov [bx][si],al
    jmp qb2
qb1:
    mov al,''1''
    mov [bx][si],al
qb2:
    inc si
    cmp si,16
    jl qbroat
qnext:  
    mov dh,1   ;加1处理.方法类似减法
    mov si,15
qbincre:
    mov al,[bx][si]
    sub al,''0''
    add al,dh
    mov dh,0
    cmp al,2
    jnz qbi1
    mov al,0
    mov dh,1
qbi1:
    add al,''0''
    mov [bx][si],al
    dec si
    cmp si,0
    jnl qbincre
qbret:
    ret
questBuma endp
;*******************************************
bsubproc proc near ;功能:16位二进制数减法模拟.
  ;算法:逐位相减,flag为借位标志(BX)
    push ax
    push bx
    push cx
    push si
    mov bx,0 ;//flag
    mov si,15
broat: mov al,num1[si]
    add al,bh
    mov bh,0 ;//clear bh
    cmp al,num2[si]
    jnl bnext
    add al,2
    dec bh
bnext: 
    sub al,num2[si]
    add al,''0''
    mov sum[si],al
    dec si
    cmp si,0
    jnl broat  
    pop si
    pop cx
    pop bx
    pop ax
    ret
bsubproc endp
;*******************************************
BinaryToHexAndOut proc near ;功能如函数名
        ;bx ;bx作为参数,传入NUM1或NUM2内存空间首地址
    mov dh,2
    mov si,0
bth1:
    mov al,0 ;分组转换,模拟4为二进制到1为16进制数的转换
    mov di,0
bth2:  
    mul dh
    add al,[bx][di]
    sub al,''0''
    inc di
    cmp di,4
    jl bth2
    cmp al,9
    jna bth3
    sub al,10
    add al,''A''
    jmp bth4
bth3:
    add al,''0''
bth4:
    mov hexsum[si],al
    inc si
    add bx,4
    cmp si,4
    jl bth1
    ret
BinaryToHexAndOut endp
;*******************************************
code ends
    end start

<<<<

学习箴言:

1,一知半解是危险的

2,如果一门语言不能影响你对编程的想法,那它就不值得去学

>>>

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MASM-两个16位二进制数减法模拟

相关文章

  • 2017-06-28汇编教程:Win32调试API(3)
  • 2017-06-17通用数据传送指令
  • 2017-06-17CPU 状态控制指令
  • 2017-06-28汇编创建简单的窗口
  • 2017-06-28一个win32汇编语言程序示例
  • 2017-06-17计算机数据表示
  • 2017-06-28什么是进程
  • 2017-06-17输入输出指令
  • 2017-06-28汇编教程:VxD程序设计入门
  • 2017-06-1780x86微处理器

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 标志位设置指令
    • masm中宏指令的bug
    • 汇编源码系列之fxn
    • CPU 状态控制指令
    • 汇编源码系列之frespace
    • 文本操作
    • 汇编语言与C语言的接口技术
    • 汇编语言编写DOS下的内存驻留程序(5)
    • 8086指令系统
    • 汇编源码系列之clean

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有