emu8086 多字节相减

功能:多个字节相减

代码如下:


缺点:多字节相减,借位时被减数会显示负数,如何处理?




; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt


org 100h


NAME  EX2
PAGE  50,70
 
D1  DB  88H,44H,66H,00H,99H
N1=$-D1
D2  DB  22H,55H,88H
N2=$-D2
 
;————————————————
CODE SEGMENT PARA 'CODE'
    ASSUME CS:CODE,DS:CODE
    ASSUME SS:CODE,ES:CODE
STA: ;FAR
        ; PUSH  DS   
        ;;;;将cs,es,cs段设置到同一段
         push cs
         pop ds
         push cs
         pop es
         ;;;;;
          STD 
          LEA SI,D1
          ;MOV  SI,OFFSET D1 ;被减数首地址 修改原来的LEA语句
         ADD  SI,N1-1 ;至未地址
         MOV  CX,N1 ;运算字节数
         CALL  EX21 ;显示被减数
          CALL PP2 ;回车换行
           LEA  SI,D2 ;减数首地址
            ADD SI,N2-1;至未地址
           MOV  CX,N2;字节数
           CALL EX21  ;显示减数
           CALL  PP2 ; 回车换行
            CALL  EX22 ;减法程序
           LEA SI,D1 ;差首址
      ADD SI,N1-1 ;至未地址
      MOV  CX,N1 ;字节数
      CALL  EX21 ;差显示 
       INT 20H


;回车换行子程序 (分模块)
PP2   PROC
         MOV  DL,0DH;回车
         MOV  AH,2
         INT  21H
         MOV DL,0AH;换行
        MOV  AH,2
        INT 21H
         RET
PP2  ENDP
;NAME  EX21 ;
 ;----------------字符显示程序-------------------
EX21  PROC    ;FAR
             PUSH  AX
            PUSH  DX
F:         LODSB
           CALL   PP1
           MOV  DL,' ';显示空格
           MOV  AH,2
           INT  21H
           LOOP  F
           POP  DX
           POP  AX 
           RET
EX21   ENDP
;————————;转换ASCII————————
PP1    PROC
          PUSH  BX
         PUSH   CX
         MOV  BL,AL
         MOV  CL,4
          SHR  AL,CL
          CALL  P1
          MOV  AL,BL
          CALL  P1
          POP  CX
          POP  BX
          RET
PP1   ENDP
;—————————;转换成ASCII———————
P1   PROC
            PUSH  AX
            PUSH  DX
            AND  AL,0FH
             CMP  AL,10
            JB  S
            ADD al,7       ;al +7
S:      ADD  AL,30H
             MOV  DL,AL
             MOV  AH,2
             INT  21H
             POP  DX
            POP  AX
            RET
P1   ENDP
;-------------------------------------------- 
;多字节减法子程序 (分模块)
;NAME  EX22
 
EX22   PROC  ;FAR
            LEA  SI,D1
            LEA DI,D2
            MOV BX,N1
            MOV CX,N2
MM: MOV AL,[DI]
             SBB  [SI],AL
              INC DI
              INC  SI
            DEC  BX
            LOOP  MM
M1:   JZ  M2
             JNC  M2
             SBB  BYTE  PTR  [SI],0
              INC  SI
              DEC  BX
              JMP  M1
M2:     RET
EX22     ENDP
;---------------------------------- 
 
CODE  ENDS
             END STA
ret


结果:







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个码农都是奢望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值