One of the things missing from asmLib is the ability to display the values of all of the registers and the flags to the screen. In this assignment you are going to get a chance to do exactly that for me.
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: 5ebdecESI: 5ebdec EDI: 5ebdec EBP: 5afab0 ESP: 5afaa8EIP: 763afa29 EFL: 246 CF=0 SF=0 ZF=1 OF=0 AF=0 PF=1C:\Users\gstev\source\repos\AsmProject\AsmProject\Debug\AsmProject.exe (process 3468) exited with code 0.Press any key to close this window . . .
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.
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.dataflagStr DB ” &flagName=”flagVal DB ?,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 eaxENDM
To use this you can simply call showFlag, the flag to show and its bit position. Here is an example call
ShowFlag CF,1
This shows the carry flag at bit 1