Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

You are to create a procedure called dumpRegisters that will dump the contents of each register to the screen. This includes the flags register and

You are to create a procedure called dumpRegisters that will dump the contents of each register to the screen. This includes the flags register and each independent flag. The output of your dumpRegisters procedure should look like this:
EAX: 5afafc EBX: 9db000 ECX: 5ebdec EDX: 5ebdec
ESI: 5ebdec EDI: 5ebdec EBP: 5afab0 ESP: 5afaa8
EIP: 763afa29 EFL: 246 CF=0 SF=0 ZF=1 OF=0 AF=0 PF=1
Notice the use of the tab macro?
On the surface this seems like an easy chore for the most part but you need to be careful how you save and restore the registers. Remember these registers should match what is shown in the registers window of the debugger.
Review Debugger
If you need a review of the debugger and some information on flags and registers you should take a look at the review on this page.
Some Hopefully Helpful Things
You should have your dumpRegisters procedure call a procedure called showRegister. You want to pass the name of the register along with the value of the register to be displayed. I found that it was probably best to use invoke for this. My prototype looks like this:
showRegister PROTO,
regName:PTR BYTE , regValue:DWORD
Displaying each value of the flags register is probably the most difficult thing here. Because it is I am going to provide a macro that you can use to make the chore easier:
ShowFlag MACRO flagName,shiftCount
LOCAL flagStr, flagVal, L1
.data
flagStr BYTE" &flagName="
flagVal BYTE?,0
.code
push eax
push edx
mov eax,eflags ; retrieve the flags
mov flagVal,'1'
shr eax,shiftCount ; shift into carry flag
jc L1
mov flagVal,'0'
L1:
mov edx,OFFSET flagStr ; display flag name and value
call WriteString
pop edx
pop eax
ENDM
To use this you can simply call showFlag, the flag to show and its bit position. You also need to define eflags which is a DWORD variable and should be located in the data segment of main. Here is an example call
ShowFlag CF,1
This shows the carry flag at bit 1 This code needs to be less redundanr so i can not use invoke that many times. There should be a loop in dumpRegisters PROC. The flags are also not being correctly set up and displayed

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions