[MASM] IO Patterns
讀取一串由空格分隔的整數 ex. 10 20 30 40 50
edx是Input String的位址,結果則是存在eax裡
每次從edx抓一個byte進來,判斷是1.數字 或2.空白
1.如果是數字就跳到 StateA,把eax原來的數字x10,然後加上新的數
2.如果是空白,代表一個整數結束,跳到StateB,將eax存進intArray裡,重新開始另一個循環直到edx讀到0,也就是字串的結尾為止。
.data buffer BYTE 512 DUP(0) array DWORD 30 DUP(0) len DOWRD 0 ;//陣列長度 .code mov edx,OFFSET buffer mov ecx, (SIZEOF buffer) call ReadString ;//Read string to buffer mov esi,OFFSET buffer mov edi,OFFSET intArray ;//set addr, esi=buffer, edi=array mov eax,0 ;//init eax start: movzx edx,BYTE PTR[esi] cmp edx,0 ;//end of string je over cmp edx,32 ;//compare to space je stateB jmp stateA stateA: ;//is digit sub edx,48 ;//ascii edx-'0' mov ebx,edx ;//because mul use edx, back up edx mov ecx,10 mul ecx ;//eax=eax*10 mov edx,ebx add eax,edx inc esi jmp start stateB: ;//is space mov [edi],eax ;//把eax存進array裡 mov eax,0 add edi,4 inc esi inc len jmp start over: mov [edi],eax inc len觀念很簡單
edx是Input String的位址,結果則是存在eax裡
每次從edx抓一個byte進來,判斷是1.數字 或2.空白
1.如果是數字就跳到 StateA,把eax原來的數字x10,然後加上新的數
2.如果是空白,代表一個整數結束,跳到StateB,將eax存進intArray裡,重新開始另一個循環直到edx讀到0,也就是字串的結尾為止。
留言
張貼留言