Здравствуйте!
мне нужна ваша помощь по ассемблеру)
есть такая часть кода:
xchg SI, DX
xor AX, AX
mov AH,2
int 21h
и почему то, после 21-го прерывания моя программа куда-то улетает(за пределы моего кода)
компилировала на ml
причём с данной проблемой я сталкиваюсь не в первый раз, обычно она исчезает после каких-то хитрых махинаций с кодом. Просто уже действительно хочется разобраться.
вот весь код:
.286
DATA segment
N dw 6h
DATA ends
STK segment stack
db 100h dup (0)
STK ends
CODE segment
ASSUME CS:CODE,DS:DATA,SS:STK
main:
mov AX,DATA
mov DS,AX
push N
xor DX, DX
call Fact
mov SI, AX
shr AX, 8
push AX
call TetrToCh16
mov AX, SI
mov SI, DX
push AX
call TetrToCh16
xchg SI, DX
xor AX, AX
mov AH,2
int 21h
mov DX, SI
xor AX, AX
mov AH,2
int 21h
int 21h
mov AX,4C00h
int 21h
TetrToCh16 PROC
push BP
mov BP, SP
xor AX, AX
xor DX, DX
mov BX,DS
mov CX,CS
mov DS,CX
mov BX, offset Dig16
mov AL, 0F0h
AND AX, [BP+4]
shr AX, 4
xlat
shl AX, 8
OR DX, AX
mov AL, 0Fh
AND AL, [BP+4]
xlat
OR DL, AL
pop BP;
ret +2
Dig16 db '0123456789ABCDEF'
TetrToCh16 ENDP
Fact PROC
push BP
mov BP, SP
mov AX, 1
mov CX, [BP+4]
m:
mul CX
loop m
pop BP
ret+2
Fact ENDP
CODE ends
end main
За код прошу не ругать, я начинающий программист)
мне нужна ваша помощь по ассемблеру)
есть такая часть кода:
xchg SI, DX
xor AX, AX
mov AH,2
int 21h
и почему то, после 21-го прерывания моя программа куда-то улетает(за пределы моего кода)
компилировала на ml
причём с данной проблемой я сталкиваюсь не в первый раз, обычно она исчезает после каких-то хитрых махинаций с кодом. Просто уже действительно хочется разобраться.
вот весь код:
.286
DATA segment
N dw 6h
DATA ends
STK segment stack
db 100h dup (0)
STK ends
CODE segment
ASSUME CS:CODE,DS:DATA,SS:STK
main:
mov AX,DATA
mov DS,AX
push N
xor DX, DX
call Fact
mov SI, AX
shr AX, 8
push AX
call TetrToCh16
mov AX, SI
mov SI, DX
push AX
call TetrToCh16
xchg SI, DX
xor AX, AX
mov AH,2
int 21h
mov DX, SI
xor AX, AX
mov AH,2
int 21h
int 21h
mov AX,4C00h
int 21h
TetrToCh16 PROC
push BP
mov BP, SP
xor AX, AX
xor DX, DX
mov BX,DS
mov CX,CS
mov DS,CX
mov BX, offset Dig16
mov AL, 0F0h
AND AX, [BP+4]
shr AX, 4
xlat
shl AX, 8
OR DX, AX
mov AL, 0Fh
AND AL, [BP+4]
xlat
OR DL, AL
pop BP;
ret +2
Dig16 db '0123456789ABCDEF'
TetrToCh16 ENDP
Fact PROC
push BP
mov BP, SP
mov AX, 1
mov CX, [BP+4]
m:
mul CX
loop m
pop BP
ret+2
Fact ENDP
CODE ends
end main
За код прошу не ругать, я начинающий программист)
