Выводит мусор - Assembler

Узнай цену своей работы

Формулировка задачи:

Привет ребята, подскажите пожалуйста, программа работает вроде правильно, но она еще выводит мусор, как от него избавиться ? MASM32
.386
.model flat, stdcall
option casemap : none   ; case sensitive
 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\macros\macros.asm
 
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
 
Num PROTO: DWORD 
 
.data
    ar0 db 1d,2d,3d,4d
        ar1 dw 500,1002,3003,4004
        ar2 dd 5 dup(0)
        var dd 3124
        new db 0dh,0ah
.code

Write proc v:DWORD
LOCAL v0[4]:byte
lea edi,v0
mov ebx,10
xor ecx,ecx
mov eax,v
test eax,eax
jns beg
mov [v0],'-'
inc edi
neg eax
;//////////////////
flo:   
fld v
fld1   
fld v
fprem 
fsub st(2),st
fxch st(2)
;//////////////////
beg:
xor edx,edx
div ebx
add edx,'0'
push edx
inc ecx
or eax,eax
 
jnz beg
 
sto:
pop edx
mov al,dl
stosb
dec ecx
or ecx,ecx
jnz sto
 
print addr v0   ; Выводит 3124 и мусор, как его убрать?
ret
Write endp

start:
push var
call Write

invoke ExitProcess, NULL
end start

Решение задачи: «Выводит мусор»

textual
Листинг программы
.386
.model flat, stdcall
option casemap : none   ; case sensitive
 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\macros\macros.asm
 
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
 
Num PROTO: DWORD 
 
.data
    ar0 db 1d,2d,3d,4d
        ar1 dw 500,1002,3003,4004
        ar2 dd 5 dup(0)
        var dd 3124
        new db 0dh,0ah
.code
 
 
Write proc v:DWORD
LOCAL v0[4]:byte
lea edi,v0
mov ebx,10
xor ecx,ecx
mov eax,v
test eax,eax
jns beg
mov [v0],'-'
inc edi
neg eax
;//////////////////
flo:   
fld v
fld1   
fld v
fprem 
fsub st(2),st
fxch st(2)
;//////////////////
beg:
xor edx,edx
div ebx
add edx,'0'
push edx
inc ecx
or eax,eax
 
jnz beg
 
sto:
pop edx
mov al,dl
stosb
dec ecx
or ecx,ecx
jnz sto
    xor al,al
    stosb
print addr v0   ; Выводит 3124 и мусор, как его убрать?
ret
Write endp
 
 
 
start:
push var
call Write
 
 
invoke ExitProcess, NULL
end start

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5