开发学院软件开发汇编语言 MASM-两个16位二进制数减法模拟 阅读

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

 2008-04-29 09:33:54 来源:WEB开发网   
核心提示:功能说明:输入两组16位二进制代码模拟两为16位二进制整数,对其求差并以16进制输出.基本算法:采用补码,模拟二机制减法(加法类同),得到差(补码)转换成原码后,转化成十六进制并输出.16为二进制转换成4为十六进制数的方法是采用:将16位二进制分成4组,每组由连续4位二进制组成,模拟4位二进制到一位十六进制转换,将每组

功能说明:输入两组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,如果一门语言不能影响你对编程的想法,那它就不值得去学

>>>

Tags:MASM 两个 二进制

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接