Сборка вывода (я не понял)

Я хочу напечатать одну строку computer на экране

Но мой вывод отображает строку дважды так:

 computercomputer

Мой код:

data segment   
mesaj db "computer$"
ends
stack segment
dw   128  dup(0)
ends
code segment
start:
mov ax,@data
mov ds,ax
call ekransil
lea dx,mesaj    
call yaz
yaz proc
mov ah,09
int 21h
ret
yaz endp
ekransil proc ;create procedur
mov ax,0600h
mov bh,74h
mov cx,0000h
mov dx,184fh
int 10h
ret
ekransil endp
int 20h
end start ;finish program

Почему значение, отображаемое в сегменте данных, печатается дважды? Я не понимаю Кто-нибудь, помогите мне.

2 ответа

Решение

Какую следующую инструкцию выполнить после этой call yaz? Следующие инструкции будут выполнены

mov ah,09
int 21h
ret

следовательно, вы получили 2x "компьютерное" слово. После этой строки call yaz Вы должны прыгать в конце программы или ret вызов.

Ты видел это?

 call ekransil
 lea dx,mesaj    
 call yaz         
 ; next instructions to execute are below
 yaz proc
   mov ah,09
   int 21h
   ret
 yaz endp

Чтобы не отображать вашу строку дважды, вы можете выполнить одно из следующих действий:

Обычно Путь:

добавлять jmp exit после call yaz а затем добавить эти строки перед end start:

exit:
      mov ah, 04ch ; exit the program
      int 21h      ; and return the control to your OS

Предпочитаемый путь:

или вы можете просто поместить определения обеих ваших процедур после кода выхода следующим образом:

mov ah, 04ch     ; exit
int 21h          ; code 

yaz proc         ; definition of first procedure 
    mov ah,09
    int 21h
    ret
yaz endp

ekransil proc     ; definition of second procedure
    mov ax,0600h
    mov bh,74h
    mov cx,0000h
    mov dx,184fh
    int 10h
    ret
ekransil endp       

end start         ; finish program

Обратите внимание, что в предпочтительной версии нам не нужно jmp маркировать exit и определить это. Он предпочтительнее, чем первый, потому что он делает вашу программу менее запутанной, и у вас будут все определения ваших процедур отдельно от основной процедуры (начало). Кроме того, это становится очень полезным для отладки.

Ура Ахтишам:)

Другие вопросы по тегам