StdOut Problem mit MASM
-
Hallo wenn ich hier 3 Buchstaben z.b. eingebe dann wird der String nur 2 mal ausgebebn wenn ich jedoch nur 1 oder 2 Buchstabe eingeben dann werden diese 5 mal ausgeben.
Wieso geht das nicht wenn ich 3 Buchstaben eingebe ? O_o
:xmas2:.486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data var dword "0" , 0 buf dword 100 dup (?) .code start: invoke StdIn , addr buf , 98 mov eax , dword ptr buf mov dword ptr var , eax xor ecx,ecx i: inc ecx push ecx invoke StdOut , addr var pop ecx cmp ecx ,5 je ende jmp i ende: invoke ExitProcess , 0 end start
-
SdtIn liest den Zeilenumbruch mit in den Puffer ein (CR,LF). Wenn du dann nur 4 Byte kopierst, wird nur der Wagenrücklauf (CR=0x0d) mit kopiert -> die Cursorposition ändert sich nach der Ausgabe nicht, woraus folgt das sie immer wieder überschrieben wird.
-
Hallo danke für die Antwort ich hatte jetzt endlich mal Zeit mir das nochmal anzugucken.
Hier ist mein versuch das Problem zu lösen aber irgendwie klappt das nicht so ganz wie ich will. ^^
.486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data var dword "0" , 0 buf dword 100 dup (?) endl DB 13,10 .code start: invoke StdIn , addr buf , 98 mov eax , dword ptr buf mov dword ptr var , eax xor ecx,ecx i: inc ecx push ecx invoke StdOut , addr var invoke StdOut , addr endl pop ecx cmp ecx ,5 je ende jmp i ende: invoke ExitProcess , 0 end start
D:\masm32\bin>console 1 1 1 1 1 1 D:\masm32\bin>console 123 123 123 123 123 123 D:\masm32\bin>
Wenn ich z.b. nur eine 1 eingebe dann wird das ja immer so ausgeben:
D:\masm32\bin>console 1 1 1 1 1 1
wie würdet Ihr das lösen ?
-
macros4ever:
include masm32rt.inc .code main proc mov esi,input() ; max. 131 Zeichen xor edi,edi .while edi < 5 print esi,13,10 inc edi .endw inkey ret main endp end main
ansonsten mal drüber nachdenken, wie man einen string kopiert.
masm
-
Wenn man sich das ganze von Hand zusammenstrickt, könnte es z.B. so aussehen:
-u 100 137 1DD9:0100 31C9 XOR CX,CX 1DD9:0102 BB0002 MOV BX,0200 1DD9:0105 B401 MOV AH,01 1DD9:0107 CD21 INT 21 1DD9:0109 3C0D CMP AL,0D 1DD9:010B 7406 JZ 0113 1DD9:010D 8807 MOV [BX],AL 1DD9:010F 43 INC BX 1DD9:0110 41 INC CX 1DD9:0111 EBF4 JMP 0107 1DD9:0113 C7072400 MOV Word Ptr [BX],0024 1DD9:0117 83C302 ADD BX,+02 1DD9:011A BE0002 MOV SI,0200 1DD9:011D 89DF MOV DI,BX 1DD9:011F F3 REPZ 1DD9:0120 A4 MOVSB 1DD9:0121 B402 MOV AH,02 1DD9:0123 BA0D0A MOV DX,0A0D 1DD9:0126 CD21 INT 21 1DD9:0128 C1EA08 SHR DX,08 1DD9:012B CD21 INT 21 1DD9:012D 81C2F601 ADD DX,01F6 1DD9:0131 B409 MOV AH,09 1DD9:0133 CD21 INT 21 1DD9:0135 CD20 INT 20 -d 100 1DD9:0100 31 C9 BB 00 02 B4 01 CD-21 3C 0D 74 06 88 07 43 1I;..4.M!<.t...C 1DD9:0110 41 EB F4 C7 07 24 00 83-C3 02 BE 00 02 89 DF F3 AktG.$..C.>..._s 1DD9:0120 A4 B4 02 BA 0D 0A CD 21-C1 EA 08 CD 21 81 C2 F6 $4.:..M!Aj.M!.Bv 1DD9:0130 01 B4 09 CD 21 CD 20 00-00 00 00 00 00 00 00 00 .4.M!M ......... 1DD9:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 1DD9:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 1DD9:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 1DD9:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ . -d 200 2a0 1DD9:0200 C8 61 6C 6C 6F 2C 20 54-65 73 74 2C 20 74 65 73 Hallo, Test, tes 1DD9:0210 74 69 6E 67 2C 20 77 81-72 64 65 6E 20 53 69 65 ting, w.rden Sie 1DD9:0220 20 6D 61 6C 20 62 69 74-74 65 20 73 63 68 94 6E mal bitte sch.n 1DD9:0230 65 20 53 63 68 65 69 E1-65 20 73 61 67 65 6E 3F e Scheiae sagen? 1DD9:0240 3F 3F 3B 29 29 5E 5E 24-00 48 61 6C 6C 6F 2C 20 ??;))^^$.Hallo, 1DD9:0250 54 65 73 74 2C 20 74 65-73 74 69 6E 67 2C 20 77 Test, testing, w 1DD9:0260 81 72 64 65 6E 20 53 69-65 20 6D 61 6C 20 62 69 .rden Sie mal bi 1DD9:0270 74 74 65 20 73 63 68 94-6E 65 20 53 63 68 65 69 tte sch.ne Schei 1DD9:0280 E1 65 20 73 61 67 65 6E-3F 3F 3F 3B 29 29 5E 5E ae sagen???;))^^ 1DD9:0290 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
Allerdings fehlt hier noch das Setzen eines Buffers. Man kann aber dem Code oben entnehmen, wie man z.B. vorgehen könnte.
-
und was hat dieser olle 16Bit Kram jetzt mit seiner Frage zu tun? - genau, Garnichts! Es ist einfach unglaublich, dass dieser Misst immer noch propagiert wird.
-
Macros sind doch langweillig das kann ja jeder.^^
-
schrieb:
Macros sind doch langweillig das kann ja jeder.^^
Die ganzen Hochsprachfeatures von MASM sind langweilig