S'il vous plaît, je suis un nouveau langage d'assemblage et j'essaie d'imprimer le contour d'une boîte. Je suis vraiment coincé. essayé tout ce que je sais, mais je ne peux pas l'obtenir pour imprimer le contour. Nous vous remercions d'avance pour votre aideComment imprimer un contour de boîte en langage assembleur
INCLUDE Irvine32.inc
.data
prompt BYTE "This program draws a rectangle using the * character.", 0
len BYTE "How high would you like your box? ", 0
wid BYTE "How wide would you like your box?: ", 0
image BYTE "* ", 0
space BYTE " ", 0
leninput DWORD ?
widinput DWORD ?
h DWORD ?
w DWORD ?
count DWORD ?
.code
main proc
;;; Write the prompt to the screen
mov edx, OFFSET prompt
call WriteString
call Crlf
;;; Write the length request to the screen
mov edx, OFFSET len
call Crlf
call WriteString
;;; Obtain the length value(which will be in eax)
call ReadDec
mov leninput, eax
;;; Write the width request to the screen
mov edx, OFFSET wid
call Crlf
call WriteString
;;; Obtain the second value(which will be in eax)
call ReadDec
mov widinput, eax
;;; Draw rectangle on screen
mov eax, 0
mov ecx, leninput; set outer loop with length
L1 :
mov count, ecx; save outer loop count
mov ecx, widinput; set inner loop count with the width
L2 :
call ConditionCheck
loop L2; repeat the inner loop
call Crlf; Print line
mov ecx, count; restore outer loop(length)
loop L1; repeat outer loop 1
exit
main endp
; ----------------------------------------------------------------------
ConditionCheck PROC
mov eax, leninput
mov ebx, widinput
.IF eax == 1
mov edx, OFFSET image
call WriteString
.ELSEIF eax == leninput
mov edx, OFFSET image
call WriteString
.ELSEIF ebx == 1
mov edx, OFFSET image
call WriteString
.ELSEIF ebx == widinput
mov edx, OFFSET image
call WriteString
.ELSE
mov edx, OFFSET space
call WriteString
.ENDIF
ret
ConditionCheck ENDP
; ---------------------------------------------------------------------- -
end main
sortie devrait ressembler à:
How high would you like your box? 5
How wide would you like your box? 6
******
* *
* *
* *
******
Mais je vais avoir la boîte remplie à la place
Ah .. macros MASM ou directives, ou ce que '.IF' est ... qui doit être gênant pour le débogage, pour ne pas voir les instructions réelles. BTW, avez-vous pensé à ce qui se passerait, si vous faisiez 'leninput - = 2;', produisez toujours une ligne complète, puis faites 'leninput' boucle avec des lignes" intérieures ", et après la boucle finirait, sortie une ligne complète ? (Mais vous devriez probablement désinfecter l'entrée pour vérifier qu'il était 3+) .... et de même le code de la pièce interne peut être plus simple à faire après le traitement 'widinput - = 2;' – Ped7g