功能:多个字节相减
代码如下:
缺点:多字节相减,借位时被减数会显示负数,如何处理?
; 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
结果: