Quantcast

Got Homework?

Connect with other students for help. It's a free community.

  • across
    MIT Grad Student
    Online now
  • laura*
    Helped 1,000 students
    Online now
  • Hero
    College Math Guru
    Online now

Here's the question you clicked on:

55 members online
  • 0 replying
  • 0 viewing

inkyvoyd Group Title

Wrote two solutions to a programming problem. The problem was to find the XOR between all of the whole numbers between two whole numbers. The first whole number must be smaller than the second.

  • 2 years ago
  • 2 years ago

  • This Question is Closed
  1. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    word size is 32 bit unsigned. For example, inputting 3 and 10 would get 3->0000 0000 0000 0000 0000 0000 0000 0011 10->0000 0000 0000 0000 0000 0000 0000 1010 I'm going to omit those extra zero's for brevity's sake, and this is in binary (((((((11 xor 100) xor 101) xor 110) xor 111) xor 1000) xor 1001) xor 1010) which equals 1000, which is 8 in decimal.

    • 2 years ago
  2. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    *I mean, dword

    • 2 years ago
  3. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    I am currently trying to learn some assembly, so I wrote a little program in ASM, using libraries that are provided for me in the book. These libaries do I/O for me - nothing more really.

    • 2 years ago
  4. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    I'm using MASM as my assembler.

    • 2 years ago
  5. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    Here is the source code: INCLUDE Irvine32.inc .data prompt BYTE "Enter a long unsigned integer.",0 ;our prompt .code main PROC call Crlf mov edx,OFFSET prompt call WriteString ;writes the null -terminated string with the offset in edx call ReadDec ;reads an unsigned 32 bit integer from the keyboard, and returns it in eax call Crlf ;writes end of line sequence to the console window. call Crlf mov ebx,eax mov edx,OFFSET prompt call WriteString call ReadDec call Crlf call Crlf ;first value is ebx, and second is eax. eax>ebx cmp eax,ebx jz skip sub eax,ebx mov ecx,eax mov eax,ebx L1: inc eax xor ebx,eax dec ecx cmp ecx,0 jnz L1 mov eax,ebx skip: call WriteDec call DumpRegs ;displays register values in the console window exit main ENDP END main

    • 2 years ago
  6. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    If you want the libraries yourself, here they are http://asmirvine.com/asm/examples/index.htm

    • 2 years ago
  7. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    Here is the source of a revised version. INCLUDE Irvine32.inc .data prompt BYTE "Enter a long unsigned integer.",0 .code main PROC call Crlf mov edx,OFFSET prompt call WriteString call ReadDec call Crlf call Crlf mov ebx,eax mov edx,OFFSET prompt call WriteString call ReadDec call Crlf call Crlf mov ecx,eax ;first value is ebx, and second is ecx. ecx>ebx sub ecx,ebx push ebx push ecx mov eax,0 inc ecx L1: xor eax,ebx inc ebx loop L1 pop ecx pop ebx call WriteDec call DumpRegs exit main ENDP END main

    • 2 years ago
  8. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    My question is, is the second significantly faster than the first? And for what cases?

    • 2 years ago
  9. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @farmdawgnation @annas

    • 2 years ago
  10. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @imranmeah91 @nbouscal

    • 2 years ago
  11. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @cshalvey

    • 2 years ago
  12. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    And, btw, any number xor itself inputs the number itself (1023 xor 1023=1023)

    • 2 years ago
  13. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @dpaInc , having fun reading? :3

    • 2 years ago
  14. annas Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @inkyvoyd xor AX, AX is used to set the register's value to zero because 1 xor 1= 0 0 xor 0 =0 1 xor 0 = 1 0 xor 1 = 1

    • 2 years ago
  15. annas Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    and i think 1st one is more faster then the 2nd one

    • 2 years ago
  16. annas Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    the 2nd program will take more time in push and pop data in stack. so its slow ...

    • 2 years ago
  17. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @annas , without the push and the pop, would the second be faster?

    • 2 years ago
  18. annas Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    yes

    • 2 years ago
  19. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    It says in my book I am supposed to save register values, so I included the push and pop. They aren't necessary though, right?

    • 2 years ago
  20. annas Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    yes exactly inky ... the only purpose is to save register

    • 2 years ago
  21. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    Any other people's comments?

    • 2 years ago
  22. slotema Group Title
    Best Response
    You've already chosen the best response.
    Medals 0

    If you assume that all instructions take a single processor cycle (thus assuming no hazards and/or memory stalls), determining which one is better is a case of just counting the instructions. Your first program uses 6 instruction out of the loop (ignoring IO, since both programs have to do that) and 5 instructions inside the loop. That makes a total of 6+5n instructions (where n is the number of xors you need to do). That is from "cmp eax, ebx" up to the skip label. The second program uses 7 + 3n instructions. From "sub ecx, ebx" to "pop ebx". Thus, the second program appears to be faster indeed. The impact of memory misses can be quite huge, but I don't know whether or not the pushes or pops are likely to cause one. One more remark is that I'm not sure the second program will actually work. The "loop" instruction will keep on jumping as long as the ecx register is not-zero. But within the loop, you never change ecx, so it'll result in an infinite loop, I guess.

    • 2 years ago
  23. inkyvoyd Group Title
    Best Response
    You've already chosen the best response.
    Medals 1

    @slotema , it works perfectly fine for me. I'm using a book that is based on MASM - might be syntax that is different from the assembler you are using.

    • 2 years ago
  24. slotema Group Title
    Best Response
    You've already chosen the best response.
    Medals 0

    Ah sorry. I missed a bit where the loop instruction also decrements the ecx register. Sorry for that.

    • 2 years ago
    • Attachments:

See more questions >>>

Your question is ready. Sign up for free to start getting answers.

spraguer (Moderator)
5 → View Detailed Profile

is replying to Can someone tell me what button the professor is hitting...

23

  • Teamwork 19 Teammate
  • Problem Solving 19 Hero
  • You have blocked this person.
  • ✔ You're a fan Checking fan status...

Thanks for being so helpful in mathematics. If you are getting quality help, make sure you spread the word about OpenStudy.

This is the testimonial you wrote.
You haven't written a testimonial for Owlfred.