我在 x86 汇编中编写了一个简单的程序,并尝试使用 TASM(Turbo) 和 TLINK 运行它。
当我输入 4 和 3 时,减法输出/
而不是1
,这是应该的。
但是当我输入 3 和 4 时,我得到了正确的结果。
求和和排序工作正常,代码仅用于减法不正确。
有什么帮助吗?
code Tasm
.model small
.stack
.code
DONNEES SEGMENT
Nombre1Msg db 'Entrez le 1er chiffre:$'
Nombre2Msg db 'Entrez le 2er chiffre:$'
DifferenceMsg db 'Leur difference:$'
SommeMsg db 'Leur Somme:$'
AscMsg db 'En Ordre croissant:$'
DescMsg db 'En Order decroissant:$'
Sperateur db ',$'
return db 0DH,0AH,('$')
Nombre1 db
Nombre2 db
Somme db
Difference db
DONNEES ENDS
Main PROC FAR
ASSUME DS:DONNEES
MOV AX,DONNEES
MOV DS,AX
MOV DX,offset Nombre1Msg
MOV AH,9
INT 21H
MOV AH,1 ; saisie
INT 21H ; le caractere lu arrive dans AL
Sub AL,'0';le chiffre= code ASCII-ASCII(0)
MOV Nombre1,AL
call LineFeed
MOV DX,offset Nombre2Msg
MOV AH,9
INT 21H
MOV AH,1 ; saisie
INT 21H ; le caractere lu arrive dans AL
Sub AL,'0';le chiffre= code ASCII-ASCII(0)
MOV Nombre2,AL
CMP Nombre1,AL ; 2éme chifre en AL
JL Permutation
Permutation:
MOV AL,Nombre1
MOV AH,Nombre2
MOV Nombre1,AH
MOV Nombre2,AL
MOV AL,Nombre1
SUB AL,Nombre2
MOV Difference,AL
MOV Al,Nombre1
add AL,Nombre2
MOV Somme,AL
call LineFeed
MOV DX,offset DifferenceMsg
MOV AH,9
INT 21H
MOV DL,Difference
ADD DL,48
MOV AH,2
INT 21H
call LineFeed
MOV DX,offset SommeMsg
MOV AH,9
INT 21H
MOV DL,Somme
ADD DL,48
MOV AH,2
INT 21H
call LineFeed
MOV DX,offset AscMsg
MOV AH,9
INT 21H
MOV DL,Nombre2
ADD DL,48
MOV AH,2
INT 21H
MOV DX,offset Sperateur
MOV AH,9
INT 21H
MOV DL,Nombre1
ADD DL,48
MOV AH,2
INT 21H
call LineFeed
MOV DX,offset DescMsg
MOV AH,9
INT 21H
MOV DL,Nombre1
ADD DL,48
MOV AH,2
INT 21H
MOV DX,offset Sperateur
MOV AH,9
INT 21H
MOV DL,Nombre2
ADD DL,48
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
Main ENDP
LineFeed proc near
MOV dx,offset return
MOV ah,9
int 21h
ret
LineFeed endp
end